Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il Gateway applicativo per contenitori consente di restituire una risposta di reindirizzamento al client in base a tre aspetti di un URL: protocollo, nome host e percorso. Per ogni reindirizzamento, un codice di stato HTTP definito può essere restituito al client per definire la natura del reindirizzamento.
Usage details (Dettagli di utilizzo)
I reindirizzamenti URL sfruttano il filtro della regola RequestRedirect come definito dall'API del gateway Kubernetes.
Reindirizzamento
Un reindirizzamento imposta il codice di stato della risposta restituito ai client per comprendere lo scopo del reindirizzamento. Sono supportati i tipi di reindirizzamento seguenti:
- 301 (spostato in modo permanente): indica che alla risorsa di destinazione viene assegnato un nuovo URI permanente. Eventuali riferimenti futuri a questa risorsa usano uno degli URI racchiusi. Usare il codice di stato 301 per il reindirizzamento da HTTP a HTTPS.
- 302 (Trovato): indica che la risorsa di destinazione è temporaneamente in un URI diverso. Poiché il reindirizzamento può cambiare in alcuni casi, il client deve continuare a usare l'URI della richiesta effettivo per le richieste future.
Funzionalità di reindirizzamento
Il reindirizzamento del protocollo viene comunemente usato per indicare al client di passare da uno schema di traffico non crittografato al traffico, ad esempio il reindirizzamento da HTTP a HTTPS.
Il reindirizzamento del nome host corrisponde al nome di dominio completo (FQDN) della richiesta. Questo è comunemente osservato nel reindirizzamento di un nome di dominio precedente a un nuovo nome di dominio, come
contoso.comafabrikam.com.Il reindirizzamento del percorso ha due varianti diverse:
prefixefull.- Il tipo di reindirizzamento
Prefixreindirizzerà tutte le richieste a partire da un valore definito. Ad esempio, un prefisso di /shop corrisponde a /shop ed a qualsiasi testo che segue. Ad esempio, /shop, /shop/completamento della transazione e /shop/item-a reindirizza tutti a /shop. - Il tipo di reindirizzamento
Fullcorrisponde a un valore esatto. Ad esempio, /shop reindirizza a /store, ma /shop/completamento della transazione non reindirizza a /store.
- Il tipo di reindirizzamento
Nella figura seguente viene illustrato un esempio di richiesta destinata a contoso.com/summer-promotion reindirizzata a contoso.com/shop/category/5. Inoltre, una seconda richiesta avviata per contoso.com tramite protocollo HTTP restituisce un reindirizzamento per avviare una nuova connessione alla relativa variante https.
Prerequisiti
Se si segue la strategia di distribuzione BYO, assicurarsi di configurare l'Application Gateway per le risorse dei contenitori e il controller ALB (componente aggiuntivo o Helm).
Se si segue la strategia di distribuzione gestita di ALB, assicurarsi di eseguire il provisioning del controller ALB (componente aggiuntivo o Helm) e di eseguire il provisioning delle risorse del gateway applicazione per contenitori tramite la risorsa personalizzata ApplicationLoadBalancer.
Distribuire un'applicazione HTTP di esempio:
Applicare il file deployment.yaml seguente nel cluster per distribuire un certificato TLS di esempio per illustrare le funzionalità di reindirizzamento.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yamlQuesto comando crea gli elementi seguenti nel cluster:
- uno spazio dei nomi denominato
test-infra - un servizio denominato
echonello spazio dei nomitest-infra - una distribuzione denominata
echonello spazio dei nomitest-infra - un segreto denominato
listener-tls-secretnello spazio dei nomitest-infra
- uno spazio dei nomi denominato
Distribuire le risorse necessarie di IngressExtension
Creare una risorsa IngressExtension per gestire il reindirizzamento da HTTP a HTTPS per
contoso.comkubectl apply -f - <<EOF apiVersion: alb.networking.azure.io/v1 kind: IngressExtension metadata: name: http-to-https namespace: test-infra spec: rules: - host: contoso.com requestRedirect: statusCode: 301 scheme: https EOFCreare una risorsa IngressExtension per gestire il reindirizzamento basato sul percorso da
contoso.com/summer-promotionacontoso.com/shop/category/5.kubectl apply -f - <<EOF apiVersion: alb.networking.azure.io/v1 kind: IngressExtension metadata: name: summer-promotion-redirect namespace: test-infra spec: rules: - host: contoso.com requestRedirect: statusCode: 302 path: type: ReplaceFullPath replaceFullPath: /shop/category/5 EOF
Distribuire le risorse Ingress richieste
Creare la prima risorsa In ingresso per l'ascolto delle richieste HTTPS.
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-https namespace: test-infra annotations: alb.networking.azure.io/alb-namespace: alb-test-infra alb.networking.azure.io/alb-name: alb-test alb.networking.azure.io/alb-frontend: ingress-fe spec: ingressClassName: azure-alb-external tls: - hosts: - contoso.com secretName: listener-tls-secret rules: - host: contoso.com http: paths: - path: / pathType: Prefix backend: service: name: echo port: number: 80 EOFCreare la seconda risorsa In ingresso per l'ascolto sulla porta 80 e il reindirizzamento a HTTPS.
kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-http namespace: test-infra annotations: alb.networking.azure.io/alb-namespace: alb-test-infra alb.networking.azure.io/alb-name: alb-test alb.networking.azure.io/alb-frontend: ingress-fe alb.networking.azure.io/alb-ingress-extension: http-to-https spec: ingressClassName: azure-alb-external rules: - host: contoso.com http: paths: - path: / pathType: Prefix backend: service: name: echo port: number: 80 EOFCreare una terza risorsa In ingresso per l'ascolto sulla porta 80 e 443 per
contoso.com/summer-promotione il reindirizzamento acontoso.com/shop/category/5.kubectl apply -f - <<EOF apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-summer-promotion-redirect namespace: test-infra annotations: alb.networking.azure.io/alb-namespace: alb-test-infra alb.networking.azure.io/alb-name: alb-test alb.networking.azure.io/alb-frontend: ingress-fe alb.networking.azure.io/alb-ingress-extension: summer-promotion-redirect spec: ingressClassName: azure-alb-external tls: - hosts: - contoso.com secretName: listener-tls-secret rules: - host: contoso.com http: paths: - path: /summer-promotion pathType: Prefix backend: service: name: ignored-for-redirect port: number: 80 EOF
Nota
Quando il controller ALB crea l'Application Gateway per le risorse dei contenitori in Azure Resource Manager, usa la convenzione di denominazione seguente per una risorsa frontend: fe-<eight randomly generated characters>.
Per modificare il nome della risorsa front-end creata in Azure, valutare la possibilità di seguire la strategia di distribuzione BYO.
Per ciascuna risorsa In ingresso, verificare che lo stato sia valido, che il listener sia Programmato e che venga assegnato un indirizzo alla risorsa in ingresso. Per tutte e tre le risorse In ingresso, in questo esempio dovrebbe essere visualizzato lo stesso nome host.
kubectl get ingress ingress-https -n test-infra -o yaml
Output di esempio della creazione corretta della risorsa In ingresso.
status:
loadBalancer:
ingress:
- hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
ports:
- port: 443
protocol: TCP
Testare l'accesso all'applicazione
A questo punto, è possibile inviare traffico all'applicazione di esempio tramite l’FQDN assegnato al front-end. Usare il comando seguente per ottenere il nome di dominio completo (FQDN).
fqdn=$(kubectl get ingress ingress-http -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Quando si specifica l'indicatore del nome del server usando il comando curl, http://contoso.com deve restituire una risposta del Gateway applicativo per contenitori con un'intestazione location che definisce un reindirizzamento 301 a https://contoso.com.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com/ -v
Attraverso la risposta, dovremmo vedere quanto segue:
* 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
Quando si specifica l'indicatore del nome del server usando il comando curl, il Gateway applicativo per contenitori https://contoso.com/summer-promotion deve restituire un reindirizzamento 302 a https://contoso.com/shop/category/5.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:443:$fqdnIp https://contoso.com/summer-promotion -v
Attraverso la risposta, dovremmo vedere quanto segue:
> 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
Congratulazioni, è stato installato il controller ALB, è stata distribuita un'applicazione back-end e è stata usata l'API Ingress per configurare sia un reindirizzamento HTTP a HTTPS che il reindirizzamento basato sul percorso a richieste client specifiche.