تقسيم نسبة استخدام الشبكة باستخدام بوابة التطبيق للحاويات - واجهة برمجة تطبيقات البوابة

يساعد هذا المستند في إعداد تطبيق مثال يستخدم الموارد التالية من واجهة برمجة تطبيقات البوابة:

  • البوابة - إنشاء بوابة مع وحدة استماع http واحدة
  • HTTPRoute - إنشاء مسار HTTP يشير إلى خدمتين خلفيتين لها أوزان مختلفة

خلفية

تمكنك بوابة التطبيق للحاويات من تعيين الأوزان ونقل نسبة استخدام الشبكة بين أهداف الواجهة الخلفية المختلفة. راجع المثال التالي للسيناريو:

A figure showing traffic splitting with Application Gateway for Containers.

المتطلبات الأساسية

  1. إذا كنت تتبع استراتيجية نشر BYO، فتأكد من إعداد Application Gateway لموارد الحاويات ووحدة تحكم ALB.

  2. إذا كنت تتبع استراتيجية النشر المدارة ل ALB، فتأكد من توفير وحدة تحكم ALB وتوفير موارد Application Gateway for Containers عبر مورد ApplicationLoadBalancer المخصص.

  3. توزيع نموذج تطبيق HTTP:
    قم بتطبيق ملف deployment.yaml التالي على نظام المجموعة الخاص بك لإنشاء نموذج تطبيق ويب لإظهار تقسيم نسبة استخدام الشبكة / دعم الترتيب الدوري المرجح.

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

    ينشئ هذا الأمر ما يلي على نظام المجموعة:

    • مساحة اسم تسمى test-infra
    • خدمتان تسمى backend-v1 و backend-v2 في test-infra مساحة الاسم
    • تم استدعاء backend-v1 توزيعين و backend-v2 في test-infra مساحة الاسم

توزيع موارد واجهة برمجة تطبيقات البوابة المطلوبة

إنشاء بوابة:

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

إشعار

عندما تنشئ وحدة تحكم ALB موارد بوابة التطبيق للحاويات في ARM، ستستخدم اصطلاح التسمية التالي لمورد الواجهة الأمامية: أحرف fe-8< التي تم إنشاؤها عشوائيا>

إذا كنت ترغب في تغيير اسم الواجهة الأمامية التي تم إنشاؤها في Azure، ففكر في اتباع استراتيجية إحضار التوزيع الخاصة بك.

بمجرد إنشاء مورد البوابة، تأكد من صحة الحالة، وبرمجة وحدة الاستماع، وتعيين عنوان إلى البوابة.

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

مثال على مخرجات إنشاء البوابة الناجحة.

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

بمجرد إنشاء البوابة، قم بإنشاء HTTPRoute

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، تأكد من قبول المسار وبرمجة مورد Application Gateway for Containers.

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

تحقق من تحديث حالة مورد Application Gateway for Containers بنجاح.

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

اختبار الوصول إلى التطبيق

الآن نحن على استعداد لإرسال بعض نسبة استخدام الشبكة إلى نموذج التطبيق الخاص بنا، عبر FQDN المعين للواجهة الأمامية. استخدم الأمر التالي للحصول على FQDN:

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

يجب أن يؤدي تجعيد FQDN هذا إلى إرجاع الاستجابات من الخلفيات/pods كما تم تكوينها على HTTPRoute.

# 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

تهانينا، لقد قمت بتثبيت وحدة تحكم ALB، ونشر تطبيق الخلفية وتوجيه حركة المرور إلى التطبيق عبر الدخول على بوابة التطبيق للحاويات.