Istioで使うTLS証明書をcert-managerで作成する
Istioは0.7まではIstio IngressというIngress Controllerの一種を使用してトラフィックを受け入れていましたが、0.8以降はGatewayを使うようになりました。
Istio Ingressでは他のIngressと同様のやり方でTLS証明書を扱えたのでcert-managerと組み合わせるのも簡単でしたが、Gatewayと組み合わせる場合は少々複雑になってしまいました。
今回はGatewayでcert-managerが管理する証明書を使用する方法を紹介します。
また、cert-managerの使い方は既に紹介しているので、そちらを参照してください。
この記事の内容を把握していることを前提として進めます。
環境
- GKE 1.9.7-gke.1
- Istio 0.8
- cert-manager v0.3.1 (DNS-01)
- route53
GatewayでTLS証明書を使う方法
TLS証明書を使う方法は厳密に定められており、これから外れてしまうと動きません。
istio-system
というnamespaceに証明書を入れたsecretを作成する- 証明書を入れたsecretの名前は
istio-ingressgateway-certs
でなければならない - Istioが証明書が入ったsecretを読み込み、
/etc/istio/ingressgateway-certs
に展開する
という仕様になっています。
詳細は公式ドキュメントに書かれています。
この仕様をクリアできるようにcert-managerの設定をしていきます。
cert-managerの設定
Istioの仕様をクリアするために、cert-managerに対して証明書が入ったsecretをistio-systemに作るように設定します。
cert-managerはIssuerとCertificateのあるnamespaceにsecretを作成するため、IssuerとCertificateのnamespaceをistio-systemにします。
metadata: namespace: istio-system
あとはCertificateにある作成するsecretの名前を決めるフィールドで、istio-ingressgateway-certsという名前を指定するだけです。
spec: secretName: istio-ingressgateway-certs
これでIstioから読み込む準備ができました。
IstioのGatewayからはドキュメントにある通りに記述すればhttpsで通信ができるようになります。
spec: tls: mode: SIMPLE serverCertificate: /etc/istio/ingressgateway-certs/tls.crt privateKey: /etc/istio/ingressgateway-certs/tls.key