URL-omdirigering för Azure Application Gateway för containrar – Gateway-API
Med Application Gateway för containrar kan du returnera ett omdirigeringssvar till klientbaserade tre aspekter av en URL: protokoll, värdnamn och sökväg. För varje omdirigering kan en definierad HTTP-statuskod returneras till klienten för att definiera omdirigeringens karaktär.
Användningsinformation
URL-omdirigeringar använder regelfiltret RequestRedirect enligt definitionen i Kubernetes Gateway-API:et.
Omdirigering
En omdirigering anger svarsstatuskoden som returneras till klienter för att förstå syftet med omdirigeringen. Följande typer av omdirigering stöds:
- 301 (flyttas permanent): Anger att målresursen har tilldelats en ny permanent URI. Framtida referenser till den här resursen använder en av de omslutna URI:erna. Använd 301-statuskod för HTTP till HTTPS-omdirigering.
- 302 (hittades): Anger att målresursen tillfälligt är under en annan URI. Eftersom omdirigeringen kan ändras ibland bör klienten fortsätta att använda den effektiva begärande-URI:n för framtida begäranden.
Omdirigeringsfunktioner
Protokollomdirigering används ofta för att instruera klienten att gå från ett okrypterat trafikschema till trafik, till exempel HTTP till HTTPS-omdirigering.
Omdirigering av värdnamn matchar det fullständigt kvalificerade domännamnet (fqdn) för begäran. Detta observeras ofta vid omdirigering av ett gammalt domännamn till ett nytt domännamn. till exempel
contoso.com
tillfabrikam.com
.Sökvägsomdirigering har två olika varianter:
prefix
ochfull
.Prefix
omdirigeringstypen omdirigerar alla begäranden som börjar med ett definierat värde. Till exempel: ett prefix för /shop skulle matcha /shop och eventuell text efter. Till exempel /shop, /shop/checkout och /shop/item-a skulle alla omdirigeras till /shop också.Full
omdirigeringstypen matchar ett exakt värde. Till exempel: /shop kan omdirigeras till /store, men /shop/checkout omdirigeras inte till /store.
Följande bild illustrerar ett exempel på en begäran som är avsedd för contoso.com/summer-promotion omdirigeras till contoso.com/shop/category/5. Dessutom returneras en andra begäran som initieras för att contoso.com via http-protokollet en omdirigering för att initiera en ny anslutning till https-varianten.
Förutsättningar
Om du följer BYO-distributionsstrategin kontrollerar du att du konfigurerar application gateway för containrar och ALB-styrenhet.
Om du följer ALB-strategin för hanterad distribution ser du till att du etablerar ALB-styrenheten och etablerar Application Gateway för containrar-resurser via den anpassade resursen ApplicationLoadBalancer.
Distribuera HTTP-exempelprogram:
Använd följande deployment.yaml-fil i klustret för att distribuera ett TLS-exempelcertifikat för att demonstrera omdirigeringsfunktioner.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yaml
Det här kommandot skapar följande i klustret:
- ett namnområde med namnet
test-infra
- en tjänst som anropas
echo
test-infra
i namnområdet - en distribution som anropas
echo
itest-infra
namnområdet - en hemlighet som heter
listener-tls-secret
itest-infra
namnområdet
- 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 - name: https-listener port: 443 protocol: HTTPS allowedRoutes: namespaces: from: Same tls: mode: Terminate certificateRefs: - kind : Secret group: "" name: listener-tls-secret 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 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å att gatewayen har skapats.
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
Skapa en HTTPRoute-resurs för contoso.com
som hanterar trafik som tas emot via https.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: https-contoso
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
sectionName: https-listener
hostnames:
- "contoso.com"
rules:
- backendRefs:
- name: echo
port: 80
EOF
När HTTPRoute-resursen har skapats kontrollerar du att HTTPRoute-resursen visar Godkänd och att Application Gateway for Containers-resursen är programmerad.
kubectl get httproute rewrite-example -n test-infra -o yaml
Kontrollera att Application Gateway for Containers-resursen har uppdaterats för varje HTTPRoute.
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
När gatewayen har skapats skapar du en HTTPRoute-resurs för contoso.com
med ett RequestRedirect-filter som omdirigerar http-trafik till https.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: http-to-https-contoso-redirect
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
sectionName: http-listener
hostnames:
- "contoso.com"
rules:
- matches:
filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
EOF
När HTTPRoute-resursen har skapats kontrollerar du att HTTPRoute-resursen visar Godkänd och att Application Gateway for Containers-resursen är programmerad.
kubectl get httproute rewrite-example -n test-infra -o yaml
Kontrollera att Application Gateway for Containers-resursen har uppdaterats för varje HTTPRoute.
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
Skapa en HTTPRoute-resurs för contoso.com
som hanterar en omdirigering för sökvägen /summer-promotion till en specifik URL. Genom att eliminera sectionName, som visas i http till https HTTPRoute-resurser, gäller den här omdirigeringsregeln för både HTTP- och HTTPS-begäranden.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: summer-promotion-redirect
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
sectionName: https-listener
hostnames:
- "contoso.com"
rules:
- matches:
- path:
type: PathPrefix
value: /summer-promotion
filters:
- type: RequestRedirect
requestRedirect:
path:
type: ReplaceFullPath
replaceFullPath: /shop/category/5
statusCode: 302
- backendRefs:
- name: echo
port: 80
EOF
När HTTPRoute-resursen har skapats kontrollerar du att HTTPRoute-resursen visar Godkänd och att Application Gateway for Containers-resursen är programmerad.
kubectl get httproute rewrite-example -n test-infra -o yaml
Kontrollera att Application Gateway for Containers-resursen har uppdaterats för varje HTTPRoute.
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}')
När du anger indikatorn för servernamn med hjälp av curl-kommandot http://contoso.com
bör du returnera ett svar från Application Gateway för containrar med en location
rubrik som definierar en 301-omdirigering till https://contoso.com
.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com/ -v
Via svaret bör vi se:
* Added contoso.com:80:xxx.xxx.xxx.xxx to DNS cache
* Hostname contoso.com was found in DNS cache
* Trying xxx.xxx.xxx.xxx:80...
* Connected to contoso.com (xxx.xxx.xxx.xxx) port 80 (#0)
> GET / HTTP/1.1
> Host: contoso.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< location: https://contoso.com/
< date: Mon, 26 Feb 2024 22:56:23 GMT
< server: Microsoft-Azure-Application-LB/AGC
< content-length: 0
<
* Connection #0 to host contoso.com left intact
När du anger indikatorn för servernamn med hjälp av curl-kommandot https://contoso.com/summer-promotion
ska Application Gateway for Containers returnera en 302-omdirigering till https://contoso.com/shop/category/5
.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:443:$fqdnIp https://contoso.com/summer-promotion -v
Via svaret bör vi se:
> GET /summer-promotion HTTP/2
> Host: contoso.com
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
< HTTP/2 302
< location: https://contoso.com/shop/category/5
< date: Mon, 26 Feb 2024 22:58:43 GMT
< server: Microsoft-Azure-Application-LB/AGC
<
* Connection #0 to host contoso.com left intact
Grattis, du har installerat ALB Controller, distribuerat ett serverdelsprogram och använt Gateway-API för att konfigurera både en HTTP till HTTPS-omdirigering och sökvägsbaserad omdirigering till specifika klientbegäranden.