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

Container Compute Service:HTTPS での暗号化通信用の証明書の構成

最終更新日:Apr 30, 2025

HTTPS リスナーを構成する場合は、クライアントとリスナー間の接続を暗号化するために、SSL または TLS 証明書をリスナーに関連付ける必要があります。このトピックでは、Application Load Balancer(ALB)Ingress を使用して HTTPS リスナーの証明書を構成する方法について説明します。

証明書構成方法の比較

ALB Ingress を使用すると、証明書の自動検出の構成、Kubernetes シークレットとしての証明書の管理、AlbConfig での証明書の指定を行うことができます。次の表は、前述の方法を比較したものです。

比較項目

証明書の自動検出の構成

AlbConfig での証明書の指定

シークレットとしての証明書の管理

証明書の保存

証明書は SSL Certificates Service に保存されます。

証明書は Kubernetes シークレットとして保存されます。

証明書の検出

証明書は、証明書にバインドされているドメイン名に基づいて検出されます。

証明書は、その ID に基づいて検出されます。

証明書は、証明書が保存されているシークレットに基づいて検出されます。

シナリオ

この方法は、SSL Certificates Service コンソールで購入した証明書、または SSL Certificates Service コンソールにアップロードされた証明書に適しています。

この機能は、クラスタ内で管理されている証明書に適しています。たとえば、cert-manager を使用して証明書を管理する場合、証明書をシークレットに保存できます。

名前空間をまたがる証明書の使用方法

はい。ALB Ingress の内部アクセスと外部アクセスを同時に有効にすることができます。

サポートされていません。シークレットとして保存されている証明書は、そのシークレットの名前空間内でのみ使用できます。

証明書の更新方法

新しい証明書を SSL Certificates Service コンソール にアップロードするか、元の証明書を更新する必要があります。次に、証明書が関連付けられている Ingress の構成を手動で変更する必要があります。

証明書が保存されているシークレットの構成を更新する必要があります。

重要

ALB インスタンスは最大 25 個の証明書をサポートします。ほとんどの場合、ALB インスタンスで使用される証明書の数は、Ingress に関連付けられた証明書を含む、インスタンスのすべてのリスナーに関連付けられた証明書の総数と等しくなります。詳細については、「ALB クォータを計算する方法」をご参照ください。

異なる方法で構成された証明書の互換性

次の表は、異なる証明書構成方法の互換性について説明しています。

証明書の構成方法

説明

証明書が証明書の自動検出を使用して構成され、別の証明書が Kubernetes シークレットを使用して構成されています。

  • 両方の証明書が同じドメイン名に関連付けられている場合、シークレットを使用して構成された証明書が優先的に使用されます。

  • 証明書が異なるドメイン名に関連付けられている場合、ALB Ingress コントローラーは対応するドメイン名の証明書を使用します。

証明書が証明書の自動検出を使用して構成され、別の証明書が AlbConfig で指定されています。両方の証明書が同じリスナーに関連付けられています。

リスナーは、AlbConfig で指定された証明書のみを使用します。

証明書が Kubernetes シークレットを使用して構成され、別の証明書が AlbConfig で指定されています。両方の証明書が同じリスナーに関連付けられています。

両方の証明書が使用されます。

前提条件

信頼できる証明書を取得します。証明書は、次のいずれかの方法で取得できます。

  • SSL Certificates Service コンソールで証明書を購入します。詳細については、「公式証明書を購入する」をご参照ください。

  • 別の認証局(CA)が発行した証明書を購入します。

  • (オプション) 自己署名証明書を生成する の手順に従って、自己署名証明書を生成します。

手順

重要

デフォルトでは、AlbConfig はポート 80 で HTTP リスナーを使用して構成されています。HTTPS リスナーを作成 し、証明書を構成 する必要があります。証明書が構成されていない場合、HTTPS リスナーは使用できなくなり、証明書がないためコントローラーは失敗します。

ステップ 1:AlbConfig で HTTPS リスナーを作成する

  1. 次のコマンドを実行して、albconfig 構成ファイルを編集します。

    kubectl edit albconfig <Albconfig_Name>
  2. ビジネス要件に基づいて構成を変更します。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: HTTPS     # 新しいコンテンツ

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

次の 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
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

予期される結果:

Certificate request self-signature ok
subject=CN=demo.alb.ingress.top
説明

上記の行では、demo.alb.ingress.top ドメイン名が自己署名証明書に関連付けられています。ドメイン名はカスタムドメイン名に置き換えることができます。

手順 3:サンプル リソースを作成する

作成した AlbConfig に加えて、ALB Ingress を正常に機能させるには、Deployment、Service、IngressClass、および Ingress を作成する必要があります。次の YAML テンプレートを使用して、前述のリソースを作成できます。

  1. https-quickstart.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 # 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
  2. (オプション) AlbConfig で HTTP リスナーと HTTPS リスナーの両方が構成されている場合は、annotations フィールドを Ingress 構成に追加します。例:

    複数のリスナーを使用する場合はアノテーションを追加する

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: https-ingress
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # ALB Ingress が複数のリスナーに関連付けられている場合は、このアノテーションを追加します。
    spec:
      #...
  3. 次のコマンドを実行して、前述のリソースを作成します。

    kubectl apply -f https-quickstart.yaml

手順 4: 証明書を構成する

証明書の自動検出を構成する

自己署名証明書を SSL Certificates Service にアップロードした後、Ingress 構成の tls フィールドにバインドされているドメイン名を指定できます。これにより、ALB Ingress はアップロードされた証明書を自動的に検出して使用できます。

  1. 自己署名証明書を SSL Certificates Service コンソールにアップロードします。詳細については、「SSL 証明書をアップロードする」をご参照ください。

  2. Ingress 構成を更新します。

    1. 次のコマンドを実行して、Ingress を変更します。

      kubectl edit ingress https-ingress
    2. 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」フィールドで指定されたドメイン名と同じである必要があります。

説明

証明書の自動検出が構成されると、関連付けられた ALB インスタンスは自動的に HTTPS:443 リスナーを作成します。

シークレットとして証明書を管理する

自己署名証明書をシークレットに保存し、Ingress 構成でシークレットを指定できます。

  1. 次のコマンドを実行して、証明書ファイルと秘密鍵ファイルを Base64 でエンコードします。albtop-key.pemalbtop-cert.pem を実際の鍵ファイルと証明書ファイルに置き換えます。

    echo -n `cat albtop-key.pem` | base64 
    echo -n `cat albtop-cert.pem` | base64
  2. シークレットを作成します。

    1. albconfig.yaml という名前のファイルを作成し、次のコンテンツをファイルにコピーします。{base64 albtop-key.pem}{base64 albtop-cert.pem} を前の手順の Base64 コードに置き換えます。

      apiVersion: v1
      kind: Secret
      metadata:
        name: https-secret
      type: kubernetes.io/tls
      data:
        tls.key: |
          {base64 albtop-key.pem}
        tls.crt: |
          {base64 albtop-cert.pem}
    2. 次のコマンドを実行して、シークレットを作成します。

      kubectl apply -f https-secret.yaml
  3. Ingress 構成を更新します。

    1. 次のコマンドを実行して、Ingress を変更します。

      kubectl edit ingress https-ingress
    2. 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」フィールドで指定されたドメイン名と同じである必要があります。
          secretName: https-secret
説明

シークレットを構成すると、default-https-secret-****** という名前の証明書が SSL Certificates Service コンソールの SSL 証明書管理ページに自動的にアップロードされます。関連付けられた ALB インスタンスは自動的に HTTPS:443 リスナーを作成します。

AlbConfig で証明書を指定する

自己署名証明書を SSL Certificates Service にアップロードした後、AlbConfig のリスナー構成の CertificateId フィールドで証明書 ID を指定できます。これにより、証明書がリスナーに関連付けられます。

説明

リスナーが証明書に関連付けられている場合、Ingress は証明書の自動検出機能を使用しなくなります。

  1. 自己署名証明書を SSL Certificates Service コンソールにアップロードします。詳細については、「SSL 証明書をアップロードして共有する」をご参照ください。

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

    1. SSL Certificates Service コンソール にログインします。

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

    3. [SSL 証明書管理] ページで、[アップロードされた証明書の管理] タブをクリックします。アップロードした証明書を選択し、[アクション] 列の [詳細] をクリックします。

      [証明書の詳細] パネルで、[CertIdentifier] フィールドの証明書 ID を表示できます。

AlbConfig で証明書を指定します。

  1. 次のコマンドを実行して、AlbConfig を変更します。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME> を AlbConfig の名前に置き換えます。
  2. 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
  3. 次のコマンドを実行して、Ingress を変更します。

    kubectl edit ingress https-ingress
  4. alb.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
説明

AlbConfig が構成されると、関連付けられた ALB インスタンスは自動的に HTTPS:443 リスナーを作成します。

ステップ 5:結果を確認する

HTTPS 経由でアプリケーションにアクセスして、証明書が構成されているかどうかを確認します。

  1. 次のコマンドを実行して、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 列の値を記録します。

  2. 次のコマンドを実行して、ALB Ingress のバックエンドサービスにアクセスします。demo.alb.ingress.topalb-********.alb.aliyuncs.com を前の手順で取得した値に置き換えます。

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

    次の出力が返された場合、証明書は構成されています。

    old

参照資料