Tanzu Platform Self Managed を試す - 管理者向け通信のHTTPS化
最新製品である Tanzu Platform のオンプレ版を試していきます。
ここでは、 アプリのHTTPS通信を有効にする方法を紹介します。
シリーズ
- Install編
- 管理者向けProjectセットアップ編
- 利用者向けSpaceへのデプロイ編
- 管理者向けデプロイ先の軽量化編
- ここ> 管理者向け通信のHTTPS化]
- 管理者向けDNSへの自動登録
アプリケーションのHTTPS化
アプリケーションのHTTP通信はTPの[Networking] > [Domains] の [Certificate Provider] の設定が影響します。 前回までは、[use HTTP/TCP (unecrypted traffic)] を選択していたので全ての通信が暗号化されていませんでした。
通信の暗号化には、証明書を作成した上で、Certificate Providerに登録していく必要があります。
ここではその手順を紹介します。
自己署名のCA証明書でHTTPS
一旦自己署名の証明書をつくっていきます。まずは、いかの環境変数で、自分のドメインを指定します。
1export APP_DOMAIN=<your app domain fqdn>
そして、以下のコマンドで証明書を作っていきます。
1DIR=TMP
2mkdir -p $DIR
3
4openssl req -new -nodes -out ${DIR}/ca.csr -keyout ${DIR}/ca.key -subj "/CN=${APP_DOMAIN}/O=tanzu/C=JP"
5chmod og-rwx ${DIR}/ca.key
6
7cat <<EOF > ${DIR}/ext_ca.txt
8basicConstraints=CA:TRUE
9keyUsage=digitalSignature,dataEncipherment,keyEncipherment,keyAgreement
10extendedKeyUsage=serverAuth,clientAuth
11subjectAltName = @alt_names
12[alt_names]
13DNS.1 = ${APP_DOMAIN}
14DNS.2 = *.${APP_DOMAIN}
15EOF
16
17openssl x509 -req -in ${DIR}/ca.csr -days 3650 -signkey ${DIR}/ca.key -out ${DIR}/ca.crt -extfile ${DIR}/ext_ca.txt
これをCertificate Provider に登録します。[Networking] > [Certificate Providers] から [Create Certificate Provider] を選択します。
上の手順で生成された、ca.crt の内容を Certificates に、ca.key を Key に登録します。
[Networking] > [Domains] に戻って、Certificate Providerを新しく作った Certificate Providerに登録します。
以上です。ここで、再度前記事 で紹介したようにアプリをデプロイしてきます。
ドメインを登録後、以下のコマンドで curl すれば、HTTPSでの通信が可能です。
注意点は二点で、-k
は自己署名の証明書なので、追加しています。もう一点が、IstioのHTTPSはHostヘッダーではなく、SNIヘッダーで振り分けを行っているので --resolve
で一時的にDNS登録をしないと、通信ができません。
1curl -k --resolve <アプリドメイン>:443:<アプリIP> https://<アプリドメイン>
以下が結果です。
Lets Encrypt証明書でHTTPS
基本的にはやることは一緒ですが、Lets Encrypt証明書でもやってみます。
以下のコマンドで Lets Encrypt 証明書を作ります。注意点が、エンドポイントのIPアドレスが一定ではないので、必然的にDNSチャレンジが必要になります。 その場合は、<アプリドメイン>のDNSを所有している必要があります。
1export APP_DOMAIN=<your app domain fqdn>
ののち、
1sudo certbot certonly --manual --preferred-challenges dns -d "*.${APP_DOMAIN}"
途中で出る、TXTレコードをDNSに登録して、fullchain.pem と privkey.pem を入手します。
流れはその後は一緒であり、
- fullchain.pem を Certificate Provider の Certificate に登録
- privekey.pem を Certificate Provider の Key に登録
全てが完了したら、以下の curl で繋げることができます。 lets encrypt なので"-k"が不要になります。
1curl --resolve <アプリドメイン>:443:<アプリIP> https://<アプリドメイン>
以下が結果です。
以上HTTPS化が完了しました。