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 をインストールする
コンピューターに Helm をインストールします。 詳細については、「Helm」をご参照ください。
kubectl を使用してクラスターに接続します。 詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
次のコマンドを実行して、cert-manager という名前のネームスペースを作成します。
kubectl create namespace cert-manager次のコマンドを実行して、cert-manager チャートを追加します。
helm repo add jetstack https://charts.jetstack.io次のコマンドを実行して、cert-manager チャートに関する最新情報を入手します。
helm repo update次のコマンドを実行して、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: クラスターに自己署名証明書を作成する
次の内容を含む issuer.yaml ファイルを作成します。
次のコマンドを実行して、自己署名 CA を作成し、ワークロードの証明書を発行します。
kubectl apply -f issuer.yaml -n istio-system次のコマンドを実行して、証明書を表示します。
kubectl get secret -n istio-system期待される出力:
NAME TYPE DATA AGE istio-ingressgateway-certs kubernetes.io/tls 3 68m
手順 2: HTTPS 経由でサービスにアクセスできることを確認する
HTTPBin アプリケーションをデプロイします。 詳細については、「httpbin アプリケーションをデプロイする」をご参照ください。
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次のコマンドを実行して、クラスター内のイングレスゲートウェイの IP アドレスを取得します。
kubectl get svc -n istio-system -l istio=ingressgateway次のコマンドを実行して、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です。 これは、証明書の作成時にcommonNameがistio-ingressgateway-certsに設定されているためです。