Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu belge URL yolunu, sorgu dizesini ve üst bilgiyi temel alan trafik yönlendirmesini göstermek için Ağ Geçidi API'sindeki kaynakları kullanan örnek bir uygulama ayarlamanıza yardımcı olur. Aşağıdaki amaçlar için adımlar sağlanmıştır:
- Bir HTTPS dinleyicisi ile bir Ağ Geçidi kaynağı oluşturun.
- Arka uç hizmetine başvuran bir HTTPRoute kaynağı oluşturun.
- HTTPRouteMatch kullanarak yolu, üst bilgiyi ve sorgu dizesini temel alarak yönlendirme yapın.
Arka plan
Kapsayıcılar için Application Gateway, URL yolu, sorgu dizesi ve üst bilgi temelinde trafik yönlendirmesini etkinleştirir. 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 Yol, sorgu ve üst bilgi tabanlı yönlendirmeyi 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://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yamlBu komut kümenizde aşağıdakileri oluşturur:
- adlı bir ad alanı
test-infra -
backend-v1ad alanındakibackend-v2vetest-infraadlı iki hizmet -
backend-v1vebackend-v2adlı iki dağıtım,test-infraad alanında
- adlı bir ad alanı
Gerekli Ağ Geçidi API kaynaklarını dağıtın.
Ağ geçidi oluşturma:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1beta1
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-listener
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Same
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ş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: https-listener
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Ağ geçidi oluşturulduktan sonra, iki farklı eşleşme tanımlamak için bir HTTPRoute ve trafiğin yönlendirildiği varsayılan bir hizmet oluşturun.
Aşağıdaki kuralların okunma şekli aşağıdaki gibidir:
- Yol /bar ise, trafik 8080 numaralı bağlantı noktası üzerinden backend-v2 hizmetine yönlendirilir.
- İstekte magic adı ve foo değerini içeren bir HTTP üst bilgisi varsa, URL bir sorgu dizesi içerecek şekilde great adı example değeriyle tanımlanmışsa ve yol /some/thing ise, istek 8080 numaralı bağlantı noktasında backend-v2'ye gönderilir.
- Aksi takdirde, diğer tüm istekler 8080 numaralı bağlantı noktasındaki backend-v1 hizmetine yönlendirilir.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: http-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
namespace: test-infra
rules:
- matches:
- path:
type: PathPrefix
value: /bar
backendRefs:
- name: backend-v2
port: 8080
- matches:
- headers:
- type: Exact
name: magic
value: foo
queryParams:
- type: Exact
name: great
value: example
path:
type: PathPrefix
value: /some/thing
method: GET
backendRefs:
- name: backend-v2
port: 8080
- backendRefs:
- name: backend-v1
port: 8080
EOF
Tip
Kapsayıcılar için Application Gateway, headers, queryParams ve path kuralları için Normal İfade 2 (RE2) söz dizimini kullanarak normal ifade eşleştirmeyi destekler. Daha fazla bilgi Ağ Geçidi API belirtiminde bulunabilir.
HTTPRoute kaynağı oluşturulduktan sonra yolun Kabul Edildi ve Kapsayıcılar için Uygulama Ağ Geçidi kaynağının Programlandığından emin olun.
kubectl get httproute http-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}')
curl komutunu kullanarak üç farklı senaryoyu doğrulayabiliriz:
Yol tabanlı yönlendirme
Bu senaryoda, gönderilen http://frontend-fqdn/bar istemci isteği backend-v2 hizmetine yönlendirilir.
Aşağıdaki komutu çalıştırın:
curl http://$fqdn/bar
İsteği sunan kapsayıcının backend-v2 olduğuna dikkat edin.
Sorgu dizesi + üst bilgi + yol yönlendirme
Bu senaryoda, "magic: foo" öğesinin üst bilgi anahtarı/değer bölümüyle gönderilen http://frontend-fqdn/some/thing?great=example istemci isteği backend-v2 hizmetine yönlendirilir.
Aşağıdaki komutu çalıştırın:
curl http://$fqdn/some/thing?great=example -H "magic: foo"
İsteği sunan kapsayıcının backend-v2 olduğuna dikkat edin.
Varsayılan yol
İlk iki senaryodan hiçbiri karşılanmazsa, Kapsayıcılar için Application Gateway diğer tüm istekleri backend-v1 hizmetine yönlendirir.
Aşağıdaki komutu çalıştırın:
curl http://$fqdn/
İsteği sunan kapsayıcının backend-v1 olduğuna dikkat edin.
Tebrikler, ALB Denetleyicisi'ni yüklediniz, bir arka uç uygulaması dağıttınız ve kapsayıcılar için Application Gateway'de Ağ Geçidi API'sini kullanarak trafiği uygulamaya yönlendirdiniz.