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

Container Service for Kubernetes:暗号化通信のための HTTPS 証明書の設定

最終更新日:Jun 16, 2026

証明書の自動検出、Secret、または AlbConfig を使用して、ALB Ingress の HTTPS 証明書を設定します。

証明書設定方法の選択

証明書の管理ニーズに基づいて方法を選択します。

  • 証明書の自動検出:証明書がすでに証明書管理サービスに存在する場合に最適です。Secret は不要で、名前空間をまたいだアクセスをサポートしています。

  • Secret で管理される証明書:cert-manager などのクラスター内ツールとの連携に最適です。Secret を更新すると自動的に更新されます。

  • AlbConfig で指定された証明書:明示的な証明書 ID を使用し、リスナーレベルで証明書を一元管理する場合に最適です。

証明書の自動検出 Secret で管理される証明書 AlbConfig で指定された証明書
証明書のストレージ 証明書管理サービス Kubernetes Secret 証明書管理サービス
証明書の検出 証明書にバインドされたドメイン名による 証明書を格納する Secret による 証明書 ID による
最適なケース 証明書管理サービスで購入またはアップロードされた証明書 cert-manager などのクラスター内ツールで管理される証明書 リスナーレベルでの一元的な証明書管理
名前空間をまたいだサポート はい いいえ — Secret はその名前空間内でのみアクセス可能です N/A
証明書の更新 新しい証明書を証明書管理サービスにアップロードし、Ingress 設定を更新します 証明書を格納する Secret を更新します 新しい証明書をアップロードし、AlbConfig を更新します
重要

ALB インスタンスは、Ingress 経由で設定されたものを含め、すべてのリスナーで最大 25 個の証明書をサポートします。「ALB クォータの計算方法」をご参照ください。

証明書の互換性

複数の方法が同じリスナーに適用される場合、以下のルールによって有効になる証明書が決まります。

設定 動作
証明書の自動検出 + Secret、同じドメイン Secret ベースの証明書が優先されます。
証明書の自動検出 + Secret、異なるドメイン 各証明書が、対応するドメインで使用されます。
証明書の自動検出 + AlbConfig、同じリスナー AlbConfig で指定された証明書のみが使用されます。
Secret + AlbConfig、同じリスナー 両方の証明書が使用されます。

前提条件

以下を確認してください。

  • 信頼できる SSL/TLS 証明書。次のいずれかの方法で取得します。

仕組み

image
重要

AlbConfig には、デフォルトでポート 80 の HTTP リスナーのみが含まれています。HTTPS リスナーを作成して証明書を設定する必要があります。設定しない場合、HTTPS リスナーは利用できず、ALB Ingress コントローラーがエラーを報告します。

手順 1:AlbConfig での HTTPS リスナーの作成

ポート 443 の HTTPS リスナーを AlbConfig に追加します。

ACK コンソール

  1. ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象のクラスター名をクリックします。左側メニューで、[ワークロード] > [カスタムリソース] を選択します。

  3. [リソースオブジェクト] タブで、AlbConfig を検索し、結果をクリックします。

  4. [AlbConfig] パネルで、alb という名前のリソースを見つけ、[操作] 列の [YAML の編集] をクリックします。

  5. [YAML で表示] パネルで、spec.listeners の下に port: 443protocol: HTTPS を追加し、[OK] をクリックします。

    image

kubectl

  1. AlbConfig を編集用に開きます。

    kubectl edit albconfig <Albconfig_Name>
  2. spec.listeners の下に HTTPS リスナーを追加します。

    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         # HTTPS 用にこのリスナーを追加します。
        protocol: HTTPS   # 有効な値: HTTP、HTTPS、QUIC。

手順 2:自己署名証明書の作成 (オプション)

信頼できる証明書が既にある場合は、この手順をスキップしてください。自己署名証明書は信頼できないため、テストにのみ適しています。

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 でエンコードします (Kubernetes Secret で必要です)。

cat albtop-key.pem | base64     # Base64 でエンコードされた秘密鍵
cat albtop-cert.pem | base64    # Base64 でエンコードされた証明書

手順 3:サンプルリソースの作成

ALB Ingress に必要な 4 つの Kubernetes リソース (Deployment、Service、IngressClass、Ingress) を作成します。

ACK コンソール

  1. ACK コンソールにログインします。左側メニューで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象のクラスター名をクリックします。左側メニューで、[ワークロード] > [Deployments] を選択します。

  3. [YAML から作成] をクリックします。

    • [サンプルテンプレート][カスタム] を選択します。

    • [テンプレート]:この YAML をエディターにコピーします。

      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: networking.k8s.io/v1
      kind: Ingress
      metadata:
        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
      ---
      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
  4. [作成] をクリックします。

  5. リソースが作成されたことを確認します。

    • 左側メニューで、[ワークロード] > [Deployments] を選択します。https-deploy が実行中であることを確認します。

    • [ネットワーク] > [Services] を選択します。https-svc が作成されたことを確認します。

    • [ネットワーク] > [Ingresses] を選択します。https-ingress が作成されたことを確認します。

kubectl

  1. 次の内容で 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
  2. 設定を適用します。

    kubectl apply -f https-quickstart.yaml

手順 4:証明書の設定

以下の 3 つの方法から 1 つを選択します。

方法 1:証明書の自動検出

ALB Ingress コントローラーは、Ingress の tls フィールドのドメインを、証明書管理サービス内の証明書と照合します。この方法を使用するには、secretName を空白のままにします。

ACK コンソール

  1. 証明書を「証明書管理サービスコンソール」にアップロードします。詳細については、「SSL 証明書のアップロードと共有」をご参照ください。

  2. ACK コンソールにログインし、クラスターに移動します。左側メニューで、[ネットワーク] > [Ingresses] を選択します。

  3. https-ingress を見つけ、[操作] 列の [更新] をクリックします。

  4. [Ingress の変更] パネルで、以下のパラメーターを設定します。

    パラメーター 説明
    [TLS 設定] > [ドメイン名] 証明書にバインドされているドメイン名。rules.host と一致している必要があります。 demo.alb.ingress.top
    [TLS 設定] > [Secret] 証明書の自動検出を使用するには、空白のままにします。 (空白)
    [アノテーション] (オプション) HTTP と HTTPS の両方でリッスンする必要がある場合は、alb.ingress.kubernetes.io/listen-ports を追加します。 名前:alb.ingress.kubernetes.io/listen-ports、値:[{"HTTP": 80},{"HTTPS": 443}]

    1746500886011_7B8D9B84-2F18-4519-9A8A-50BECE7333FB

kubectl

  1. 証明書を証明書管理サービスコンソールにアップロードします。詳細については、「SSL 証明書のアップロードと共有」をご参照ください。

  2. Ingress を編集します。

    kubectl edit ingress https-ingress
  3. tls フィールドを追加します。hosts を証明書にバインドされたドメイン名に設定します。この値は rules[].host と一致している必要があります。

    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 # ご自身のドメイン名に置き換えてください。
        http:
          paths:
          - backend:
              service:
                name: https-svc
                port:
                  number: 443
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - demo.alb.ingress.top # rules[].host と一致する必要があります。コントローラーはこのドメインを使用して証明書を検索します。

方法 2:Secret で管理される証明書

kubernetes.io/tls タイプの Kubernetes Secret に証明書を格納し、Ingress の tls フィールドで参照します。cert-manager などのクラスター内ツールで証明書を管理する場合は、この方法を使用します。

ACK コンソール

  1. ACK コンソールにログインし、クラスターに移動します。左側メニューで、[ネットワーク] > [Ingresses] を選択します。

  2. https-ingress を見つけ、[操作] 列の [更新] をクリックします。

  3. [Ingress の変更] パネルで、以下のパラメーターを設定します。

    パラメーター 説明
    [TLS 設定] > [ドメイン名] 証明書にバインドされているドメイン名。 demo.alb.ingress.top
    [TLS 設定] > [Secret] 証明書を格納する Secret。作成するには、フィールドの横にある [作成] をクリックします。[Secret の作成] ダイアログボックスで、[名前][証明書] (Base64 エンコード不要)、[キー] (Base64 エンコード不要) を設定し、[OK] をクリックします。 Secret 名:https-secret
    [アノテーション] (オプション) HTTP と HTTPS の両方でリッスンするには、alb.ingress.kubernetes.io/listen-ports を追加します。 名前:alb.ingress.kubernetes.io/listen-ports、値:[{"HTTP": 80},{"HTTPS": 443}]

    image

kubectl

  1. 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
  2. Ingress を編集します。

    kubectl edit ingress https-ingress

    tls フィールドに hostssecretName の両方を追加します。

    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: https-ingressclass
      rules:
      - host: 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 # 証明書を格納する Secret。

方法 3:AlbConfig で指定された証明書

AlbConfig のリスナーで CertificateId を使用して証明書を指定します。これにより、証明書がリスナーレベルでバインドされ、そのリスナーの証明書の自動検出が無効になります。

ACK コンソール

  1. 証明書 ID を取得します。まだアップロードしていない場合は、証明書を証明書管理サービスにアップロードします。詳細については、「SSL 証明書のアップロードと共有」をご参照ください。証明書 ID を見つけるには、以下の手順を実行します。

    1. 証明書管理サービスコンソールにログインします。

    2. 左側メニューで、[証明書管理] > [SSL 証明書管理] を選択します。

    3. [アップロード済み証明書の管理] タブで、証明書を見つけ、[操作] 列の [詳細] をクリックします。

    4. [証明書の詳細] パネルで、[CertIdentifier] の値をコピーします。

  2. 証明書を AlbConfig に追加します。

    1. ACK コンソールにログインし、クラスターに移動します。[ワークロード] > [カスタムリソース] を選択します。

    2. AlbConfig を検索し、alb という名前のリソースを見つけ、[操作] 列の [YAML の編集] をクリックします。

    3. [YAML で表示] パネルで、HTTPS リスナーに以下のフィールドを追加します。

      フィールド

      説明

      certificates

      証明書設定ブロック

      CertificateId

      証明書管理サービスの CertIdentifier の値

      756****-cn-hangzhou

      IsDefault

      リスナーのデフォルト証明書として設定するかどうかを指定します。

      true

      image

  3. HTTPS リスナーにトラフィックをルーティングするように Ingress を更新します。

    1. 左側メニューで、[ネットワーク] > [Ingresses] を選択します。

    2. https-ingress を見つけ、[操作] 列の [更新] をクリックします。

    3. alb.ingress.kubernetes.io/listen-ports アノテーションを追加します。

      パラメーター

      [名前]

      alb.ingress.kubernetes.io/listen-ports

      [{"HTTPS": 443}] — HTTP でもリッスンする場合は [{"HTTP": 80},{"HTTPS": 443}] に変更します

      image

kubectl

AlbConfig で証明書を指定すると、そのリスナーの証明書の自動検出が無効になります。
  1. 証明書を証明書管理サービスにアップロードします。詳細については、「SSL 証明書のアップロードと共有」をご参照ください。

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

    1. 証明書管理サービスコンソールにログインします。

    2. 左側メニューで、[証明書管理] > [SSL 証明書管理] を選択します。

    3. [アップロード済み証明書の管理] タブで、証明書を見つけ、[操作] 列の [詳細] をクリックします。

    4. [証明書の詳細] パネルで、[CertIdentifier] の値をコピーします。

  3. AlbConfig を編集します。

    kubectl edit albconfig <ALBCONFIG_NAME>

    HTTPS リスナーに certificates フィールドを追加します。

    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   # 証明書管理サービスからの CertIdentifier。
              IsDefault: true                       # デフォルトの証明書として使用するには true に設定します。
          port: 443
          protocol: HTTPS
  4. Ingress を編集します。

    kubectl edit ingress https-ingress

    alb.ingress.kubernetes.io/listen-ports アノテーションを追加します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'  # HTTP でもリッスンする場合は '[{"HTTP": 80},{"HTTPS": 443}]' に変更します。
      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

手順 5:結果の確認

  1. Ingress をクエリして ALB アドレスを取得します。

    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 列の値に注意してください。

  2. バックエンド Service に HTTPS リクエストを送信します。demo.alb.ingress.topalb-********.alb.aliyuncs.com を、前の手順で取得した値に置き換えてください。

    curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com

    証明書が正しく設定されている場合、出力は次のようになります。

    old

次のステップ