HTTPS リスナーを構成する場合、クライアントとリスナー間の接続を暗号化するために、リスナーに SSL または TLS 証明書を関連付ける必要があります。このトピックでは、Application Load Balancer (ALB) Ingress を使用して HTTPS リスナーの証明書を構成する方法について説明します。
証明書の構成方法の比較
ALB Ingress では、証明書の自動検出の構成、Kubernetes Secret としての証明書の管理、AlbConfig での証明書の指定を行うことができます。次の表は、上記の方法を比較したものです。
項目 | 証明書の自動検出を構成する | AlbConfig で証明書を指定する | Secret として証明書を管理する |
証明書の保存場所 | 証明書は Certificate Management Service に保存されます。 | 証明書は Kubernetes Secret として保存されます。 | |
証明書の検出 | 証明書は、証明書にバインドされているドメイン名に基づいて検出されます。 | 証明書は、その ID に基づいて検出されます。 | 証明書は、証明書が保存されている Secret に基づいて検出されます。 |
シナリオ | この方法は、Certificate Management Service コンソールで購入した証明書、または Certificate Management Service コンソールにアップロードされた証明書に適しています。 | この機能は、クラスターで管理されている証明書に適しています。たとえば、cert-manager を使用して証明書を管理する場合、証明書を Secret に保存できます。 | |
名前空間をまたがる証明書の使用 | サポートされています。 | サポートされていません。Secret として保存された証明書は、Secret の名前空間内でのみ使用できます。 | |
証明書の更新方法 | 新しい証明書をCertificate Management Service コンソールにアップロードするか、元の証明書を更新する必要があります。その後、証明書が関連付けられている Ingress の構成を手動で変更する必要があります。 | 証明書が保存されている Secret の構成を更新する必要があります。 |
ALB インスタンスは最大 25 個の証明書をサポートします。ほとんどの場合、ALB インスタンスで使用される証明書の数は、Ingress に関連付けられた証明書を含む、インスタンスのすべてのリスナーに関連付けられた証明書の総数と同じです。詳細については、ALB クォータの計算方法を参照してください。
異なる方法で構成された証明書の互換性
次の表は、異なる証明書構成方法の互換性について説明しています。
証明書の構成方法 | 説明 |
証明書の自動検出を使用して 1 つの証明書が構成され、Kubernetes Secret を使用して別の証明書が構成されています。 |
|
証明書の自動検出を使用して 1 つの証明書が構成され、AlbConfig で別の証明書が指定されています。両方の証明書が同じリスナーに関連付けられています。 | リスナーは、AlbConfig で指定された証明書のみを使用します。 |
Kubernetes Secret を使用して 1 つの証明書が構成され、AlbConfig で別の証明書が指定されています。両方の証明書が同じリスナーに関連付けられています。 | 両方の証明書が使用されます。 |
前提条件
AlbConfig が作成されていること。詳細については、ALB Ingress を使い始めるを参照してください。
信頼できる証明書を取得していること。証明書は次のいずれかの方法で取得できます。
Certificate Management Service コンソールで証明書を購入する。詳細については、SSL 証明書を購入するを参照してください。
別の認証局 (CA) によって発行された証明書を購入する。
(オプション) 自己署名証明書を生成するの手順に従って、自己署名証明書を生成する。
(オプション) 手順 1: 自己署名証明書を生成する
次の OpenSSL コマンドを実行して、自己署名証明書を作成します。
デフォルトでは、自己署名証明書はブラウザーまたはクライアントによって信頼されません。Ingress に自己署名証明書を関連付けると、Ingress を使用するアプリケーションにアクセスしたときにセキュリティ警告が表示される場合があります。この例で生成される自己署名証明書は参照用です。本番環境ではこの証明書を使用しないでください。
openssl genrsa -out albtop-key.pem 4096
openssl req -subj "/CN=demo.alb.ingress.top" -sha256 -new -key albtop-key.pem -out albtop.csr // 使用するドメイン名で demo.alb.ingress.top を置き換えることができます。
echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf // 使用するドメイン名で demo.alb.ingress.top を置き換えることができます。
openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf
上記のコマンドラインでは、demo.alb.ingress.top
ドメイン名が自己署名証明書に関連付けられています。ドメイン名をカスタムドメイン名に置き換えることができます。
手順 2: 証明書を使用するためのリソースを作成する
作成した AlbConfig に加えて、ALB Ingress を正常に機能させるには、Deployment、Service、IngressClass、および Ingress を作成する必要があります。次の YAML テンプレートを使用して、上記のリソースを作成できます。
https-quickstart.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
(オプション) AlbConfig で HTTP リスナーと HTTPS リスナーの両方が構成されている場合は、Ingress 構成に
annotations
フィールドを追加します。例:次のコマンドを実行して、上記のリソースを作成します。
kubectl apply -f https-quickstart.yaml
手順 3: 証明書を構成する
証明書の自動検出を構成する
自己署名証明書を Certificate Management Service にアップロードした後、Ingress 構成の tls
フィールドにバインドされたドメイン名を指定できます。これにより、ALB Ingress はアップロードされた証明書を自動的に検出して使用できます。
自己署名証明書を Certificate Management Service コンソールにアップロードします。詳細については、SSL 証明書をアップロードするを参照してください。
Ingress 構成を更新します。
次のコマンドを実行して、Ingress を変更します。
kubectl edit ingress https-ingress
tls
フィールドを追加し、証明書にバインドされているドメイン名を指定します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: #... tls: - hosts: - demo.alb.ingress.top # 証明書にバインドされているドメイン名に設定します。ドメイン名は、「rules: host」フィールドで指定されたドメイン名と同じである必要があります。
Secret として証明書を管理する
自己署名証明書を Secret に保存し、Ingress 構成で Secret を指定できます。
次のコマンドを実行して、証明書ファイルと秘密鍵ファイルを Base64 でエンコードします。
echo -n `cat albtop-key.pem` | base64 # albtop-key.pem を秘密鍵ファイルの名前に置き換えます。
echo -n `cat albtop-cert.pem` | base64 # albtop-cert.pem を証明書ファイルの名前に置き換えます。
Secret を作成します。
albconfig.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: Secret metadata: name: https-secret type: kubernetes.io/tls data: tls.key: | {base64 albtop-key.pem} # albtop-key.pem ファイルの Base64 エンコードされたコンテンツ。 tls.crt: | {base64 albtop-cert.pem} # albtop-cert.pem ファイルの Base64 エンコードされたコンテンツ。
次のコマンドを実行して、Secret を作成します。
kubectl apply -f https-secret.yaml
Ingress 構成を更新します。
次のコマンドを実行して、Ingress を変更します。
kubectl edit ingress https-ingress
tls
フィールドを追加し、証明書にバインドされているドメイン名と、証明書が保存されている Secret を指定します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: #... tls: - hosts: - demo.alb.ingress.top # 証明書にバインドされているドメイン名に設定します。ドメイン名は、「rules: host」フィールドで指定されたドメイン名と同じである必要があります。 secretName: https-secret
AlbConfig で証明書を指定する
自己署名証明書を Certificate Management Service にアップロードした後、AlbConfig のリスナー構成の CertificateId
フィールドで証明書 ID を指定できます。これにより、証明書がリスナーに関連付けられます。
リスナーが証明書に関連付けられている場合、Ingress は証明書の自動検出機能を使用しなくなります。
自己署名証明書を Certificate Management Service コンソールにアップロードします。詳細については、SSL 証明書をアップロードするを参照してください。
証明書 ID を取得します。
Certificate Management Service コンソールにログインします。
左側のナビゲーションペインで、 を選択します。
SSL 証明書管理ページで、SSL証明書管理アップロードされた証明書の管理タブをクリックします。アップロードした証明書を選択し、
アクション列でを選択します。証明書の詳細パネルで、CertIdentifier フィールドに証明書 ID が表示されます。
AlbConfig で証明書 ID を指定します。
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
AlbConfig のリスナー構成に
certificates
フィールドを追加し、前の手順で取得した証明書 IDを指定します。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: #... listeners: - port: 443 protocol: HTTPS certificates: - CertificateId: 756****-cn-hangzhou # 証明書 ID を指定します。 IsDefault: true # 証明書がデフォルトの証明書かどうかを指定します。 - port: #... protocol: #...
手順 4: 証明書が構成されていることを確認する
HTTPS 経由でアプリケーションにアクセスし、証明書が構成されていることを確認します。
次のコマンドを実行して、Ingress をクエリします。
kubectl get ingress
予期される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83m
HOSTS
列とADDRESS
列の値を記録します。次のコマンドを実行して、ALB Ingress のバックエンドサービスにアクセスします。
demo.alb.ingress.top
とalb-********.alb.aliyuncs.com
を前の手順で取得した値に置き換えます。curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com
次の出力が返された場合、証明書は構成されています。
old
関連情報
HTTP/3 プロトコルを使用するクライアントからのリクエストを受信する場合は、QUIC リスナーを使用して HTTP/3 をサポートし、ネットワークパフォーマンスを向上させるを参照してください。
リスナーを使用して HTTPS 相互認証を有効にする場合は、HTTPS 相互認証を使用してサービスセキュリティを強化するを参照してください。