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:
Önkoşullar
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.
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.
Ö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
vebackend-v2
adlıbackend-v1
iki hizmet - ad alanında
test-infra
vebackend-v2
adlıbackend-v1
iki dağıtım
- Adlı bir ad alanı
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.