Kapsayıcılar için Azure Uygulaması Lication Gateway IÇIN URL Yeniden Yazma - Ağ Geçidi API'si
Kapsayıcılar için Application Gateway, isteklerin ana bilgisayar adı ve/veya yolu da dahil olmak üzere bir istemci isteğinin URL'sini yeniden yazmanızı sağlar. Kapsayıcılar için Application Gateway arka uç hedefine yönelik isteği başlattığında, istek isteği başlatmak için yeni yeniden yazılan URL'yi içerir.
Kullanım ayrıntıları
URL Yeniden Yazma, Kubernetes Ağ Geçidi API'si tarafından tanımlanan filtrelerden yararlanıyor.
Background
URL yeniden yazma, bir arka uç hedefine başlatıldığında gelen isteği farklı bir URL'ye çevirmenizi sağlar.
Aşağıdaki şekilde, contoso.com/shop contoso.com/ecommerce'a yeniden yazılmasını hedefleyen bir istek örneği gösterilmektedir. İstek, Kapsayıcılar için Application Gateway tarafından arka uç hedefine başlatılır:
Ö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ı dağıtma
Yeniden yönlendirme özelliklerini göstermek üzere örnek bir TLS sertifikası dağıtmak için kümenize aşağıdaki deployment.yaml dosyasını uygulayın.
kubectl apply -f kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/https-scenario/ssl-termination/deployment.yaml
Bu komut kümenizde aşağıdakileri oluşturur:
- Adlı bir ad alanı
test-infra
- Ad alanında çağrılan
echo
birtest-infra
hizmet - Ad alanında çağrılan
echo
birtest-infra
dağıtım - Ad alanında çağrılan
listener-tls-secret
birtest-infra
gizli dizi
- 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-listener 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: https-listener
supportedKinds:
- group: gateway.networking.k8s.io
kind: HTTPRoute
Ağ geçidi oluşturulduktan sonra için contoso.com
bir HTTPRoute kaynağı oluşturun. Bu örnek, 'a contoso.com/shop
gönderilen trafiğin arka uç hedefine olarak contoso.com/ecommerce
başlatılmasını sağlar.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rewrite-example
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
hostnames:
- "contoso.com"
rules:
- matches:
- path:
type: PathPrefix
value: /shop
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /ecommerce
backendRefs:
- name: backend-v1
port: 8080
- backendRefs:
- name: backend-v2
port: 8080
EOF
HTTPRoute kaynağı oluşturulduğunda HTTPRoute kaynağının Kabul Edildi ve Kapsayıcılar için Application Gateway kaynağının Programlandığından emin olun.
kubectl get httproute rewrite-example -n test-infra -o yaml
Kapsayıcılar için Application Gateway kaynağının her HTTPRoute için başarıyla güncelleştirildiğinden emin olun.
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 sunucu adı göstergesini belirttiğinizde, contoso.com/shop
arka uç-v1 hizmetinden istenen arka uç hedef yolunun gösterildiği contoso.com/ecommerce
bir yanıt döndürmelidir.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com/shop
Yanıt aracılığıyla şu bilgileri görmemiz gerekir:
{
"path": "/ecommerce",
"host": "contoso.com",
"method": "GET",
"proto": "HTTP/1.1",
"headers": {
"Accept": [
"*/*"
],
"User-Agent": [
"curl/7.81.0"
],
"X-Forwarded-For": [
"xxx.xxx.xxx.xxx"
],
"X-Forwarded-Proto": [
"http"
],
"X-Request-Id": [
"dcd4bcad-ea43-4fb6-948e-a906380dcd6d"
]
},
"namespace": "test-infra",
"ingress": "",
"service": "",
"pod": "backend-v1-5b8fd96959-f59mm"
}
Curl komutunu kullanarak sunucu adı göstergesini belirttiğinizde, contoso.com
backend-v2 hizmetinden bir yanıt döndürmelidir.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com
Yanıt aracılığıyla şu bilgileri görmemiz gerekir:
{
"path": "/",
"host": "contoso.com",
"method": "GET",
"proto": "HTTP/1.1",
"headers": {
"Accept": [
"*/*"
],
"User-Agent": [
"curl/7.81.0"
],
"X-Forwarded-For": [
"xxx.xxx.xxx.xxx"
],
"X-Forwarded-Proto": [
"http"
],
"X-Request-Id": [
"adae8cc1-8030-4d95-9e05-237dd4e3941b"
]
},
"namespace": "test-infra",
"ingress": "",
"service": "",
"pod": "backend-v2-594bd59865-ppv9w"
}
Tebrikler, Kapsayıcılar için Application Gateway'de trafik hedefe ayarlanmadan önce ALB Denetleyicisi'ni yüklediniz, bir arka uç uygulaması dağıttınız ve istenen istemci URL'sini yeniden yazmak için filtrelemeyi kullandınız.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin