Kapsayıcılar için Application Gateway ile SSL boşaltma - Ağ Geçidi API'si

Bu belge, Ağ Geçidi API'sinden aşağıdaki kaynakları kullanan örnek bir uygulama ayarlamanıza yardımcı olur. Aşağıdaki amaçlar için adımlar sağlanmıştır:

Arka plan

Kapsayıcılar için Application Gateway, daha iyi sunucu performansı sağlamak için SSL yük devretmeyi etkinleştirir. Aşağıdaki örnek senaryoya bakın:

Kapsayıcılar için Application Gateway ile SSL boşaltmayı gösteren şekil.

Önkoşullar

Uyarı

Kapsayıcılar için olan Uygulama Ağ Geçidi sertifikaları, Kubernetes gizlilikleri olarak depolanmalıdır. Kapsayıcılar için Application Gateway sertifikaların kümede yerel olmasını gerektirdiğinden ve bunları dış birimlerden bağlayamayacağından Gizli Dizi Deposu CSI sürücüsü aracılığıyla Azure Key Vault tümleştirmesi desteklenmez. Otomatik sertifika yönetimi için Let's Encrypt ile cert-manager kullanmayı göz önünde bulundurun.

  1. BYO dağıtım stratejisini izliyorsanız Kapsayıcılar için Application Gateway kaynaklarınızı ve ALB Denetleyicisi'ni (Eklenti veya Helm) ayarladığınızdan emin olun

  2. ALB yönetilen dağıtım stratejisini izliyorsanız, ApplicationLoadBalancer özel kaynağı aracılığıyla ALB Denetleyicinizi (Eklenti veya Helm) ve Kapsayıcılar için Application Gateway kaynaklarını sağladığınızdan emin olun.

  3. Örnek HTTPS uygulaması dağıtımı: TLS/SSL boşaltmayı göstermek için kümenizde örnek bir web uygulaması oluşturmak amacıyla aşağıdaki deployment.yaml dosyasını uygulayın.

    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
    

    Bu komut kümenizde aşağıdakileri oluşturur:

    • adlı bir ad alanı test-infra
    • echo ad alanında test-infra olarak adlandırılan bir hizmet
    • echo ad alanında test-infra adlı bir dağıtım
    • listener-tls-secret ad alanında test-infra adında bir gizli

Gerekli Ağ Geçidi API kaynaklarını dağıtın.

  1. Ağ Geçidi Oluşturma

    kubectl apply -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: gateway-01
      namespace: test-infra
      annotations:
        alb.networking.azure.io/alb-namespace: alb-test-infra
        alb.networking.azure.io/alb-name: alb-test
    spec:
      gatewayClassName: azure-alb-external
      listeners:
      - name: https-listener
        port: 443
        protocol: HTTPS
        allowedRoutes:
          namespaces:
            from: Same
        tls:
          mode: Terminate
          certificateRefs:
          - kind : Secret
            group: ""
            name: listener-tls-secret
    EOF
    

Uyarı

ALB Denetleyicisi Azure Resource Manager'da Kapsayıcılar için Application Gateway kaynaklarını oluşturduğunda, bir ön uç kaynağı için aşağıdaki adlandırma kuralını kullanır: fe-<eight randomly generated characters>.

Azure'da oluşturulan ön uç kaynağının adını değiştirmek istiyorsanız , kendi dağıtım stratejinizi getirin seçeneğini izleyin.

Ağ geçidi kaynağı oluşturulduğunda durumun geçerli olduğundan, dinleyicinin Programlandığından ve ağ geçidine bir adres atandığından emin olun.

kubectl get gateway gateway-01 -n test-infra -o yaml

Başarılı ağ geçidi oluşturma işleminin örnek çıktısı.

status:
  addresses:
  - type: Hostname
    value: xxxx.yyyy.alb.azure.com
  conditions:
  - lastTransitionTime: "2023-06-19T21:04:55Z"
    message: Valid Gateway
    observedGeneration: 1
    reason: Accepted
    status: "True"
    type: Accepted
  - lastTransitionTime: "2023-06-19T21:04:55Z"
    message: Application Gateway For Containers resource has been successfully updated.
    observedGeneration: 1
    reason: Programmed
    status: "True"
    type: Programmed
  listeners:
  - attachedRoutes: 0
    conditions:
    - lastTransitionTime: "2023-06-19T21:04:55Z"
      message: ""
      observedGeneration: 1
      reason: ResolvedRefs
      status: "True"
      type: ResolvedRefs
    - lastTransitionTime: "2023-06-19T21:04:55Z"
      message: Listener is accepted
      observedGeneration: 1
      reason: Accepted
      status: "True"
      type: Accepted
    - lastTransitionTime: "2023-06-19T21:04:55Z"
      message: Application Gateway For Containers resource has been successfully updated.
      observedGeneration: 1
      reason: Programmed
      status: "True"
      type: Programmed
    name: https-listener
    supportedKinds:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute

Ağ geçidi oluşturulduktan sonra bir HTTPRoute kaynağı oluşturun.

kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: https-route
  namespace: test-infra
spec:
  parentRefs:
  - name: gateway-01
  rules:
  - backendRefs:
    - name: echo
      port: 80
EOF

HTTPRoute kaynağı oluşturulduktan sonra, yolun Kabul Edildi ve Kapsayıcılar için Application Gateway kaynağının Programlandığıdan emin olun.

kubectl get httproute https-route -n test-infra -o yaml

Kapsayıcılar için Application Gateway kaynağının başarıyla güncelleştirildiğinden emin olun.

status:
  parents:
  - conditions:
    - lastTransitionTime: "2023-06-19T22:18:23Z"
      message: ""
      observedGeneration: 1
      reason: ResolvedRefs
      status: "True"
      type: ResolvedRefs
    - lastTransitionTime: "2023-06-19T22:18:23Z"
      message: Route is Accepted
      observedGeneration: 1
      reason: Accepted
      status: "True"
      type: Accepted
    - lastTransitionTime: "2023-06-19T22:18:23Z"
      message: Application Gateway For Containers resource has been successfully updated.
      observedGeneration: 1
      reason: Programmed
      status: "True"
      type: Programmed
    controllerName: alb.networking.azure.io/alb-controller
    parentRef:
      group: gateway.networking.k8s.io
      kind: Gateway
      name: gateway-01
      namespace: test-infra

Uygulamaya erişimi test etme

Artık ön uçta atanan FQDN aracılığıyla örnek uygulamamıza trafik göndermeye hazırız. FQDN'yi almak için aşağıdaki komutu kullanın.

fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')

Bu FQDN'nin kümelenmesi, HTTPRoute'ta yapılandırıldığı gibi arka uçtan yanıt döndürmelidir.

curl --insecure https://$fqdn/

Tebrikler, ALB Denetleyicisi'ni yüklediniz, bir arka uç uygulaması dağıttınız ve kapsayıcılar için Application Gateway'e giriş yoluyla trafiği uygulamaya yönlendirdiniz.