Application Gateway を使用して HTTP または HTTPS 経由で AKS サービスを公開する
この記事では、Azure Application Gateway を使用して HTTP または HTTPS 経由で Azure Kubernetes Service (AKS) の例を公開するために Kubernetes イングレス リソースを使用する方法について説明します。
ヒント
Kubernetes イングレス ソリューションには Application Gateway for Containers を検討してください。
前提条件
ingress-azure
Helm チャートがインストールされていること。- グリーンフィールド デプロイ: 最初から開始する場合は、次のインストール手順を参照してください。Application Gateway を使用して AKS クラスターをデプロイし、AKS クラスター上に Application Gateway イングレス コントローラー (AGIC) をインストールするおおまかな手順を示しています。
- ブラウンフィールド デプロイ: 既存の AKS クラスターと Application Gateway のデプロイがある場合は、次の手順を参照して、AKS クラスター上に AGIC をインストールしてください。
- x509 証明書とその秘密キー (このアプリケーションで HTTPS を使用する場合)。
ゲストブック アプリケーションをデプロイする
guestbook
アプリケーションは正規の Kubernetes アプリケーションであり、Web UI フロントエンド、バックエンド、Redis データベースで構成されます。
guestbook
では既定で、名前が frontend
のサービスを介して、アプリケーションをポート 80
に公開します。 Kubernetes イングレス リソースがない場合、AKS クラスターの外部からサービスにアクセスすることはできません。 アプリケーションを使用し、イングレス リソースを設定して、HTTP および HTTPS 経由でアプリケーションにアクセスします。
guestbook
アプリケーションを展開するには、次の手順を行います。
こちらの GitHub ページから
guestbook-all-in-one.yaml
をダウンロードします。次のコマンドを実行して、
guestbook-all-in-one.yaml
を AKS クラスターにデプロイします。kubectl apply -f guestbook-all-in-one.yaml
HTTP 経由でサービスを公開する
guestbook
アプリケーションを公開するには、次のイングレス リソースを使用します。
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 経由でサービスを公開する
ホスト名を指定しない場合
ホスト名を指定しない場合、Application Gateway のデプロイを指すすべてのホスト名で、guestbook
サービスを使用できます。
イングレスをデプロイする前に、Kubernetes シークレットを作成して、証明書と秘密キーをホストします。
kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
次のイングレス リソースを定義します。
secretName
セクションで、<guestbook-secret-name>
を実際のシークレットの名前に置き換えます。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
ing-guestbook-tls.yaml
という名前のファイルにイングレス リソースを保存します。次のコマンドを実行して
ing-guestbook-tls.yaml
をデプロイします。kubectl apply -f ing-guestbook-tls.yaml
イングレス コントローラーのログを調べてデプロイの状態を確認します。
これで、HTTP および HTTPS の両方で guestbook
アプリケーションが使用できます。
ホスト名を指定する場合
TLS の構成とサービスを多重化するために、イングレス リソースのホスト名を指定することもできます。 ホスト名を指定すると、guestbook
サービスを使用できるのは、指定されたホスト上のみに限られます。
次のイングレス リソースを定義します。
secretName
セクションで、<guestbook-secret-name>
を実際のシークレットの名前に置き換えます。hosts
およびhost
セクションで、<guestbook.contoso.com>
を実際のホスト名に置き換えます。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
アプリケーションは、指定されたホスト上でのみ、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