Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 filter som definierats av Kubernetes Gateway API.
Background
Med sidhuvudomskrivningar kan du ändra begärande- och svarshuvudena till och från dina serverdelsmål.
Följande bild illustrerar en begäran med en specifik användaragent som skrivs om till ett förenklat värde som kallas SearchEngine-BingBot när begäran initieras till serverdelsmålet av Application Gateway för containrar:
Prerequisites
Om du följer BYO-distributionsstrategin, se till att du konfigurerar Application Gateway för Containers-resurser och ALB Controller
Om du följer den hanterade distributionsstrategin för ALB kontrollerar du etableringen av ALB-styrenheten application gatewayen för containrar 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.yamlDet här kommandot skapar följande i klustret:
- ett namnområde med namnet
test-infra - två tjänster som heter
backend-v1ochbackend-v2itest-infranamnrymden - två distributioner kallade
backend-v1ochbackend-v2i namnområdettest-infra
- ett namnområde med namnet
Distribuera de gateway-API-resurser som krävs
Skapa en gateway:
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
Note
När ALB-styrenheten skapar Application Gateway for Containers-resurser i Azure Resource Manager använder den följande namngivningskonvention för en klientdelsresurs: fe-<eight randomly generated characters>.
Om du vill ändra namnet på den klientdelsresurs som skapats i Azure kan du överväga att följa distributionsstrategin bring-your-own.
När gatewayresursen har skapats kontrollerar du att statusen är giltig, att lyssnaren är programmerad och att en adress har tilldelats till gatewayen.
kubectl get gateway gateway-01 -n test-infra -o yaml
Exempel på resultatet av en lyckad gateway-skapelse.
status:
addresses:
- type: IPAddress
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
När gatewayen har skapats skapar du en HTTPRoute som lyssnar efter värdnamn contoso.com och åsidosätter värdet user-agent till SearchEngine-BingBot.
I det här exemplet letar vi efter användaragenten som används av Bing-sökmotorn och förenklar rubriken till SearchEngine-BingBot för enklare parsning av serverdelen.
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.
Tip
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: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: header-rewrite-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
namespace: test-infra
hostnames:
- "contoso.com"
rules:
- matches:
- headers:
- name: user-agent
value: Mozilla/5\.0 AppleWebKit/537\.36 \(KHTML, like Gecko; compatible; bingbot/2\.0; \+http://www\.bing\.com/bingbot\.htm\) Chrome/
type: RegularExpression
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
set:
- name: user-agent
value: SearchEngine-BingBot
add:
- name: AGC-Header-Add
value: AGC-value
remove: ["client-custom-header"]
backendRefs:
- name: backend-v2
port: 8080
- backendRefs:
- name: backend-v1
port: 8080
EOF
Note
Det går inte att ändra Host rubriken med en requestHeaderModifier regel. För att åsidosätta Host-värdet för backendmålet, använd ett URLRewrite-filter.
När HTTPRoute-resursen har skapats kontrollerar du att vägen är Godkänd och att Application Gateway for Containers-resursen är programmerad.
kubectl get httproute header-rewrite-route -n test-infra -o yaml
Kontrollera att statusen för Application Gateway for Containers-resursen har uppdaterats.
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
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 gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Om du anger indikatorn för servernamn med hjälp av curl-kommandot contoso.com ska utdata för klientdelens FQDN returnera ett svar från backend-v1-tjänsten.
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 ska ett svar returneras från serverdelstjänsten i SearchEngine-BingBot:
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com -H "user-agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/"
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-v2-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-v2-5b8fd96959-f59mm"
}
Grattis, du har installerat ALB Controller, distribuerat ett serverdelsprogram och ändrat rubrikvärden via Gateway-API på Application Gateway för containrar.