cert-manager
cert-manager は、証明書管理を自動化するツールです。これはIstioゲートウェイと統合して、TLS証明書を管理できます。
設定
開始するには、cert-managerインストールドキュメント を参照してください。Istioとの連携に必要な特別な変更はありません。
使用方法
Istio Gateway
cert-managerを使用してKubernetesにシークレットを書き込むことができ、その後、ゲートウェイから参照できます。
開始するには、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
次に、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 ...
証明書の作成が完了すると、
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