1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Azure】AGICでSSL証明書を利用する【AKS】

Last updated at Posted at 2020-12-27

はじめに

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デプロイをお勧めする。(※ちょっと大変です。)

具体的なデプロイ手順については、以下のドキュメントを参照されたい。

AGICを利用してHTTPSでWebアプリを公開する

手順の概要は、以下である。

  1. SSL証明書を作成し、AppGwに証明書を構成する

  2. Ingress のマニフェスト yaml ファイルを修正し、デプロイする

例として https://test.com というURLのサイトを公開する手順を示す。

1. SSL証明書を作成し、AppGwに証明書を構成する

Linux 端末にて下記のコマンドを実行する。概要は次の通り。

  1. OpenSSL で test.com の自己署名証明書を作成する。
  2. Application Gateway にアップロードするため、SSL証明書を PKCS #12 形式に変換する。
  3. 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 を作成し、以下の内容とする。

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のリスナーが確認できる。
image.png

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?