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

Alibaba Cloud Service Mesh:ASM ゲートウェイの証明書の管理に cert-manager を使用する

最終更新日:Jan 13, 2025

cert-manager は、証明書の発行とデプロイに使用できる証明書ライフサイクル管理システムです。 cert-manager を使用して、Service Mesh(ASM)ゲートウェイの証明書を発行できます。 この方法で、ASM ゲートウェイを使用して HTTPS 経由でサービスにアクセスできます。 これにより、データ伝送のセキュリティが確保されます。 このトピックでは、cert-manager を使用して ASM ゲートウェイの証明書を管理する方法について説明します。

背景情報

cert-manager を使用すると、自己署名証明書とドメインネームシステム(DNS)証明書を発行できます。 証明書を ASM ゲートウェイにロードし、ASM ゲートウェイを使用して HTTPS 経由でサービスにアクセスできます。 これら 2 種類の証明書には、次の違いがあります。

  • 自己署名証明書: 自己署名証明書は暗号化にのみ使用できます。 認証には使用できません。 自己署名証明書がロードされている ASM ゲートウェイを使用して、コマンドラインツールで HTTPS 経由でサービスにアクセスできます。 ただし、自己署名証明書は Web ブラウザで信頼されていません。 Web ブラウザは、自己署名証明書を使用する HTTPS 接続をマークし、接続に潜在的なリスクがあることを示すエラーメッセージを表示します。 したがって、自己署名証明書がロードされている ASM ゲートウェイを使用して、Web ブラウザで HTTPS 経由でサービスにアクセスすることはできません。

  • DNS 証明書: DNS 証明書は認証局(CA)によって発行され、暗号化と認証の両方に使用できます。 自己署名証明書と比較して、DNS 証明書はより高いセキュリティを提供し、Web ブラウザで信頼されています。 DNS 証明書がロードされている ASM ゲートウェイを使用して、コマンドラインツールと Web ブラウザの両方で HTTPS 経由でサービスにアクセスできます。

説明

データプレーン上のクラスターで cert-manager を使用しているときにエラーが発生した場合は、DingTalk グループ 30421250 に参加して相談してください。

前提条件

クラスターに cert-manager をインストールする

  1. コンピューターに Helm をインストールします。 詳細については、「Helm」をご参照ください。

  2. kubectl を使用してクラスターに接続します。 詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。

  3. 次のコマンドを実行して、cert-manager という名前のネームスペースを作成します。

    kubectl create namespace cert-manager
  4. 次のコマンドを実行して、cert-manager チャートを追加します。

    helm repo add jetstack https://charts.jetstack.io
  5. 次のコマンドを実行して、cert-manager チャートに関する最新情報を入手します。

    helm repo update
  6. 次のコマンドを実行して、cert-manager をインストールします。

    説明

    cert-manager のバージョンは、Kubernetes のバージョンと互換性がある必要があります。 cert-manager のバージョンと Kubernetes のバージョンのマッピングの詳細については、「Supported Releases」をご参照ください。

    helm install \
      cert-manager jetstack/cert-manager \
      --namespace cert-manager \
      --version v1.14  \
      --set installCRDs=true

cert-manager を使用して自己署名証明書を発行する

手順 1: クラスターに自己署名証明書を作成する

  1. 次の内容を含む issuer.yaml ファイルを作成します。

    issuer.yaml ファイルを表示する

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: selfsigned
    spec:
      selfSigned: {}
    ---
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: istio-ingressgateway-certs
    spec:
      isCA: true
      duration: 2160h # 90d
      secretName: istio-ingressgateway-certs
      commonName: istio-ingressgateway-certs
      subject:
        organizations:
        - cluster.local
        - cert-manager
      issuerRef:
        name: selfsigned
        kind: Issuer
        group: cert-manager.io
  2. 次のコマンドを実行して、自己署名 CA を作成し、ワークロードの証明書を発行します。

    kubectl apply -f issuer.yaml -n istio-system
  3. 次のコマンドを実行して、証明書を表示します。

    kubectl get secret -n istio-system 

    期待される出力:

    NAME                                        TYPE                             DATA         AGE
    istio-ingressgateway-certs                  kubernetes.io/tls                3            68m

手順 2: HTTPS 経由でサービスにアクセスできることを確認する

  1. HTTPBin アプリケーションをデプロイします。 詳細については、「httpbin アプリケーションをデプロイする」をご参照ください。

  2. HTTPBin アプリケーションの Istio ゲートウェイを変更します。

    ASM インスタンスの kubeconfig ファイルを使用してコマンドを実行するか、ASM コンソールにログインして [ゲートウェイ] ページで YAML ファイルを変更できます。 詳細については、「Istio ゲートウェイを管理する」をご参照ください。

    次のコードブロックは、変更された YAML ファイルを示しています。 HTTPS リスナーがポート 443 に追加され、cert-manager によって作成された証明書が使用されます。

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: httpbin
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: test
            number: 80
            protocol: HTTP
        - hosts:
            - '*'
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            credentialName: istio-ingressgateway-certs
            mode: SIMPLE
  3. 次のコマンドを実行して、クラスター内のイングレスゲートウェイの IP アドレスを取得します。

    kubectl get svc -n istio-system -l istio=ingressgateway
  4. 次のコマンドを実行して、HTTPS 経由で HTTPBin アプリケーションにアクセスします。

    curl -k --resolve istio-ingressgateway-certs:443:${IP address of the ingress gateway} https://istio-ingressgateway-certs/status/418 -I

    アクセスが成功すると、ステータスコード 418 が返されます。 イングレスゲートウェイへのアクセスに使用されるドメイン名は istio-ingressgateway-certs です。 これは、証明書の作成時に commonNameistio-ingressgateway-certs に設定されているためです。