利用適用於容器的應用程式閘道設定 SSL 卸載 - 輸入 API (預覽版)
本文將透過範例,說明如何使用輸入 API 的「輸入」資源建立應用程式:
背景
適用於容器的應用程式閘道支援 SSL 卸載,可提升後端效能。 請見下列範例案例:
必要條件
重要
適用於容器的應用程式閘道目前為預覽版。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。
如果遵循 BYO 部署策略,請確定已設定了適用於容器的應用程式閘道和 ALB 控制器
如果遵循 ALB 受控部署策略,請確定已透過 ApplicationLoadBalancer 自訂資源佈建了 ALB 控制器,以及適用於容器的應用程式閘道。
部署範例 HTTPS 應用程式:在叢集上套用下列 deployment.yaml 檔案,以建立示範 TLS/SSL 卸載的範例 Web 應用程式。
kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/https-scenario/ssl-termination/deployment.yaml
此指令會在您的叢集上建立下列物件:
- 名為
test-infra
的命名空間 test-infra
命名空間中名為echo
的一個服務test-infra
命名空間中名為echo
的一個部署test-infra
命名空間中名為listener-tls-secret
的一個密碼
- 名為
部署必要的輸入 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
注意
當 ALB 控制器在 ARM 中建立適用於容器的應用程式閘道資源時,ALB 控制器會針對前端資源使用下列命名慣例:fe-<8 個隨機產生的字元>
如果您要變更在 Azure 中建立的前端名稱,請考慮遵循自備部署策略。
建立輸入資源之後,請確定狀態會顯示負載平衡器的主機名稱,以及這兩個連接埠正在接聽要求。
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/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/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/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/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}')
以 CURL 執行 FQDN 時,會根據 HTTPRoute 上設定的後端傳回回應。
fqdnIp=$(dig +short $fqdn)
curl -vik --resolve example.com:443:$fqdnIp https://example.com
恭喜,您已安裝了 ALB 控制器、部署了後端應用程式,並且在適用於容器的應用程式閘道上設定流量分割/加權循環配置資源。