はじめに
Azure Kubernetes Service (AKS) は Microsoft Azure の Kubernetes サービスである。
AKS で利用するイングレスコントローラーは主に以下の2つのいずれかになる。
- NGINX イングレス コントローラー
- Application Gateway イングレス コントローラー
Application Gateway とは、Azure の L7 ロードバランサーであり、SSL終端やWAF機能(オプション)等を利用することができる。
本記事では、Application Gateway イングレス コントローラー (AGIC) を利用したときの HTTPS 設定方法を解説する。
AGICのデプロイ
AGICのデプロイ方法は、大きく分けて以下の2つの方法がある。
- AGIC アドオンによるデプロイ
- Helm によるデプロイ
2020年12月現在、AGIC アドオンによるデプロイはプレビュー機能である。
現時点では、AGIC アドオンでは shared
が適用されない(=AKSによる振り分けと手動振り分け設定が共存できない)ことから、Helmデプロイをお勧めする。(※ちょっと大変です。)
具体的なデプロイ手順については、以下のドキュメントを参照されたい。
-
Application Gateway イングレス コントローラーとは
https://azure.github.io/application-gateway-kubernetes-ingress/features/appgw-ssl-certificate/ -
既存の Application Gateway を使用して Application Gateway イングレス コントローラー (AGIC) をインストールする
https://docs.microsoft.com/ja-jp/azure/application-gateway/ingress-controller-install-existing
AGICを利用してHTTPSでWebアプリを公開する
手順の概要は、以下である。
-
SSL証明書を作成し、AppGwに証明書を構成する
-
Ingress のマニフェスト yaml ファイルを修正し、デプロイする
例として https://test.com というURLのサイトを公開する手順を示す。
1. SSL証明書を作成し、AppGwに証明書を構成する
Linux 端末にて下記のコマンドを実行する。概要は次の通り。
- OpenSSL で test.com の自己署名証明書を作成する。
- Application Gateway にアップロードするため、SSL証明書を PKCS #12 形式に変換する。
- Azure CLI を使用して、Application Gateway にSSL証明書をアップロードする。
appgwName="<Application Gateway 名>"
resgp="<Application Gatway のリソースグループ>"
# generate certificate for testing
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-out test-cert.crt \
-keyout test-cert.key \
-subj "/CN=test"
openssl pkcs12 -export \
-in test-cert.crt \
-inkey test-cert.key \
-passout pass:test \
-out test.pfx
# configure certificate to app gateway
az network application-gateway ssl-cert create \
--resource-group $resgp \
--gateway-name $appgwName \
-n mysslcert \
--cert-file test.pfx \
--cert-password "test"
上記コマンド例では Application Gateway に直接SSL証明書をアップロードしているが、KeyVault を経由して Application Gateway にSSL証明書を構成することも可能。
参考:【Azure】Application Gateway と Key Vault を連携してSSL証明書を設定する(Azure CLI)
2. Ingress のマニフェスト yaml ファイルを修正し、デプロイする
手順1 を実施したことで Application Gateay に mysslcert という名前で証明書が構成されている。
Ingress のマニフェストファイルに新しいアノテーション appgw.ingress.kubernetes.io/appgw-ssl-certificate: mysslcert
を追加することで、HTTPS設定を有効にすることができる。
一例として test-com-app.yml を作成し、以下の内容とする。
apiVersion: v1
kind: Pod
metadata:
name: aspnetapp
labels:
app: aspnetapp
spec:
containers:
- image: "mcr.microsoft.com/dotnet/core/samples:aspnetapp"
name: aspnetapp-image
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: aspnetapp
spec:
selector:
app: aspnetapp
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: aspnetapp
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/appgw-ssl-certificate: mysslcert
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: aspnetapp
servicePort: 80
作成したマニフェストデでデプロイする。
kubectl apply -f test-com-app.yml
Ingress を確認し、 ADDRESS に Application Gateway のIPアドレスが反映されていることを確認する。Application Gateway の更新に5分ほど時間がかかる場合がある。
kubectl get ingress
ブラウザにて、 https://test.com にアクセスし、HTTPS通信になっていることを確認する。
※ アクセス元端末の hosts に test.com --> Applciation Gateway のIPアドレス を追加すること。
また、Azure Portal で Application Gateway を確認すると、AKSによって構成されたHTTPSのリスナーが確認できる。
参考
-
Ingressコントローラー
https://kubernetes.io/ja/docs/concepts/services-networking/ingress-controllers/ -
Application Gateway イングレス コントローラーとは
https://docs.microsoft.com/ja-jp/azure/application-gateway/ingress-controller-overview -
Appgw ssl certificate
https://azure.github.io/application-gateway-kubernetes-ingress/features/appgw-ssl-certificate/ -
Azure Command-Line Interface (CLI) documentation
https://docs.microsoft.com/ja-jp/cli/azure/