すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:HTTPS リスナーの SSL 証明書の管理

最終更新日:Nov 09, 2025

このトピックでは、HTTPS リスナーの SSL 証明書を管理する方法について説明します。有効期限が近づいている、またはすでに有効期限が切れている証明書をスムーズに置き換える方法に焦点を当てています。

前提条件

SSL 証明書管理シナリオ

用語

  • デフォルト証明書: デフォルト証明書は置き換えのみ可能です。追加や削除はできません。各リスナーには一意のデフォルト証明書があります。

  • 拡張証明書: 拡張証明書は追加および削除できます。各リスナーは複数の拡張証明書を持つことができます。証明書のクォータの詳細については、「制限事項」をご参照ください。

  • リスナー証明書リスト: Application Load Balancer (ALB) コンソールにログインして、リスナーの証明書を表示できます。

  • 新しい証明書: 現在のリスナーの証明書リストにない証明書。

SSL 証明書の管理

説明

ALB Ingress Controller v2.18.0-aliyun.1 以降、AlbConfig の defaultCertificate フィールドを使用してデフォルト証明書を指定できます。詳細については、「ALB Ingress Controller のリリースノート」をご参照ください。

証明書管理シナリオ

自動検出された証明書

シークレット証明書

AlbConfig で指定された証明書

新しい証明書をデフォルト証明書として設定する

方法 1 (推奨)

defaultCertificate を使用してデフォルト証明書を指定する

方法 1 (推奨)

defaultCertificate を使用してデフォルト証明書を指定する

kubectl edit コマンドを使用して証明書 ID を更新します。

方法 2

Application Load Balancer (ALB) コンソールにログインして、デフォルト証明書を置き換えます。

方法 2
  1. Ingress に関連付けられているシークレットリソースを更新します。

  2. Application Load Balancer (ALB) コンソールにログインして、デフォルト証明書が期待どおりに更新されたことを確認します。調整を行うには、「拡張証明書をデフォルト証明書として設定する」シナリオで説明されている操作を実行します。

拡張証明書をデフォルト証明書として設定する

方法 1 (推奨)

defaultCertificate を使用してデフォルト証明書を指定する

方法 1 (推奨)

defaultCertificate を使用してデフォルト証明書を指定する

方法 1 (推奨)

defaultCertificate を使用してデフォルト証明書を指定する

方法 2
  1. Application Load Balancer (ALB) コンソールにログインします

  2. 拡張証明書を削除します。

    これはリスクの高い操作です。この操作はオフピーク時に実行し、リスクを回避する方法に注意してください。
  3. デフォルト証明書を置き換えます。

方法 2
  1. Application Load Balancer (ALB) コンソールにログインします

  2. 拡張証明書を削除します。

    これはリスクの高い操作です。この操作はオフピーク時に実行し、リスクを回避する方法に注意してください。
  3. デフォルト証明書を置き換えます。

方法 2
  1. Application Load Balancer (ALB) コンソールにログインします

  2. 拡張証明書を削除します。

    これはリスクの高い操作です。この操作はオフピーク時に実行し、リスクを回避する方法に注意してください。
  3. デフォルト証明書を置き換えます。

新しい証明書を拡張証明書として設定する

手動で調整をトリガーします。

Ingress に関連付けられているシークレットリソースを更新します。

kubectl edit コマンドを使用して証明書 ID を更新します。

自動検出された証明書、シークレット証明書、および AlbConfig で指定された証明書の詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。

ALB コンソールでデフォルト証明書を置き換える

注意事項

現在のリスナーの証明書リストにない新しい証明書でデフォルト証明書を置き換える場合は、まず新しい証明書が Alibaba Cloud デジタル証明書管理サービスで利用可能かどうかを確認します。証明書が存在しない場合は、デジタル証明書管理サービスコンソールで新しい SSL 証明書を購入またはアップロードできます。詳細については、「商用証明書の購入」および「SSL 証明書のアップロード、同期、共有」をご参照ください。

シナリオ

  • 現在のデフォルト証明書の有効期限が切れています。有効期限が切れたデフォルト証明書を新しいものに置き換える必要があります。

  • 現在のデフォルト証明書は有効期限が切れていませんが、使用を停止することにしました。有効期限が切れていないデフォルト証明書を新しいものに置き換えることができます。

  • ALB コンソールで拡張証明書を削除した後、その証明書を新しいデフォルト証明書として設定します。

手順

  1. Application Load Balancer (ALB) コンソールにログインします。トップメニューバーで、インスタンスがデプロイされているリージョンを選択します。

  2. [インスタンス] ページで、ターゲットインスタンスを見つけてインスタンス ID をクリックします。インスタンス詳細タブで、[設定変更保護の無効化] をクリックします。

    重要

    設定変更保護を無効にした後、Application Load Balancer (ALB) コンソールでリスナー構成を変更した場合、次回の調整後にデフォルト証明書の構成のみが ACK クラスターに書き戻されます。他の構成変更はクラスターに書き戻されません。これは、次回の調整中に、これらの構成がクラスターからの構成によって上書きされる可能性があることを意味します。したがって、他の操作は注意して実行してください。次回の調整後、クラスターで kubectl describe albconfig [$Albconfig_Name] コマンドを実行し、status フィールドの内容を確認して、デフォルト証明書の構成が正常に書き戻されたことを確認できます。

  3. [リスナー] タブをクリックします。ターゲットリスナーの ID をクリックしてリスナー詳細ページに移動し、[リスナー証明書] タブをクリックします。

  4. [サーバー証明書] タブで、リスナーのデフォルトサーバー証明書を見つけます。[操作] 列で、[置換] をクリックします。

  5. 表示されるダイアログボックスで、新しい証明書を選択し、[OK] をクリックします。

    この操作を実行すると、リスナーのデフォルト証明書が新しい証明書に更新されます。

    • 元のデフォルト証明書がまだ必要な場合は、[サーバー証明書] ページで [拡張証明書の追加] をクリックして、リスナー構成に拡張証明書として追加し直します。

    • 元のデフォルト証明書が不要になり、他のインスタンスやリスナーから参照されていないことが確実な場合は、[サーバー証明書] ページのターゲット証明書の [操作] 列にある [削除] をクリックして削除できます。証明書を削除しない場合、有効期限が切れていない元のデフォルト証明書は、次回の構成調整中に自動的に拡張証明書としてリスナーに関連付けられます。

  6. 設定変更保護を有効にします。

ALB コンソールで拡張証明書を削除する

この操作では、拡張証明書をデフォルト証明書として設定する前に削除します。このプロセスは通常、数秒かかります。このプロセス中に、リスナーの証明書リストに拡張証明書と同じドメイン名の他の証明書が存在しない場合、そのドメイン名の転送ルールは一時的に適切な証明書を見つけることができなくなります。これにより、サービスに影響が及ぶ可能性があります。したがって、サービスに影響がないことを確認した上で、この操作を慎重に実行してください。

注意事項

拡張証明書を削除する前に、リスナーの証明書リストを確認してください。デフォルト証明書と拡張証明書の現在の構成が要件を満たしている場合は、拡張証明書を削除したり、デフォルト証明書を置き換えたりする必要はありません。

操作を実行する前に、削除する拡張証明書と同じドメイン名の一時的な証明書をアップロードすることをお勧めします。拡張証明書を削除する前に、[サーバー証明書] タブで [拡張証明書の追加] をクリックします。表示されるダイアログボックスで、アップロードした一時的な証明書を選択します。一時的な証明書のステータスが [関連付け済み] であることを確認した後、拡張証明書を削除します。デフォルト証明書を置き換えた後、一時的な証明書を削除します。

シナリオ

  • 現在のデフォルト証明書の有効期限が切れている場合は、まず拡張証明書を削除できます。次に、ALB コンソールでデフォルト証明書を置き換えるの手順に従って、この証明書をデフォルト証明書として設定します。

  • 現在のデフォルト証明書は有効期限が切れていませんが、使用を停止することにした場合は、拡張証明書を削除できます。次に、ALB コンソールでデフォルト証明書を置き換えるの手順に従って、この証明書をデフォルト証明書として設定します。必要に応じて、元のデフォルト証明書を拡張証明書として追加し直すかどうかを決定できます。

  • 調整中に ALB Ingress Controller によって自動的に選択されたデフォルト証明書が目的のものでない場合は、拡張証明書を削除できます。次に、ALB コンソールでデフォルト証明書を置き換えるの手順に従って、この証明書をデフォルト証明書として設定します。その後、元のデフォルト証明書を拡張証明書として追加し直します。

手順

  1. Application Load Balancer (ALB) コンソールにログインします。トップメニューバーで、インスタンスがデプロイされているリージョンを選択します。

  2. [インスタンス] ページで、ターゲットインスタンスを見つけ、[インスタンス ID] をクリックします。[インスタンス詳細] タブで、[設定変更保護の無効化] をクリックします。

    重要

    設定変更保護を無効にした後、ALB コンソールでデフォルト証明書を置き換えるの手順に従ってデフォルト証明書を更新する場合、Application Load Balancer (ALB) コンソールでリスナー構成を変更しても、次回の調整後に証明書構成のみが ACK クラスターに書き戻されます。他の構成変更はクラスターに書き戻されません。これは、次回の調整中に、これらの書き戻されていない構成がクラスターからの構成によって上書きされる可能性があることを意味します。したがって、他の操作は注意して実行してください。次回の調整後、クラスターで kubectl describe albconfig [$Albconfig_Name] コマンドを実行し、status フィールドの内容を確認して、証明書構成が正常に書き戻されたことを確認できます。

  3. [リスナー] タブをクリックします。ターゲットリスナーの ID をクリックしてリスナー詳細ページに移動し、[リスナー証明書] タブをクリックします。

  4. [サーバー証明書] タブで、削除する拡張証明書を見つけます。[操作] 列で [削除] をクリックし、プロンプトに従って操作を完了します。

  5. 設定変更保護を有効にします。

新しい証明書を拡張証明書に更新する

手動で調整をトリガーする

シナリオ

自動検出方法を使用して証明書を管理する場合、ALB Ingress Controller コンポーネントは、デジタル証明書管理サービスコンソールで購入またはアップロードした新しい SSL 証明書をすぐには検出しません。ALB Ingress Controller は、調整操作中にのみデジタル証明書管理サービスコンソールから証明書をクエリして取得します。したがって、新しく更新された証明書を ALB Ingress で有効にするには、手動で調整プロセスをトリガーする必要があります。

説明

自動検出方法を使用して証明書を管理する場合、Ingress 構成ファイルの spec.rules[].host フィールドの値が spec.tls[].hosts[] フィールドにリストされているドメイン名に対応している必要があることに注意してください。これにより、各ドメイン名が正しい証明書に関連付けられるようになります。

手順

  1. 調整をトリガーして証明書を更新するには、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
  2. 次のコマンドを実行して Ingress を更新します。

    kubectl apply -f demo.yaml
  3. 次のコマンドを実行して、調整が成功したことを確認します。

    kubectl describe ingress demo-https -n default
  4. (オプション) Ingress YAML ファイルから重要でないアノテーションを削除し、ステップ 2 のコマンドを実行して Ingress を更新します。

Ingress に関連付けられているシークレットリソースを更新する

シナリオ

  • 現在の ALB Ingress ですでに有効になっているシークレットリソースを更新するには、既存のシークレットリソースの YAML 構成ファイルを直接編集します。次に、更新された YAML ファイルを Kubernetes クラスターに適用します。この操作により、ALB Ingress Controller による調整が自動的にトリガーされます。手動での介入は必要ありません。詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。

  • 現在の ALB Ingress に新しいシークレット証明書を追加するには、まず新しいシークレットリソースを作成する必要があります。次に、ALB Ingress リソースの構成ファイルを変更して、新しいシークレットリソースの名前を TLS の下の secretName フィールドに追加します。

    1. 新しいシークレットリソースを作成します。詳細については、「暗号化通信のための HTTPS 証明書の設定」をご参照ください。

    2. 新しく作成したシークレットリソースを 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 を更新できます。

手順

  1. 証明書 ID を取得します。

    • デジタル証明書管理サービスコンソールにログインします。

    • 左側のナビゲーションウィンドウで、[証明書管理] > [SSL 証明書]を選択します。

    • [SSL 証明書管理] ページで、[証明書のアップロード] タブをクリックします。ターゲット証明書の [操作] 列で [詳細] をクリックします。次に、証明書詳細パネルから [証明書 ID] を取得します。

  2. kubectl edit コマンドを使用して増分更新を実行します。

    1. 次のコマンドを実行して AlbConfig 名を表示します。

      kubectl -n kube-system get AlbConfig
    2. 次のコマンドを実行して、対応する 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: true
  • defaultCertificate の優先度: 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 フィールドは、値として CertIdentifierSecret のみをサポートします。

証明書 ID (CertIdentifier) を使用する

defaultCertificate.kindCertIdentifier に設定されている場合、対応する証明書 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.kindSecret に設定されている場合、対応する secretNamesecretNamespace を指定して、シークレットをデフォルト証明書として参照する必要があります。次のコードに例を示します。

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 コンポーネントの管理」をご参照ください。

リファレンス