cert-manager

cert-manager は、証明書管理を自動化するツールです。これはIstioゲートウェイと統合して、TLS証明書を管理できます。

設定

開始するには、cert-managerインストールドキュメント を参照してください。Istioとの連携に必要な特別な変更はありません。

使用方法

Istio Gateway

cert-managerを使用してKubernetesにシークレットを書き込むことができ、その後、ゲートウェイから参照できます。

  1. 開始するには、cert-managerイシュアードキュメント に従って、Issuerリソースを設定します。Issuerは、証明書署名要求を尊重して署名済み証明書を生成できる証明機関(CA)を表すKubernetesリソースです。たとえば、Issuerは次のようになります。

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: ca-issuer
      namespace: istio-system
    spec:
      ca:
        secretName: ca-key-pair
    
  2. 次に、cert-managerドキュメント に従って、Certificateリソースを設定します。Certificateは、istio-ingressgatewayデプロイメントと同じ名前空間に作成する必要があります。たとえば、Certificateは次のようになります。

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: ingress-cert
      namespace: istio-system
    spec:
      secretName: ingress-cert
      commonName: my.example.com
      dnsNames:
      - my.example.com
      ...
    
  3. 証明書の作成が完了すると、istio-system 名前空間に作成されたシークレットを確認できます。これは、credentialNameの下のGatewayのtls設定で参照できます。

    apiVersion: networking.istio.io/v1
    kind: Gateway
    metadata:
      name: gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: ingress-cert # This should match the Certificate secretName
        hosts:
        - my.example.com # This should match a DNS name in the Certificate
    

Kubernetes Ingress

cert-managerは、Ingressオブジェクトへのアノテーションを設定することで、Kubernetes Ingressと直接統合します。この方法を使用する場合は、シークレットは同じ名前空間内でのみ読み取られるため、Ingressはistio-ingressgatewayデプロイメントと同じ名前空間に存在する必要があります。

あるいは、Istio Gatewayで説明されているようにCertificateを作成し、Ingressオブジェクトで参照することもできます。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: istio
spec:
  rules:
  - host: my.example.com
    http: ...
  tls:
  - hosts:
    - my.example.com # This should match a DNS name in the Certificate
    secretName: ingress-cert # This should match the Certificate secretName
この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!