Rubrikomskrivning för Azure Application Gateway för containrar – API för ingress
Med Application Gateway för containrar kan du skriva om HTTP-huvuden för klientbegäranden och svar från serverdelsmål.
Användningsinformation
Sidhuvudomskrivningar drar nytta av Application Gateway för containerns anpassade resurs IngressExtension.
Bakgrund
Med sidhuvudomskrivningar kan du ändra begärande- och svarshuvudena till och från dina serverdelsmål.
Följande bild illustrerar ett exempel på en begäran med en specifik användaragent som skrivs om till ett förenklat värde som anropas rewritten-user-agent
när begäran initieras till serverdelsmålet av Application Gateway för containrar:
Förutsättningar
Om du följer BYO-distributionsstrategin kontrollerar du att du har konfigurerat application gateway för containrar-resurser och ALB-styrenhet
Om du följer den hanterade distributionsstrategin för ALB kontrollerar du att du har etablerat ALB-styrenheten och etablerat Application Gateway for Containers-resurserna via den anpassade resursen ApplicationLoadBalancer.
Distribuera HTTP-exempelprogrammet Använd följande deployment.yaml-fil i klustret för att skapa ett exempelwebbprogram för att demonstrera sidhuvudomskrivningen.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/traffic-split-scenario/deployment.yaml
Det här kommandot skapar följande i klustret:
- ett namnområde med namnet
test-infra
- två tjänster anropas
backend-v1
ochbackend-v2
itest-infra
namnområdet - två distributioner anropas
backend-v1
ochbackend-v2
itest-infra
namnområdet
- ett namnområde med namnet
Distribuera nödvändiga INGRESS API-resurser
Skapa en ingressresurs för att lyssna efter begäranden till contoso.com
:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-01
namespace: test-infra
annotations:
alb.networking.azure.io/alb-name: alb-test
alb.networking.azure.io/alb-namespace: alb-test-infra
alb.networking.azure.io/alb-ingress-extension: header-rewrite
spec:
ingressClassName: azure-alb-external
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
EOF
Kommentar
När ALB-styrenheten skapar Application Gateway for Containers-resurser i ARM använder den följande namngivningskonvention för en klientdelsresurs: fe-8< slumpmässigt genererade tecken>
Om du vill ändra namnet på klientdelen som skapats i Azure kan du överväga att följa din egen distributionsstrategi.
När ingressresursen har skapats kontrollerar du att statusen visar värdnamnet för lastbalanseraren och att båda portarna lyssnar efter begäranden.
kubectl get ingress ingress-01 -n test-infra -o yaml
Exempel på utdata från skapande av inkommande.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.networking.azure.io/alb-frontend: FRONTEND_NAME
alb.networking.azure.io/alb-id: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"networking.k8s.io/v1","kind":"Ingress","metadata":{"annotations":{"alb.networking.azure.io/alb-frontend":"FRONTEND_NAME","alb.networking.azure.io/alb-id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/yyyyyyyy/providers/Microsoft.ServiceNetworking/trafficControllers/zzzzzz", "alb.networking.azure.io/alb-ingress-extension":"header-rewrite"},"name"
:"ingress-01","namespace":"test-infra"},"spec":{"ingressClassName":"azure-alb-external","rules":[{"host":"contoso.com","http":{"paths":[{"backend":{"service":{"name":"backend-v1","port":{"number":8080}}},"path":"/","pathType":"Prefix"}]}}]}}
creationTimestamp: "2023-07-22T18:02:13Z"
generation: 2
name: ingress-01
namespace: test-infra
resourceVersion: "278238"
uid: 17c34774-1d92-413e-85ec-c5a8da45989d
spec:
ingressClassName: azure-alb-external
rules:
- host: contoso.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-v1
port:
number: 8080
status:
loadBalancer:
ingress:
- hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
ports:
- port: 80
protocol: TCP
När ingressen har skapats måste vi sedan definiera en IngressExtension med omskrivningsreglerna för huvudet.
I det här exemplet anger vi en statisk användaragent med värdet rewritten-user-agent
.
Det här exemplet visar också tillägg av en ny rubrik med AGC-Header-Add
namnet med värdet AGC-value
och tar bort en begäranderubrik med namnet client-custom-header
.
Dricks
I det här exemplet kan vi använda HTTPHeaderMatch för "Exact" för en strängmatchning, men en demonstration används i reguljära uttryck för att illustrera ytterligare funktioner.
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: IngressExtension
metadata:
name: header-rewrite
namespace: test-infra
spec:
rules:
- host: contoso.com
rewrites:
- type: RequestHeaderModifier
requestHeaderModifier:
set:
- name: "user-agent"
value: "rewritten-user-agent"
add:
- name: "AGC-Header-Add"
value: "AGC-value"
remove:
- "client-custom-header"
EOF
När Resursen IngressExtension har skapats kontrollerar du att resursen returnerar Inga valideringsfel och är giltig.
kubectl get IngressExtension header-rewrite -n test-infra -o yaml
Kontrollera att statusen för Application Gateway for Containers-resursen har uppdaterats.
Testa åtkomsten till programmet
Nu är vi redo att skicka trafik till vårt exempelprogram via det FQDN som tilldelats klientdelen. Använd följande kommando för att hämta FQDN.
fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Om du anger indikatorn för servernamn med hjälp av curl-kommandot contoso.com
returneras ett svar från backend-v1-tjänsten för klientdelens FQDN.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com
Via svaret bör vi se:
{
"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": [
"dcd4bcad-ea43-4fb6-948e-a906380dcd6d"
]
},
"namespace": "test-infra",
"ingress": "",
"service": "",
"pod": "backend-v1-5b8fd96959-f59mm"
}
Om du anger ett användaragenthuvud med värdet my-user-agent
ska ett svar returneras från serverdelstjänsten för rewritten-user-agent
:
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com -H "user-agent: my-user-agent"
Via svaret bör vi se:
{
"path": "/",
"host": "fabrikam.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-v1-5b8fd96959-f59mm"
}
Om du anger en client-custom-header
rubrik med värdet moo
ska du ta bort från begäran när Application Gateway for Containers initierar anslutningen till serverdelstjänsten:
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com -H "client-custom-header: moo"
Via svaret bör vi se:
{
"path": "/",
"host": "fabrikam.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": [
"kd83nc84-4325-5d22-3d23-237dd4e3941b"
]
},
"namespace": "test-infra",
"ingress": "",
"service": "",
"pod": "backend-v1-5b8fd96959-f59mm"
}
Grattis, du har installerat ALB-styrenheten, distribuerat ett serverdelsprogram och ändrat rubrikvärden via ingress-API på Application Gateway för containrar.