Application Gateway を使用して HTTP または HTTPS 経由で AKS サービスを公開する
これらのチュートリアルでは、HTTP または HTTPS 経由で Azure Application Gateway を通して Kubernetes サービスの例を公開するための Kubernetes イングレス リソースの使用方法について説明します。
ヒント
また、「Application Gateway for Containers とは」も参照してください。
前提条件
ingress-azure
Helm Chart がインストールされている。- グリーンフィールド デプロイ: 最初から開始する場合は、次のインストール手順を参照してください。Application Gateway を利用して AKS クラスターをデプロイし、AKS クラスター上に Application Gateway のイングレス コントローラーをインストールするおおまかな手順を示しています。
- ブラウンフィールド デプロイ: 既存の AKS クラスターと Application Gateway がある場合は、次の手順を参照して、AKS クラスター上に Application Gateway イングレス コントローラーをインストールしてください。
- このアプリケーションで HTTPS を使用する場合は、x509 証明書とその秘密キーが必要です。
guestbook
アプリケーションのデプロイ
ゲストブック アプリケーションは、Web UI フロントエンド、バックエンド、Redis データベースから構成される正規の Kubernetes アプリケーションです。 guestbook
では既定で、名前が frontend
のサービスを介して、ポート 80
上にアプリケーションを公開します。 Kubernetes イングレス リソースがない場合、AKS クラスターの外部からサービスにアクセスすることはできません。 アプリケーションを使用して、イングレス リソースを設定して、HTTP および HTTPS 経由でアプリケーションにアクセスします。
ゲストブック アプリケーションをデプロイするには、次の手順に従います。
guestbook-all-in-one.yaml
をこちらからダウンロードします- 以下を実行して、ご自身の AKS クラスターに
guestbook-all-in-one.yaml
をデプロイします
kubectl apply -f guestbook-all-in-one.yaml
これで、guestbook
アプリケーションがデプロイされました。
HTTP 経由でサービスを公開する
ゲストブック アプリケーションを公開するには、次のイングレス リソースを使用します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: guestbook
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- backend:
serviceName: frontend
servicePort: 80
このイングレスでは、guestbook-all-in-one
デプロイの frontend
サービスが Application Gateway の既定のバックエンドとして公開されます。
上記のイングレス リソースを ing-guestbook.yaml
として保存します。
次を実行して、
ing-guestbook.yaml
をデプロイします。kubectl apply -f ing-guestbook.yaml
イングレス コントローラーのログ上でデプロイの状態を確認します。
これで、guestbook
アプリケーションが使用可能になりました。 Application Gateway のパブリック アドレスにアクセスすると、可用性を確認できます。
HTTPS 経由でサービスを公開する
ホスト名を指定しない
ホスト名を指定しない場合、そのアプリケーション ゲートウェイを参照するすべてのホスト名において、ゲストブック サービスを使用できます。
イングレスをデプロイする前に、kubernetes シークレットを作成して、証明書と秘密キーをホストする必要があります。 次を実行して、Kubernetes シークレットを作成できます
kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
次のイングレスを定義します。 イングレス内で、
secretName
セクションにシークレットの名前を指定します。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook annotations: kubernetes.io/ingress.class: azure/application-gateway spec: tls: - secretName: <guestbook-secret-name> rules: - http: paths: - backend: serviceName: frontend servicePort: 80
Note
上記のイングレス リソース内の
<guestbook-secret-name>
を、お使いのシークレットの名前に置き換えます。 ファイル名ing-guestbook-tls.yaml
に上記のイングレス リソースを保存します。次を実行して、ing-guestbook-tls.yaml をデプロイします
kubectl apply -f ing-guestbook-tls.yaml
イングレス コントローラーのログ上でデプロイの状態を確認します。
これで、HTTP および HTTPS の両方で guestbook
アプリケーションが使用できます。
ホスト名が指定されている
TLS の構成とサービスを多重化するために、イングレス上でホスト名を指定することもできます。 ホスト名を指定すると、指定したホスト上のみでゲストブック サービスを使用できます。
次のイングレスを定義します。 イングレス内で、
secretName
セクションにシークレットの名前を指定し、それに従ってhosts
セクション内のホスト名を置き換えます。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: guestbook annotations: kubernetes.io/ingress.class: azure/application-gateway spec: tls: - hosts: - <guestbook.contoso.com> secretName: <guestbook-secret-name> rules: - host: <guestbook.contoso.com> http: paths: - backend: serviceName: frontend servicePort: 80
次を実行して、
ing-guestbook-tls-sni.yaml
をデプロイしますkubectl apply -f ing-guestbook-tls-sni.yaml
イングレス コントローラーのログ上でデプロイの状態を確認します。
これで、guestbook
アプリケーションは、指定されたホスト上 (この例では <guestbook.contoso.com>
) のみで、HTTP および HTTPS の両方で使用できます。
他のサービスとの統合
次のイングレスでは、このイングレスに他のパスを付加して、それらのパスを他のサービスにリダイレクトできます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: guestbook
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- path: </other/*>
backend:
serviceName: <other-service>
servicePort: 80
- backend:
serviceName: frontend
servicePort: 80