このトピックでは、HTTPS リスナーの SSL 証明書を管理する方法について説明します。有効期限が近づいている、またはすでに有効期限が切れている証明書をスムーズに置き換える方法に焦点を当てています。
前提条件
ACK マネージドクラスター、専用クラスター、または Serverless Kubernetes クラスターが作成されていること。Kubernetes バージョンは 1.18 以降である必要があります。詳細については、「ACK マネージドクラスターの作成」、「ACK 専用クラスターの作成 (新規作成は停止)」、「ACK Serverless クラスターの作成」、または「クラスターの手動アップグレード」をご参照ください。
ALB Ingress Controller コンポーネントがクラスターにインストールされていること。詳細については、「ALB Ingress Controller コンポーネントの管理」をご参照ください。
説明専用クラスターで ALB Ingress を介してサービスにアクセスするには、サービスをデプロイする前に ALB Ingress Controller にアクセス権限を付与する必要があります。詳細については、「ACK 専用クラスターへの ALB Ingress Controller アクセス権限の付与」をご参照ください。
SSL 証明書管理シナリオ
用語
デフォルト証明書: デフォルト証明書は置き換えのみ可能です。追加や削除はできません。各リスナーには一意のデフォルト証明書があります。
拡張証明書: 拡張証明書は追加および削除できます。各リスナーは複数の拡張証明書を持つことができます。証明書のクォータの詳細については、「制限事項」をご参照ください。
リスナー証明書リスト: Application Load Balancer (ALB) コンソールにログインして、リスナーの証明書を表示できます。
新しい証明書: 現在のリスナーの証明書リストにない証明書。
SSL 証明書の管理
ALB Ingress Controller v2.18.0-aliyun.1 以降、AlbConfig の defaultCertificate フィールドを使用してデフォルト証明書を指定できます。詳細については、「ALB Ingress Controller のリリースノート」をご参照ください。
証明書管理シナリオ | 自動検出された証明書 | シークレット証明書 | AlbConfig で指定された証明書 |
新しい証明書をデフォルト証明書として設定する | 方法 1 (推奨) | 方法 1 (推奨) |
|
方法 2 Application Load Balancer (ALB) コンソールにログインして、デフォルト証明書を置き換えます。 | 方法 2
| ||
拡張証明書をデフォルト証明書として設定する | 方法 1 (推奨) | 方法 1 (推奨) | 方法 1 (推奨) |
方法 2
| 方法 2
| 方法 2
| |
新しい証明書を拡張証明書として設定する | 手動で調整をトリガーします。 | Ingress に関連付けられているシークレットリソースを更新します。 |
|
自動検出された証明書、シークレット証明書、および AlbConfig で指定された証明書の詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。
ALB コンソールでデフォルト証明書を置き換える
注意事項
現在のリスナーの証明書リストにない新しい証明書でデフォルト証明書を置き換える場合は、まず新しい証明書が Alibaba Cloud デジタル証明書管理サービスで利用可能かどうかを確認します。証明書が存在しない場合は、デジタル証明書管理サービスコンソールで新しい SSL 証明書を購入またはアップロードできます。詳細については、「商用証明書の購入」および「SSL 証明書のアップロード、同期、共有」をご参照ください。
シナリオ
現在のデフォルト証明書の有効期限が切れています。有効期限が切れたデフォルト証明書を新しいものに置き換える必要があります。
現在のデフォルト証明書は有効期限が切れていませんが、使用を停止することにしました。有効期限が切れていないデフォルト証明書を新しいものに置き換えることができます。
ALB コンソールで拡張証明書を削除した後、その証明書を新しいデフォルト証明書として設定します。
手順
Application Load Balancer (ALB) コンソールにログインします。トップメニューバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、ターゲットインスタンスを見つけてインスタンス ID をクリックします。インスタンス詳細タブで、[設定変更保護の無効化] をクリックします。
重要設定変更保護を無効にした後、Application Load Balancer (ALB) コンソールでリスナー構成を変更した場合、次回の調整後にデフォルト証明書の構成のみが ACK クラスターに書き戻されます。他の構成変更はクラスターに書き戻されません。これは、次回の調整中に、これらの構成がクラスターからの構成によって上書きされる可能性があることを意味します。したがって、他の操作は注意して実行してください。次回の調整後、クラスターで
kubectl describe albconfig [$Albconfig_Name]コマンドを実行し、statusフィールドの内容を確認して、デフォルト証明書の構成が正常に書き戻されたことを確認できます。[リスナー] タブをクリックします。ターゲットリスナーの ID をクリックしてリスナー詳細ページに移動し、[リスナー証明書] タブをクリックします。
[サーバー証明書] タブで、リスナーのデフォルトサーバー証明書を見つけます。[操作] 列で、[置換] をクリックします。
表示されるダイアログボックスで、新しい証明書を選択し、[OK] をクリックします。
この操作を実行すると、リスナーのデフォルト証明書が新しい証明書に更新されます。
元のデフォルト証明書がまだ必要な場合は、[サーバー証明書] ページで [拡張証明書の追加] をクリックして、リスナー構成に拡張証明書として追加し直します。
元のデフォルト証明書が不要になり、他のインスタンスやリスナーから参照されていないことが確実な場合は、[サーバー証明書] ページのターゲット証明書の [操作] 列にある [削除] をクリックして削除できます。証明書を削除しない場合、有効期限が切れていない元のデフォルト証明書は、次回の構成調整中に自動的に拡張証明書としてリスナーに関連付けられます。
設定変更保護を有効にします。
ALB コンソールで拡張証明書を削除する
この操作では、拡張証明書をデフォルト証明書として設定する前に削除します。このプロセスは通常、数秒かかります。このプロセス中に、リスナーの証明書リストに拡張証明書と同じドメイン名の他の証明書が存在しない場合、そのドメイン名の転送ルールは一時的に適切な証明書を見つけることができなくなります。これにより、サービスに影響が及ぶ可能性があります。したがって、サービスに影響がないことを確認した上で、この操作を慎重に実行してください。
注意事項
拡張証明書を削除する前に、リスナーの証明書リストを確認してください。デフォルト証明書と拡張証明書の現在の構成が要件を満たしている場合は、拡張証明書を削除したり、デフォルト証明書を置き換えたりする必要はありません。
操作を実行する前に、削除する拡張証明書と同じドメイン名の一時的な証明書をアップロードすることをお勧めします。拡張証明書を削除する前に、[サーバー証明書] タブで [拡張証明書の追加] をクリックします。表示されるダイアログボックスで、アップロードした一時的な証明書を選択します。一時的な証明書のステータスが [関連付け済み] であることを確認した後、拡張証明書を削除します。デフォルト証明書を置き換えた後、一時的な証明書を削除します。
シナリオ
現在のデフォルト証明書の有効期限が切れている場合は、まず拡張証明書を削除できます。次に、ALB コンソールでデフォルト証明書を置き換えるの手順に従って、この証明書をデフォルト証明書として設定します。
現在のデフォルト証明書は有効期限が切れていませんが、使用を停止することにした場合は、拡張証明書を削除できます。次に、ALB コンソールでデフォルト証明書を置き換えるの手順に従って、この証明書をデフォルト証明書として設定します。必要に応じて、元のデフォルト証明書を拡張証明書として追加し直すかどうかを決定できます。
調整中に ALB Ingress Controller によって自動的に選択されたデフォルト証明書が目的のものでない場合は、拡張証明書を削除できます。次に、ALB コンソールでデフォルト証明書を置き換えるの手順に従って、この証明書をデフォルト証明書として設定します。その後、元のデフォルト証明書を拡張証明書として追加し直します。
手順
Application Load Balancer (ALB) コンソールにログインします。トップメニューバーで、インスタンスがデプロイされているリージョンを選択します。
[インスタンス] ページで、ターゲットインスタンスを見つけ、[インスタンス ID] をクリックします。[インスタンス詳細] タブで、[設定変更保護の無効化] をクリックします。
重要設定変更保護を無効にした後、ALB コンソールでデフォルト証明書を置き換えるの手順に従ってデフォルト証明書を更新する場合、Application Load Balancer (ALB) コンソールでリスナー構成を変更しても、次回の調整後に証明書構成のみが ACK クラスターに書き戻されます。他の構成変更はクラスターに書き戻されません。これは、次回の調整中に、これらの書き戻されていない構成がクラスターからの構成によって上書きされる可能性があることを意味します。したがって、他の操作は注意して実行してください。次回の調整後、クラスターで
kubectl describe albconfig [$Albconfig_Name]コマンドを実行し、statusフィールドの内容を確認して、証明書構成が正常に書き戻されたことを確認できます。[リスナー] タブをクリックします。ターゲットリスナーの ID をクリックしてリスナー詳細ページに移動し、[リスナー証明書] タブをクリックします。
[サーバー証明書] タブで、削除する拡張証明書を見つけます。[操作] 列で [削除] をクリックし、プロンプトに従って操作を完了します。
設定変更保護を有効にします。
新しい証明書を拡張証明書に更新する
手動で調整をトリガーする
シナリオ
自動検出方法を使用して証明書を管理する場合、ALB Ingress Controller コンポーネントは、デジタル証明書管理サービスコンソールで購入またはアップロードした新しい SSL 証明書をすぐには検出しません。ALB Ingress Controller は、調整操作中にのみデジタル証明書管理サービスコンソールから証明書をクエリして取得します。したがって、新しく更新された証明書を ALB Ingress で有効にするには、手動で調整プロセスをトリガーする必要があります。
自動検出方法を使用して証明書を管理する場合、Ingress 構成ファイルの spec.rules[].host フィールドの値が spec.tls[].hosts[] フィールドにリストされているドメイン名に対応している必要があることに注意してください。これにより、各ドメイン名が正しい証明書に関連付けられるようになります。
手順
調整をトリガーして証明書を更新するには、ALB Ingress 構成を変更します。ビジネスニーズに基づいて、ALB Ingress アノテーション辞書から変更する構成を選択します。
現在のビジネス構成のニーズが不明な場合は、key_test: value_test などの重要でないアノテーションを Ingress YAML ファイルに追加して、ALB Ingress Controller による調整をトリガーすることをお勧めします。次のコードに例を示します。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-https namespace: default annotations: key_test: value_test # 調整をトリガーするために重要でないアノテーションを追加します。 spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: paths: - backend: service: name: demo-service-https port: number: 443 path: / pathType: Prefix tls: - hosts: - demo.alb.ingress.top次のコマンドを実行して Ingress を更新します。
kubectl apply -f demo.yaml次のコマンドを実行して、調整が成功したことを確認します。
kubectl describe ingress demo-https -n default(オプション) Ingress YAML ファイルから重要でないアノテーションを削除し、ステップ 2 のコマンドを実行して Ingress を更新します。
Ingress に関連付けられているシークレットリソースを更新する
シナリオ
現在の ALB Ingress ですでに有効になっているシークレットリソースを更新するには、既存のシークレットリソースの YAML 構成ファイルを直接編集します。次に、更新された YAML ファイルを Kubernetes クラスターに適用します。この操作により、ALB Ingress Controller による調整が自動的にトリガーされます。手動での介入は必要ありません。詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。
現在の ALB Ingress に新しいシークレット証明書を追加するには、まず新しいシークレットリソースを作成する必要があります。次に、ALB Ingress リソースの構成ファイルを変更して、新しいシークレットリソースの名前を TLS の下の
secretNameフィールドに追加します。新しいシークレットリソースを作成します。詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。
新しく作成したシークレットリソースを ALB Ingress リソースの構成ファイルに追加します。
Ingress YAML ファイルに、新しいシークレットリソースに対応するドメイン名と
secretNameを追加します。次のコードに例を示します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-https namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: paths: - backend: service: name: demo-service-https port: number: 443 path: / pathType: Prefix - host: newsecret.alb.ingress.top # 新しいドメイン名は新しいシークレットリソースに対応します。 http: paths: - backend: service: name: demo-service-https port: number: 443 path: / pathType: Prefix tls: - hosts: - demo.alb.ingress.top secretName: secret-tls - hosts: - newsecret.alb.ingress.top # 新しいシークレットリソースに対応するドメイン名を追加します。 secretName: newsecret # 新しいシークレットリソースに対応する secretName を追加します。次のコマンドを実行して Ingress を更新します。
kubectl apply -f demo.yaml # demo.yaml を独自の YAML ファイルに置き換えます。
kubectl edit コマンドを使用して証明書 ID を更新する
シナリオ
AlbConfig で証明書を指定する方法を使用する場合、デジタル証明書管理サービスコンソールで新しい SSL 証明書を購入またはアップロードした場合、または古い証明書を変更した後に証明書 ID が変更された場合は、次のように AlbConfig を更新できます。
手順
証明書 ID を取得します。
デジタル証明書管理サービスコンソールにログインします。
左側のナビゲーションウィンドウで、を選択します。
[SSL 証明書管理] ページで、[証明書のアップロード] タブをクリックします。ターゲット証明書の [操作] 列で [詳細] をクリックします。次に、証明書詳細パネルから [証明書 ID] を取得します。
kubectl editコマンドを使用して増分更新を実行します。次のコマンドを実行して AlbConfig 名を表示します。
kubectl -n kube-system get AlbConfig次のコマンドを実行して、対応する AlbConfig を更新します。
kubectl -n <NameSpace> edit AlbConfig <AlbConfig_Name>取得した証明書 ID で YAML ファイルを更新します。
#... spec: config: #... listeners: - caEnabled: false certificates: #... - CertificateId: 756****-cn-hangzhou # 新しい証明書 ID。 IsDefault: false port: 443 protocol: HTTPS #...
defaultCertificate を使用して AlbConfig でデフォルト証明書を手動で指定する
注意事項
IsDefault フィールド: デフォルト証明書は作成時にのみ指定できます。システムは、後で必要がない限り自動的に変更しません。デフォルト証明書を手動で置き換えるには、
defaultCertificateフィールドを使用します。listeners: - port: 443 protocol: HTTPS certificates: - CertificateId: abcdefg-hangzhou IsDefault: truedefaultCertificate の優先度:
defaultCertificateフィールドはcertificates.IsDefaultよりも優先度が高くなります。これは、defaultCertificateを構成すると、certificates.IsDefaultが自動的に無効になることを意味します。... ... listeners: - port: 443 protocol: HTTPS defaultCertificate: kind: CertIdentifier certificateId: 75****-hangzhou certificates: - CertificateId: 75****-hangzhou IsDefault: true
証明書のマッチング優先度: 同じリスナーポートに拡張証明書とデフォルト証明書の両方が構成されている場合、最初に拡張証明書がマッチングされます。一致するものがない場合は、フォールバックとしてデフォルト証明書が使用されます。
ALB Ingress Controller は v2.18.0-aliyun.1 以降のバージョンにアップグレードする必要があります。詳細については、「ALB Ingress Controller コンポーネントのアップグレード」をご参照ください。
手順
ALB Ingress Controller v2.18.0-aliyun.1 以降、AlbConfig の defaultCertificate フィールドを使用してデフォルト証明書を指定できます。詳細については、「ALB Ingress Controller のリリースノート」をご参照ください。
defaultCertificate.kind フィールドは、値として CertIdentifier と Secret のみをサポートします。
証明書 ID (CertIdentifier) を使用する
defaultCertificate.kind が CertIdentifier に設定されている場合、対応する証明書 ID (certificateId) を指定する必要があります。次のコードに例を示します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressType: Intranet
name: alb-test
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
defaultCertificate:
kind: CertIdentifier
certificateId: 123****-cn-hangzhou ## ターゲット証明書 ID を指定します。シークレットを使用する
defaultCertificate.kind が Secret に設定されている場合、対応する secretName と secretNamespace を指定して、シークレットをデフォルト証明書として参照する必要があります。次のコードに例を示します。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressType: Intranet
name: xiaosha-alb-test
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
defaultCertificate:
kind: Secret
secretName: test-secret ## ターゲットの secretName を指定します。
secretNamespace: test ## ターゲットの secretNamespace を指定します。追加情報
デジタル証明書管理サービスコンソールで証明書を変更した後 (証明書の更新、ドメイン名の追加、ドメイン名の置き換えなど)、証明書 ID が変更されたかどうかを確認します。証明書 ID が変更された場合は、選択した証明書管理方法に基づいて ALB Ingress で更新をトリガーする必要があります。
複数の証明書構成方法を同時に使用する場合は、証明書を更新する際の各方法の互換性に注意してください。詳細については、「証明書管理方法の互換性」をご参照ください。
よくある質問
調整中に「Specified parameter array contains too many items, up to 15 items, Certificates is not valid」というエラーメッセージが表示されるのはなぜですか?
v2.11.0-aliyun.1 以降、ALB Ingress Controller コンポーネントは証明書のページングをサポートしています。調整中に「Specified parameter array contains too many items, up to 15 items, Certificates is not valid」というエラーメッセージが表示された場合、使用している ALB Ingress Controller コンポーネントのバージョンが証明書のページングをサポートしておらず、1 回の調整で 15 を超える証明書を関連付けようとしていることを示します。この問題を解決するには、ALB Ingress Controller コンポーネントを最新バージョンにアップグレードすることをお勧めします。コンポーネントのバージョンの詳細については、「ALB Ingress Controller」をご参照ください。コンポーネントのアップグレード方法の詳細については、「ALB Ingress Controller コンポーネントの管理」をご参照ください。
リファレンス
ALB Ingress を使用して HTTPS リスナーに初めて証明書を構成する方法の詳細については、「証明書管理方法の互換性」をご参照ください。
ALB Ingress を構成して HTTPS 相互認証を実装する方法の詳細については、「HTTPS 相互認証を使用してサービスのセキュリティを向上させる」をご参照ください。
ALB の使用中にエラーや問題が発生した場合は、次のトピックを参照してトラブルシューティングを行ってください: 「ALB Ingress の問題のトラブルシューティング」および「ALB Ingress に関するよくある質問」。