Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit Application Gateway für Container können Sie für die drei clientbasierten Aspekte einer URL – Protokoll, Hostname und Pfad – eine Umleitungsantwort zurückgeben. Für jede Umleitung kann ein definierter HTTP-Statuscode an den Client zurückgegeben werden, mit dem die Art der Umleitung definiert wird.
Nutzungsdetails
URL-Umleitungen nutzen den Filter der RequestRedirect-Regel, der von der Kubernetes-Gateway-API definiert wird.
Umleitung
Eine Umleitung legt den Antwortstatuscode fest, der an den Client zurückgegeben wird, um über den Zweck der Umleitung zu informieren. Die folgenden Umleitungstypen werden unterstützt:
- 301 (Permanent verschoben): Gibt an, dass der Zielressource ein neuer dauerhafter URI zugewiesen wird. Alle künftigen Verweise auf diese Ressource verwenden einen der beigefügten URIs. Verwenden Sie den Statuscode 301 für die HTTP-HTTPS-Umleitung.
- 302 Found (302 Gefunden) : Gibt an, dass sich die Zielressource vorübergehend unter einem anderen URI befindet. Da sich die Umleitung gelegentlich ändern kann, sollte der Client weiterhin den effektiven Anforderungs-URI für künftige Anforderungen verwenden.
Umleitungsfunktionen
Die Protokollumleitung wird häufig verwendet, damit der Client von einem Schema mit unverschlüsseltem Datenverkehr zu verschlüsseltem Datenverkehr wechselt, wie z. B. die Umleitung von HTTP zu HTTPS.
Die Hostnamenumleitung entspricht dem vollqualifizierten Domänennamen (FQDN) der Anforderung. Sie wird häufig verwendet, um einen alten Domänennamen zu einem neuen umzuleiten, wie z. B.
contoso.com
zufabrikam.com
.Bei der Pfadumleitung gibt es zwei verschiedene Varianten:
prefix
undfull
.- Der Umleitungstyp
Prefix
leitet alle Anforderungen um, die mit einem definierten Wert beginnen. Beispiel: Das Präfix „/shop“ betrifft sowohl „/shop“ als auch jeden nachfolgenden Text. So werden etwa „/shop“, „/shop/checkout“ und „shop/item-a“ jeweils zu „/shop“ umgeleitet. - Der Umleitungstyp
Full
betrifft einen exakten Wert. So kann etwa „/shop“ zu „/store“ umgeleitet werden, „shop/checkout“ jedoch nicht.
- Der Umleitungstyp
Die folgende Abbildung zeigt ein Beispiel für eine Anforderung, die an contoso.com/summer-promotion gerichtet ist und zu contoso.com/shop/category/5 umgeleitet wird. Darüber hinaus gibt eine zweite Anforderung, die über das HTTP-Protokoll an „contoso.com“ gerichtet ist, eine Umleitung zurück, um eine neue Verbindung über HTTPS zu initiieren.
Voraussetzungen
Wenn Sie der BYO-Bereitstellungsstrategie folgen, müssen Sie Ihre Application Gateway für Container-Ressourcen und den ALB-Controller einrichten.
Wenn Sie der Strategie der durch ALB verwalteten Bereitstellung folgen, müssen Sie den ALB-Controller und die Application Gateway für Container-Ressourcen über die benutzerdefinierte ApplicationLoadBalancer-Ressource bereitstellen.
Bereitstellen einer HTTP-Beispielanwendung:
Wenden Sie die folgende Datei „deployment.yaml“ auf Ihren Cluster an, um ein TLS-Beispielzertifikat bereitzustellen und die Umleitungsfunktionen zu demonstrieren.
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
Mit diesem Befehl wird Folgendes in Ihrem Cluster erstellt:
- Ein Namespace mit dem Namen
test-infra
- ein Dienst, der im Namespace
test-infra
alsecho
bezeichnet wird - eine Bereitstellung, die im Namespace
test-infra
alsecho
bezeichnet wird - ein Geheimnis, das im Namespace
test-infra
alslistener-tls-secret
bezeichnet wird
- Ein Namespace mit dem Namen
Bereitstellen der erforderlichen IngressExtension-Ressourcen
Erstellen einer IngressExtension-Ressource zum Verarbeiten der Umleitung von HTTP zu HTTPS für
contoso.com
kubectl 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 EOF
Erstellen Sie eine IngressExtension-Ressource, um eine pfadbasierte Umleitung von
contoso.com/summer-promotion
zucontoso.com/shop/category/5
zu verarbeiten.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
Bereitstellen der erforderlichen Eingangsressource
Erstellen Sie die erste Eingangsressource, um HTTPS-Anforderungen zu lauschen.
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 EOF
Erstellen Sie die zweite Eingangsressource, um Port 80 zu lauschen und zu HTTPS umzuleiten.
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 EOF
Erstellen Sie eine dritte Eingangsressource, um Port 80 und 443 für
contoso.com/summer-promotion
zu lauschen und zucontoso.com/shop/category/5
umzuleiten.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
Hinweis
Wenn der ALB-Controller die Application Gateway für Container-Ressourcen in ARM erstellt, verwendet er die folgende Benennungskonvention für eine Frontend-Ressource: „fe-<8 zufällig generierte Zeichen>“.
Wenn Sie den Namen des in Azure erstellten Frontends ändern möchten, sollten Sie die BYO-Bereitstellungsstrategie (Bring Your Own) befolgen.
Stellen Sie für jede Eingangsressource sicher, dass der Status gültig ist, der Listener programmiert ist und der Eingangsressource eine Adresse zugewiesen wird. Für alle drei Eingangsressourcen sollte in diesem Beispiel derselbe Hostname angezeigt werden.
kubectl get ingress ingress-https -n test-infra -o yaml
Beispielausgabe einer erfolgreichen Eingangserstellung.
status:
loadBalancer:
ingress:
- hostname: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzyy.alb.azure.com
ports:
- port: 443
protocol: TCP
Testen des Zugriffs auf die Anwendung
Jetzt können wir über den FQDN, der dem Frontend zugewiesen ist, einige Datenverkehrsdaten an unsere Beispielanwendung senden. Verwenden Sie den folgenden Befehl, um den FQDN abzurufen.
fqdn=$(kubectl get ingress ingress-http -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Wenn Sie den Servernamenindikator mit dem cURL-Befehl angeben, sollte http://contoso.com
eine Antwort von Application Gateway für Container mit einem location
-Header zurückgeben, der eine 301-Umleitung zu https://contoso.com
definiert.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:80:$fqdnIp http://contoso.com/ -v
Über die Antwort sollten wir Folgendes sehen:
* 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
Wenn Sie den Servernamenindikator mit dem cURL-Befehl angeben, sollte https://contoso.com/summer-promotion
eine Antwort von Application Gateway für Container mit einer 302-Umleitung zu https://contoso.com/shop/category/5
zurückgeben.
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:443:$fqdnIp https://contoso.com/summer-promotion -v
Über die Antwort sollten wir Folgendes sehen:
> 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
Herzlichen Glückwunsch! Sie haben den ALB-Controller installiert, eine Back-End-Anwendung bereitgestellt und die Eingangs-API verwendet, um sowohl eine Umleitung von HTTP zu HTTPS als auch eine pfadbasierte Umleitung zu bestimmten Clientanforderungen zu konfigurieren.