はじめに
こんにちは現在サイバーエージェントの新規事業立ち上げをしている後藤です。
プロダクトで現在istio-ingressgatewayを使用しており負荷試験をかけるさいにSSLの設定がうまくいかなく原因が中間証明書をちゃんと紐付けていなかったことでした。そしてかなりそれに関する記事が少なかったのでまとめます。
最初に証明書を整理する
基本的に独自でワイルドカード証明書などをしゅとくすると以下の三つの証明書がDLできます。
- サーバー鍵 wildcard.hoge.com.crt
- 秘密鍵 wildcard.hoge.com.key
- 中間証明書 CT_HOGE_20001010.crt
サーバー鍵に中間証明書を紐づける
鍵のうしろにくっつけてファイル拡張子をpemにします。
ここではserver.pem
という名前にしました。
A
文字列の部分がサーバー拡張子
B
文字列の部分が中間証明書
server.pem
-----BEGIN CERTIFICATE-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBB
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-----END CERTIFICATE-----
kubenetesのsecretを登録する
# namaspace は istio-system
# istio-ingressgateway-certs この名前で作ると自動的に反映先に作られます!
# 先ほどつくったファイルを --certの値にする --keyは秘密鍵を指定する
kubectl create -n istio-system secret tls istio-ingressgateway-certs --key wildcard.hoge.com.key --cert server.pem
gateway.ymlを作る
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: hoge-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
serverCertificate: /etc/istio/ingressgateway-certs/server.pem #先ほどのsecretが自動で入る
privateKey: /etc/istio/ingressgateway-certs/tls.key # 先ほどつくったsecretが自動で入る
hosts:
- hoge.com
kubectl apply -f gateway.yml #applyする
istio-ingressgateway podを再起動する
kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-citadel-8b8b4db4-vtnz7 1/1 Running 5 8d
istio-galley-7f87d7664f-89fwv 1/1 Running 0 8d
istio-ingressgateway-656b4545cf-7qs28 1/1 Running 0 45m #こいつを再帰動する
istio-pilot-747948498f-nvncr 2/2 Running 0 8d
istio-policy-7ffbb578bc-fnxv4 2/2 Running 0 8d
istio-sidecar-injector-5967cf6d7f-fg7vs 1/1 Running 0 8d
istio-telemetry-55cb8b8fc5-sxzjt 2/2 Running 5 8d
promsd-76f8d4cff8-tj87k 2/2 Running 60 8d
# 単純にdeleteしてもdeploymentがるのでオートヒーリングさせて再起動する
kubectl delete pod -n istio-system istio-ingressgateway-656b4545cf-7qs28
確認方法
以下のようなSSLチェックできるサイトにて全てにチェックがいればOK!
https://www.digicert.com/
参考記事
istio公式ドキュメント https://istio.io/docs/tasks/traffic-management/ingress/secure-ingress-mount/
ingressに中間証明書 https://qiita.com/wataru420/items/79e66713168d6db1c798