利用適用於容器的應用程式閘道設定 SSL 卸載 - 輸入 API (預覽版)

本文將透過範例,說明如何使用輸入 API 的「輸入」資源建立應用程式:

背景

適用於容器的應用程式閘道支援 SSL 卸載,可提升後端效能。 請見下列範例案例:

A figure showing SSL offloading with Application Gateway for Containers.

必要條件

重要

適用於容器的應用程式閘道目前為預覽版。
請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。

  1. 如果遵循 BYO 部署策略,請確定已設定了適用於容器的應用程式閘道和 ALB 控制器

  2. 如果遵循 ALB 受控部署策略,請確定已透過 ApplicationLoadBalancer 自訂資源佈建了 ALB 控制器,以及適用於容器的應用程式閘道。

  3. 部署範例 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 資源

  1. 建立輸入
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 控制器、部署了後端應用程式,並且在適用於容器的應用程式閘道上設定流量分割/加權循環配置資源。