Application Gateway for Containers を使用した SSL オフロード - イングレス API
このドキュメントは、イングレス API から "イングレス" リソース使用するサンプル アプリケーションを設定するのに役立ちます。
背景
Application Gateway for Containers を使用すると、SSL オフロード が可能になり、バックエンドのパフォーマンスが向上します。 次のシナリオ例を参照してください。
前提条件
BYO デプロイ戦略に従う場合は、Application Gateway for Containers リソースと ALB コントローラーを設定していることを確認します。
ALB マネージド デプロイ戦略に従う場合は、ALB コントローラーと、ApplicationLoadBalancer カスタム リソースを介した Application Gateway for Containers リソースのプロビジョニングが完了していることを確認します。
サンプル HTTPS アプリケーションをデプロイする: クラスターに次の deployment.yaml ファイルを適用し、TLS/SSL オフロードのデモンストレーションを行うサンプル Web アプリケーションを作成します。
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yaml
このコマンドによって、クラスターに次のものが作成されます。
test-infra
と呼ばれる名前空間test-infra
名前空間内のecho
という 1 つのサービスtest-infra
名前空間にecho
と呼ばれる 1 つのデプロイtest-infra
名前空間にlistener-tls-secret
と呼ばれる 1 つのシークレット
必要なイングレス API リソースをデプロイする
- イングレスを作成する
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-01
namespace: test-infra
annotations:
alb.networking.azure.io/alb-name: alb-test
alb.networking.azure.io/alb-namespace: alb-test-infra
spec:
ingressClassName: azure-alb-external
tls:
- hosts:
- example.com
secretName: listener-tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: echo
port:
number: 80
EOF
Note
ALB コントローラーは、ARM で Application Gateway for Containers リソースを作成するときに、フロントエンド リソースに対して次の名前付け規則を使用します。fe-<ランダムに生成された 8 文字>
Azure で作成されたフロントエンドの名前を変更したい場合は、BYO デプロイ戦略に従うことを検討してください。
イングレス リソースが作成されたら、状態にロード バランサーのホスト名が表示され、どちらのポートも要求をリッスンしていることを確認します。
kubectl get ingress ingress-01 -n test-infra -o yaml
イングレスの作成に成功した出力例。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.networking.azure.io/alb-frontend: FRONTEND_NAME
alb.networking.azure.io/alb-id: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"alb.networking.azure.io/alb-frontend":"FRONTEND_NAME","alb.networking.azure.io/alb-id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz"},"name"
:"ingress-01","namespace":"test-infra"},"spec":{"ingressClassName":"azure-alb-external","rules":[{"host":"example.com","http":{"paths":[{"backend":{"service":{"name":"echo","port":{"number":80}}},"path":"/","pathType":"Prefix"}]}}],"tls":[{"hosts":["example.com"],"secretName":"listener-tls-secret"}]}}
creationTimestamp: "2023-07-22T18:02:13Z"
generation: 2
name: ingress-01
namespace: test-infra
resourceVersion: "278238"
uid: 17c34774-1d92-413e-85ec-c5a8da45989d
spec:
ingressClassName: azure-alb-external
rules:
- host: example.com
http:
paths:
- backend:
service:
name: echo
port:
number: 80
path: /
pathType: Prefix
tls:
- hosts:
- example.com
secretName: listener-tls-secret
status:
loadBalancer:
ingress:
- hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
ports:
- port: 80
protocol: TCP
- port: 443
protocol: TCP
アプリケーションへのアクセスをテストする
これで、フロントエンドに割り当てられた FQDN を使用して、サンプル アプリケーションにトラフィックを送信する準備ができました。 FQDN を取得するには、次のコマンドを使用します。
fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
この FQDN に curl を実行すると、HTTPRoute で構成されているバックエンドから応答が返されます。
fqdnIp=$(dig +short $fqdn)
curl -vik --resolve example.com:443:$fqdnIp https://example.com
これで、ALB コントローラーをインストールし、バックエンド アプリケーションをデプロイして、Application Gateway for Containers のイングレス経由でアプリケーションにトラフィックをルーティングすることができました。