تقسيم نسبة استخدام الشبكة باستخدام بوابة التطبيق للحاويات - واجهة برمجة تطبيقات البوابة
يساعد هذا المستند في إعداد تطبيق مثال يستخدم الموارد التالية من واجهة برمجة تطبيقات البوابة:
- البوابة - إنشاء بوابة مع وحدة استماع http واحدة
- HTTPRoute - إنشاء مسار HTTP يشير إلى خدمتين خلفيتين لها أوزان مختلفة
خلفية
تمكنك بوابة التطبيق للحاويات من تعيين الأوزان ونقل نسبة استخدام الشبكة بين أهداف الواجهة الخلفية المختلفة. راجع المثال التالي للسيناريو:
المتطلبات الأساسية
إذا كنت تتبع استراتيجية نشر BYO، فتأكد من إعداد Application Gateway لموارد الحاويات ووحدة تحكم ALB.
إذا كنت تتبع استراتيجية النشر المدارة ل ALB، فتأكد من توفير وحدة تحكم ALB وتوفير موارد Application Gateway for Containers عبر مورد ApplicationLoadBalancer المخصص.
توزيع نموذج تطبيق 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، ونشر تطبيق الخلفية وتوجيه حركة المرور إلى التطبيق عبر الدخول على بوابة التطبيق للحاويات.