Aracılığıyla paylaş


Kapsayıcılar için Application Gateway ile trafik bölme - 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ğ geçidi - bir http dinleyicisi ile ağ geçidi oluşturma
  • HTTPRoute - Farklı ağırlıklara sahip iki arka uç hizmetine başvuran bir HTTP yolu oluşturma

Background

Kapsayıcılar için Application Gateway, ağırlıkları ayarlamanıza ve trafiği farklı arka uç hedefleri arasında kaydırmanıza olanak tanır. Aşağıdaki örnek senaryoya bakın:

A figure showing traffic splitting with Application Gateway for Containers.

Önkoşullar

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

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

  3. Örnek HTTP uygulamasını dağıtma:
    Trafiği bölme / ağırlıklı hepsini bir kez deneme desteğini göstermek üzere örnek bir web uygulaması oluşturmak için kümenize aşağıdaki deployment.yaml dosyasını uygulayın.

    kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/traffic-split-scenario/deployment.yaml
    

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

    • Adlı bir ad alanı test-infra
    • ad alanında test-infra ve backend-v2 adlı backend-v1 iki hizmet
    • ad alanında test-infra ve backend-v2 adlı backend-v1 iki dağıtım

Gerekli Ağ Geçidi API'sini dağıtma

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: http
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: Same
EOF

Not

ALB Denetleyicisi ARM'de Kapsayıcılar için Application Gateway kaynaklarını oluşturduğunda, bir ön uç kaynağı için şu adlandırma kuralını kullanır: fe-8< rastgele oluşturulan karakterler>

Azure'da oluşturulan ön ucun adını değiştirmek isterseniz kendi dağıtım stratejinizi getirin seçeneğini uygulamayı göz önünde bulundurun.

Ağ geçidi kaynağı oluşturulduktan sonra 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: gateway-01-http
    supportedKinds:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute

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

kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: traffic-split-route
  namespace: test-infra
spec:
  parentRefs:
  - name: gateway-01
  rules:
  - backendRefs:
    - name: backend-v1
      port: 8080
      weight: 50
    - name: backend-v2
      port: 8080
      weight: 50
EOF

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

kubectl get httproute traffic-split-route -n test-infra -o yaml

Kapsayıcılar için Application Gateway kaynağının durumunun başarıyla güncelleştirildiğini doğrulayın.

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 yapılandırılması, HTTPRoute'ta yapılandırıldığı gibi arka uçlardan/podlardan yanıt döndürmelidir.

# this curl command will return 50% of the responses from backend-v1
# and the remaining 50% of the responses from backend-v2
watch -n 1 curl http://$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.