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.
Diese Anleitung hilft beim Einrichten einer Beispielanwendung, die die folgenden Ressourcen aus der Gateway-API verwendet. Es sind Schritte vorgesehen:
- Erstellen einer Gateway-Ressource mit einem HTTPS-Listener.
- Erstellen einer HTTPRoute-Ressource, die auf einen Back-End-Dienst verweist.
- Erstellen Sie eine FrontendTLSPolicy-Ressource mit einem Zertifizierungsstellenzertifikat.
Hintergrund
Mutual Transport Layer Security (MTLS) ist ein zertifikatbasierter Prozess, um die Kommunikation zu verschlüsseln und Clients für einen Dienst zu identifizieren. Auf diese Weise kann Application Gateway für Container seinen Sicherheitsstatus weiter erhöhen, indem nur Verbindungen von authentifizierten Geräten als vertrauenswürdig angesehen werden.
Dies wird in der folgenden Abbildung veranschaulicht:
Der Flow eines gültigen Clientzertifikats zeigt einen Client, der dem Front-End von Application Gateway für Container ein Zertifikat präsentiert. Application Gateway für Container stellt fest, dass das Zertifikat gültig ist, und leitet die Anforderung an das Back-End-Ziel weiter. Die Antwort wird letztendlich an den Client zurückgegeben.
Der Flow eines gesperrten Clientzertifikats zeigt einen Client, der dem Front-End von Application Gateway für Container ein gesperrtes Zertifikat präsentiert. Application Gateway für Container stellt fest, dass das Zertifikat ungültig ist und verhindert, dass die Anforderung an den Client weitergeleitet wird. Der Client wird eine „HTTP 400 ungültige Anforderung“ und einen entsprechenden Grund erhalten.
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 Ihrem Cluster an, um eine Beispielwebanwendung zu erstellen und Beispielgeheimnisse bereitzustellen, um die gegenseitige Front-End-Authentifizierung (mTLS) 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.yamlMit diesem Befehl wird Folgendes in Ihrem Cluster erstellt:
- Ein Namespace namens
test-infra - Ein Dienst, der im Namespace
echoalstest-infrabezeichnet wird - Eine Bereitstellung, die im Namespace
echoalstest-infrabezeichnet wird - Ein Geheimnis, das im Namespace
listener-tls-secretalstest-infrabezeichnet wird
- Ein Namespace namens
Generieren von Zertifikaten
In diesem Beispiel werden wir ein Stammzertifikat erstellen und ein Clientzertifikat aus dem Stamm ausstellen. Wenn Sie bereits über ein Stammzertifikat und ein Clientzertifikat verfügen, können Sie diese Schritte überspringen.
Generieren eines privaten Schlüssels für das Stammzertifikat
openssl genrsa -out root.key 2048
Generieren eines Stammzertifikats
openssl req -x509 -new -nodes -key root.key -sha256 -days 1024 -out root.crt -subj "/C=US/ST=North Dakota/L=Fargo/O=Contoso/CN=contoso-root"
Generieren eines privaten Schlüssels für das Clientzertifikat
openssl genrsa -out client.key 2048
Erstellen einer Zertifikatsignaturanforderung für das Clientzertifikat
openssl req -new -key client.key -out client.csr -subj "/C=US/ST=North Dakota/L=Fargo/O=Contoso/CN=contoso-client"
Generieren eines Clientzertifikats, das vom Stammzertifikat signiert ist
openssl x509 -req -in client.csr -CA root.crt -CAkey root.key -CAcreateserial -out client.crt -days 1024 -sha256
Bereitstellen der erforderlichen Gateway-API-Ressourcen
Erstellen eines Gateways
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: mtls-listener
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Same
tls:
mode: Terminate
certificateRefs:
- kind : Secret
group: ""
name: listener-tls-secret
EOF
Hinweis
Wenn der ALB-Controller das Anwendungsgateway für Containerressourcen in Azure Resource Manager erstellt, verwendet er die folgende Benennungskonvention für eine Frontend-Ressource: fe-<eight randomly generated characters>
Wenn Sie den Namen der in Azure erstellten Frontend-Ressource ändern möchten, sollten Sie die Bring-Your-Own-Bereitstellungsstrategie beachten.
Nachdem die Gatewayressource erstellt wurde, stellen Sie sicher, dass der Status gültig ist, dass der Listener programmiert ist und dem Gateway eine Adresse zugewiesen wird.
kubectl get gateway gateway-01 -n test-infra -o yaml
Beispielausgabe einer erfolgreichen Gatewayerstellung:
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
Nachdem das Gateway erstellt wurde, erstellen Sie eine HTTPRoute-Ressource.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: https-route
namespace: test-infra
spec:
parentRefs:
- name: gateway-01
rules:
- backendRefs:
- name: echo
port: 80
EOF
Nachdem die HTTPRoute-Ressource erstellt wurde, stellen Sie sicher, dass die Route Akzeptiert ist und die Ressource „Application Gateway für Container“ programmiert ist.
kubectl get httproute https-route -n test-infra -o yaml
Überprüfen Sie, ob der Status der Ressource „Application Gateway for Containers“ erfolgreich aktualisiert wurde.
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
Erstellen Sie ein Kubernetes-Geheimnis mithilfe von kubectl, das die Zertifikatkette zum Clientzertifikat enthält.
kubectl create secret generic ca.bundle -n test-infra --from-file=ca.crt=root.crt
Erstellen einer FrontendTLSPolicy
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: FrontendTLSPolicy
metadata:
name: mtls-policy
namespace: test-infra
spec:
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: gateway-01
namespace: test-infra
sectionNames:
- mtls-listener
default:
verify:
caCertificateRef:
name: ca.bundle
group: ""
kind: Secret
namespace: test-infra
EOF
Nachdem das FrontendTLSPolicy-Objekt erstellt wurde, überprüfen Sie den Status auf dem Objekts, um sicherzustellen, dass die Richtlinie gültig ist:
kubectl get frontendtlspolicy mtls-policy -n test-infra -o yaml
Beispielausgabe einer gültigen FrontendTLSPolicy-Objekterstellung:
status:
conditions:
- lastTransitionTime: "2023-06-29T16:54:42Z"
message: Valid FrontendTLSPolicy
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
Testen des Zugriffs auf die Anwendung
Jetzt können Sie über den FQDN, der dem Front-End zugewiesen ist, einigen Datenverkehr an die Beispielanwendung senden. Verwenden Sie den folgenden Befehl, um den FQDN abzurufen:
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Durchführen von „curl“ für den FQDN Ihres Frontends ohne das Clientzertifikat.
curl --insecure https://$fqdn/
Beachten Sie die Warnmeldungen, dass ein Zertifikat erforderlich ist.
curl: (56) OpenSSL SSL_read: OpenSSL/1.1.1k: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0
Sperrt den FQDN, der das generierte Clientzertifikat darstellt.
curl --cert client.crt --key client.key --insecure https://$fqdn/
Beachten Sie, dass die Antwort vom Back-End-Dienst hinter Application Gateway für Container stammt.
Herzlichen Glückwunsch, Sie haben ALB Controller installiert, eine Back-End-Anwendung bereitgestellt, über ein Clientzertifikat authentifiziert und den Datenverkehr von Ihrem Back-End-Dienst über Application Gateway für Container zurückgegeben.