HTTPS リスナーを作成する場合は、クライアントとリスナー間の暗号化接続を確保するために、SSL または Transport Layer Security (TLS) 証明書を構成する必要があります。 このトピックでは、Application Load Balancer (ALB) Ingress でサポートされている証明書の構成方法について説明します。
証明書の構成方法の比較
ALB Ingress を使用すると、証明書の自動検出の構成、Kubernetes Secrets としての証明書の管理、AlbConfigs での証明書の指定を行うことができます。 次の表は、前述の方法を比較したものです。
項目 | 証明書の自動検出を構成する | AlbConfigs で証明書を指定する | Kubernetes Secrets として証明書を管理する |
証明書の保存 | 証明書は Certificate Management Service に保存されます。 | 証明書は Kubernetes Secrets として保存されます。 | |
証明書の検出 | 証明書は、証明書にバインドされているドメイン名に基づいて検出されます。 | 証明書は、その ID に基づいて検出されます。 | 証明書は、証明書が保存されている Secret に基づいて検出されます。 |
シナリオ | この方法は、Certificate Management Service コンソールで購入した証明書、または Certificate Management Service コンソールにアップロードされた証明書に適しています。 | この方法は、クラスタ内で管理されている証明書に適しています。 たとえば、cert-manager を使用して証明書を管理する場合、証明書を Secrets に保存できます。 | |
名前空間をまたがる証明書の使用 | サポートされています | サポートされていません。 Secret として保存された証明書は、その Secret の名前空間内でのみ使用できます。 | |
証明書の更新方法 | Certificate Management Service コンソール に新しい証明書をアップロードするか、元の証明書を更新する必要があります。 その後、証明書が関連付けられている Ingress の構成を手動で変更する必要があります。 | 証明書が保存されている Secret の構成を更新する必要があります。 | |
ALB インスタンスは最大 25 個の証明書をサポートします。 ほとんどの場合、ALB インスタンスで使用される証明書の数は、Ingress に関連付けられた証明書を含む、インスタンスのすべてのリスナーに関連付けられた証明書の総数と等しくなります。 詳細については、「ALB クォータの計算方法」をご参照ください。
異なる方法で構成された証明書の互換性
次の表は、異なる方法で構成された証明書の互換性について説明しています。
証明書の構成方法 | 説明 |
ある証明書は証明書の自動検出を使用して構成され、別の証明書は Kubernetes Secret を使用して構成されています。 |
|
ある証明書は証明書の自動検出を使用して構成され、別の証明書は AlbConfig で指定されています。 両方の証明書は同じリスナーに関連付けられています。 | リスナーは、AlbConfig で指定された証明書のみを使用します。 |
ある証明書は Kubernetes Secret を使用して構成され、別の証明書は AlbConfig で指定されています。 両方の証明書は同じリスナーに関連付けられています。 | 両方の証明書が使用されます。 |
前提条件
信頼できる証明書を取得しています。 以下のいずれかの方法で証明書を取得できます。
Certificate Management Service コンソールで証明書を購入します。 詳細については、「公式証明書を購入する」をご参照ください。
別の認証局 (CA) によって発行された証明書を購入します。
(オプション) 自己署名証明書を作成します。 詳細については、「自己署名証明書を作成する」をご参照ください。
手順
デフォルトでは、AlbConfig はポート 80 で HTTP リスナーを使用して構成されています。 HTTPS リスナーを作成し、証明書を構成する必要があります。 証明書が構成されていない場合、HTTPS リスナーは使用できなくなり、証明書がないためコントローラーは失敗します。
ステップ 1: AlbConfig で HTTPS リスナーを作成する
ACK コンソールを使用する
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[リソースオブジェクト] タブで、検索ボックスに「AlbConfig」と入力し、表示された [AlbConfig] をクリックします。
[AlbConfig] パネルで、デフォルトで名前が alb であるリソースを見つけて、[アクション] 列の [YAML を編集] をクリックします。
[YAML で表示] パネルで、
spec.listeners.portフィールドとspec.listeners.protocolフィールドを追加します。 次に、[OK] をクリックします。
kubectl を使用する
次のコマンドを実行して、
albconfig構成ファイルを編集します。kubectl edit albconfig <Albconfig_Name>ビジネス要件に基づいて構成を変更します。 Albconfig で
portパラメーターとprotocolパラメーターを構成して、対応するリスナーを作成できます。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: addressAllocatedMode: Fixed addressType: Internet zoneMappings: - vSwitchId: vsw-bp19sXXXXXXX176iv - vSwitchId: vsw-bp1boXXXXXXXu74xz listeners: - port: 80 protocol: HTTP - port: 443 # 新しいフィールド protocol: HTTP # 新しいフィールド。 有効な値: HTTP、HTTPS、および QUIC。
(オプション) ステップ 2: 自己署名証明書を作成する
次の OpenSSL コマンドを実行して、自己署名証明書を作成します。
デフォルトでは、自己署名証明書はブラウザまたはクライアントによって信頼されていません。 自己署名証明書を使用すると、セキュリティ警告が表示される場合があります。 この例で生成される自己署名証明書は参照用です。 本番環境では証明書を使用しないでください。
前述のコマンドラインでは、
demo.alb.ingress.topドメイン名が自己署名証明書に関連付けられています。 ドメイン名はカスタムドメイン名に置き換えることができます。
openssl genrsa -out albtop-key.pem 4096
openssl req -subj "/CN=demo.alb.ingress.top" -sha256 -new -key albtop-key.pem -out albtop.csr
echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf次のコマンドを実行して、証明書と秘密鍵を表示します。
cat albtop-key.pem # 秘密鍵。cat albtop-cert.pem # 証明書。次のコマンドを実行して、証明書ファイルと秘密鍵ファイルを Base64 でエンコードします。
echo -n `cat albtop-key.pem` | base64 # 秘密鍵ファイルを Base64 でエンコードします。echo -n `cat albtop-cert.pem` | base64 # 証明書ファイルを Base64 でエンコードします。
ステップ 3: サンプルリソースを作成する
AlbConfig に加えて、ALB Ingress が正しく機能するには、Deployment、Service、IngressClass、および Ingress の 4 つの Kubernetes リソースが必要です。 以下の手順を使用して、これらのリソースをすばやく作成します。
ACK コンソールを使用する
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[YAML から作成] をクリックします。
[サンプルテンプレート]: [カスタム] を選択します。
[テンプレート]: 次のコードをコードエディターにコピーします。 この構成では、Deployment、Service、IngressClass、および Ingress リソースを定義しています。
[作成] をクリックします。 リソースの作成プロセスが開始されたことを示す確認メッセージが表示されます。
次の手順を実行して、Deployment と Service が作成されたことを確認します。
左側のナビゲーションウィンドウで、[ワークロード > デプロイメント]を選択します。デプロイメント
https-deployがデプロイされます。左側のナビゲーションウィンドウで、[ネットワーク > サービス] を選択します。 サービス
https-svcがデプロイされます。左側のナビゲーションウィンドウで、[ネットワーク > Ingress] を選択します。
https-ingressという名前の Ingress がデプロイされます。
kubectl を使用する
https-quickstart.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: https-ingressclass spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb # 作成した AlbConfig の名前に設定します。 --- apiVersion: apps/v1 kind: Deployment metadata: name: https-deploy spec: replicas: 1 selector: matchLabels: app: https-deploy template: metadata: labels: app: https-deploy spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/old-nginx:latest imagePullPolicy: IfNotPresent name: https-deploy ports: - containerPort: 80 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: https-svc spec: ports: - name: port1 port: 443 protocol: TCP targetPort: 80 selector: app: https-deploy sessionAffinity: None type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: name: https-ingress spec: ingressClassName: https-ingressclass rules: - host: demo.alb.ingress.top http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix次のコマンドを実行して、前述のリソースを作成します。
kubectl apply -f https-quickstart.yaml
ステップ 4: 証明書を構成する
証明書の自動検出を構成する
ACK コンソールを使用する
自己署名証明書を Certificate Management Service にアップロードした後、Ingress 構成の tls フィールドに証明書にバインドされているドメイン名を指定できます。 これにより、ALB Ingress はアップロードされた証明書を自動的に検出して使用できます。
自己署名証明書を Certificate Management Service コンソールにアップロードします。 詳細については、「SSL 証明書をアップロードして共有する」をご参照ください。
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[Ingress] ページで、更新する Ingress を見つけて、[アクション] 列の [更新] をクリックします。 [Ingress の変更] パネルで、パラメーターを構成します。 次の表は、パラメーターについて説明しています。
パラメーター
説明
例
[TLS 設定]
TLS 認証を有効にするかどうかを指定します。 Ingress の TLS 認証を有効にできます。
[ドメイン名]: カスタムドメイン名を入力します。
[Secret]: 使用する Secret を選択します。
説明このパラメーターを空のままにすると、証明書の自動検出が使用されます。
Secret を作成するには、次の手順を実行します。
[Secret] フィールドの右側にある [作成] をクリックします。
[Secret の作成] ダイアログボックスで、[名前]、[証明書]、および [キー] パラメーターを構成します。 次に、[OK] をクリックします。
[Secret] ドロップダウンリストから、作成した Secret を選択します。
[+ 追加] をクリックして、TLS 証明書を追加できます。
[ドメイン名]: demo.alb.ingress.top
[Secret]: このパラメーターは空のままにします。
(オプション) [アノテーション]
以下のことができます。
カスタムアノテーション名と値を定義する
構成のために、名前で既存のアノテーションを選択またはフィルタリングする
Ingress アノテーションの詳細については、「Ingress でサポートされているアノテーション」を参照してください。
[+ アノテーションを追加] をクリックして、アノテーションを追加します。 ACK では、追加できる Ingress アノテーションの数に制限はありません。
構成は必要ありません。
説明HTTP リクエストと HTTPS リクエストの両方をリッスンする場合は、次のアノテーションを追加します。
[名前]:
alb.ingress.kubernetes.io/listen-ports[値]:
[{"HTTP": 80},{"HTTPS": 443}]

kubectl を使用する
自己署名証明書を Certificate Management Service にアップロードした後、Ingress 構成の tls フィールドに証明書にバインドされているドメイン名を指定できます。 これにより、ALB Ingress はアップロードされた証明書を自動的に検出して使用できます。
自己署名証明書を Certificate Management Service コンソールにアップロードします。 詳細については、「SSL 証明書をアップロードして共有する」をご参照ください。
次のコマンドを実行して、Ingress を変更します。
kubectl edit ingress https-ingresstlsフィールドを追加し、証明書にバインドされているドメイン名を指定します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: # annotations: # alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # HTTP リクエストと HTTPS リクエストの両方をリッスンする場合は、このアノテーションを追加します。 name: https-ingress spec: ingressClassName: https-ingressclass rules: - host: demo.alb.ingress.top # demo.alb.ingress.top を使用するドメイン名に置き換えます。 http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix tls: # 新しいフィールド -hosts: # 新しいフィールド - demo.alb.ingress.top # 新しいフィールド。 証明書にバインドされているドメイン名に設定します。 ドメイン名は、「rules: host」フィールドで指定されたドメイン名と同じである必要があります。
Kubernetes Secrets として証明書を管理する
ACK コンソールを使用する
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[Ingress] ページで、更新する Ingress を見つけて、[アクション] 列の [更新] をクリックします。 [Ingress の変更] パネルで、パラメーターを構成します。 次の表は、パラメーターについて説明しています。
パラメーター
説明
例
[TLS 設定]
TLS 認証を有効にするかどうかを指定します。 Ingress の TLS 認証を有効にできます。
[ドメイン名]: カスタムドメイン名を入力します。
[Secret]: 使用する Secret を選択します。
説明このパラメーターを空のままにすると、証明書の自動検出が使用されます。
Secret を作成するには、次の手順を実行します。
[Secret] フィールドの右側にある [作成] をクリックします。
[Secret の作成] ダイアログボックスで、[名前]、[証明書]、および [キー] パラメーターを構成します。 次に、[OK] をクリックします。
[Secret] ドロップダウンリストから、作成した Secret を選択します。
[+ 追加] をクリックして、TLS 証明書を追加できます。
[ドメイン名]: demo.alb.ingress.top
[Secret]: https-secret
[Secret] 名: https-secret
[証明書]: Base64 でエンコードされていない自己署名証明書。
[キー]: Base64 でエンコードされていない自己署名秘密鍵。
(オプション) [アノテーション]
以下のことができます。
カスタムアノテーション名と値を定義する
構成のために、名前で既存のアノテーションを選択またはフィルタリングする
Ingress アノテーションの詳細については、「Ingress でサポートされているアノテーション」を参照してください。
[+ アノテーションを追加] をクリックして、アノテーションを追加します。 ACK では、追加できる Ingress アノテーションの数に制限はありません。
構成は必要ありません。
説明HTTP リクエストと HTTPS リクエストの両方をリッスンする場合は、次のアノテーションを追加します。
[名前]:
alb.ingress.kubernetes.io/listen-ports[値]:
[{"HTTP": 80},{"HTTPS": 443}]

kubectl を使用する
自己署名証明書を Secret に保存してから、Ingress 構成で Secret を指定できます。
Secret を作成する
https-secret.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。 証明書ファイルと秘密鍵ファイルを Base64 でエンコードする方法の詳細については、「(オプション) ステップ 2: 自己署名証明書を作成する」の手順を参照してください。
apiVersion: v1 kind: Secret metadata: name: https-secret type: kubernetes.io/tls data: tls.key: | # albtop-key.pem ファイルの Base64 エンコードされたコンテンツ。 {base64 albtop-key.pem} tls.crt: | # albtop-cert.pem ファイルの Base64 エンコードされたコンテンツ。 {base64 albtop-cert.pem}次のコマンドを実行して、Secret を作成します。
kubectl apply -f https-secret.yaml
Ingress を変更します。
次のコマンドを実行して、Ingress を変更します。
kubectl edit ingress https-ingresstlsフィールドを追加し、証明書にバインドされているドメイン名と、証明書が保存されている Secret を指定します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: # annotations: # alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # HTTP リクエストと HTTPS リクエストの両方をリッスンする場合は、このアノテーションを追加します。 name: https-ingress namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top # demo.alb.ingress.top を使用するドメイン名に置き換えます。 http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix tls: # 新しいフィールド - hosts: - demo.alb.ingress.top # 新しいフィールド。 証明書にバインドされているドメイン名に設定します。 ドメイン名は、「rules: host」フィールドで指定されたドメイン名と同じである必要があります。 secretName: https-secret # 新しいフィールド。 証明書キーを作成します。
AlbConfigs で証明書を指定する
ACK コンソールを使用する
自己署名証明書の CertIdentifier を取得します。
自己署名証明書を Certificate Management Service にアップロードした後、AlbConfig のリスナー構成の
CertificateIdフィールドに証明書 ID を指定できます。 これにより、証明書はリスナーに関連付けられます。説明リスナーが証明書に関連付けられている場合、Ingress は証明書の自動検出機能を使用しなくなります。
自己署名証明書を Certificate Management Service コンソールにアップロードします。 詳細については、「SSL 証明書をアップロードして共有する」をご参照ください。
証明書 ID を取得します。
Certificate Management Service コンソール にログオンします。
左側のナビゲーションウィンドウで、 を選択します。
[SSL 証明書の管理] ページで、[アップロードされた証明書の管理] タブをクリックします。 アップロードした証明書を選択し、[アクション] 列の [詳細] をクリックします。
[証明書の詳細] パネルで、[CertIdentifier] フィールドに証明書 ID が表示されます。
AlbConfig で証明書を指定します。
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[リソースオブジェクト] タブで、検索ボックスに「AlbConfig」と入力し、表示された [AlbConfig] をクリックします。
[AlbConfig] パネルで、デフォルトで名前が alb であるリソースを見つけて、[アクション] 列の [YAML を編集] をクリックします。
[YAML で表示] パネルで、次のフィールドを追加します。 表示されるダイアログボックスで、インスタンス名を変更し、[確認] をクリックします。
フィールド
説明
例
certificates証明書の情報。
-
CertificateIdステップ 1 で取得できる証明書の CertIdentifier。
756****-cn-hangzhou
IsDefault証明書をデフォルト証明書として設定するかどうかを指定します。
true

Ingress を変更します。
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて、その名前をクリックします。 左側のペインで、 を選択します。
[Ingress] ページで、更新する Ingress を見つけて、[アクション] 列の [更新] をクリックします。 [Ingress の変更] パネルで、パラメーターを構成します。 次の表は、パラメーターについて説明しています。
パラメーター
説明
例
[アノテーション]
以下のことができます。
カスタムアノテーション名と値を定義する
構成のために、名前で既存のアノテーションを選択またはフィルタリングする
Ingress アノテーションの詳細については、「Ingress でサポートされているアノテーション」を参照してください。
[+ アノテーションを追加] をクリックして、アノテーションを追加します。 ACK では、追加できる Ingress アノテーションの数に制限はありません。
[名前]:
alb.ingress.kubernetes.io/listen-ports[値]:
[{"HTTPS": 443}]説明HTTP リクエストと HTTPS リクエストの両方をリッスンする必要がある場合は、この値を
[{"HTTP": 80},{"HTTPS": 443}]に置き換えます。

kubectl を使用する
自己署名証明書を Certificate Management Service にアップロードした後、AlbConfig のリスナー構成の CertificateId フィールドに証明書 ID を指定できます。 これにより、証明書はリスナーに関連付けられます。
リスナーが証明書に関連付けられている場合、Ingress は証明書の自動検出機能を使用しなくなります。
自己署名証明書を Certificate Management Service コンソールにアップロードします。 詳細については、「SSL 証明書をアップロードして共有する」をご参照ください。
証明書 ID を取得します。
Certificate Management Service コンソール にログオンします。
左側のナビゲーションウィンドウで、 を選択します。
[SSL 証明書の管理] ページで、[アップロードされた証明書の管理] タブをクリックします。 アップロードした証明書を選択し、[アクション] 列の [詳細] をクリックします。
[証明書の詳細] パネルで、[CertIdentifier] フィールドに証明書 ID が表示されます。
AlbConfig で証明書を指定します。
次のコマンドを実行して、AlbConfig を変更します。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。AlbConfig のリスナー構成に
certificatesフィールドを追加し、前の手順で取得した [証明書 ID] を指定します。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: addressType: Intranet name: xiaosha-alb-test listeners: - port: 80 protocol: HTTP - certificates: - CertificateId: 756****-cn-hangzhou # 証明書の ID。 IsDefault: true # 証明書がデフォルトかどうかを指定します。 port: 443 protocol: HTTPS次のコマンドを実行して、Ingress を変更します。
kubectl edit ingress https-ingressalb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'アノテーションを追加します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]' # 新しいフィールド。 HTTP リクエストと HTTPS リクエストの両方をリッスンする場合は、値を '[{"HTTP": 80},{"HTTPS": 443}]' に変更します。 name: https-ingress spec: ingressClassName: https-ingressclass rules: - host: demo.alb.ingress.top # demo.alb.ingress.top を使用するドメイン名に置き換えます。 http: paths: - backend: service: name: https-svc port: number: 443 path: / pathType: Prefix
ステップ 5: 結果の確認
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 83mHOSTS列と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 相互認証を使用してサービス セキュリティを強化する」をご参照ください。