Not
Å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.
Det här dokumentet hjälper dig att konfigurera ett exempelprogram som använder följande resurser från Gateway-API:et. Steg tillhandahålls för att:
- Skapa en gatewayresurs med en HTTPS-lyssnare.
- Skapa en HTTPRoute-resurs som refererar till en serverdelstjänst.
- Skapa en FrontendTLSPolicy-resurs som har ett CA-certifikat.
Bakgrund
Mutual Transport Layer Security (MTLS) är en process som förlitar sig på certifikat för att kryptera kommunikation och identifiera klienter till en tjänst. Detta gör det möjligt för Application Gateway för containrar att ytterligare öka säkerhetsstatusen genom att endast lita på anslutningar från autentiserade enheter.
Se följande bild:
Det giltiga klientcertifikatflödet visar en klient som presenterar ett certifikat på klientdelen av Application Gateway för containrar. Application Gateway för containrar fastställer att certifikatet är giltigt och skickar begäran till serverdelsmålet. Svaret returneras slutligen till klienten.
Det återkallade klientcertifikatflödet visar en klient som presenterar ett återkallat certifikat till klientdelen av Application Gateway för containrar. Application Gateway för containrar fastställer att certifikatet inte är giltigt och förhindrar att begäran skickas till klienten. Klienten får en FELAKTIG HTTP 400-begäran och motsvarande orsak.
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 skapa ett exempelwebbprogram och distribuera exempelhemligheter för att demonstrera ömsesidig klientdelsautentisering (mTLS).
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/ssl-termination/deployment.yamlDet här kommandot skapar följande i klustret:
- Ett namnområde med namnet
test-infra - En tjänst som anropas
echotest-infrai namnområdet - En distribution som anropas
echoitest-infranamnområdet - En hemlighet som heter
listener-tls-secretitest-infranamnområdet
- Ett namnområde med namnet
Generera certifikat
I det här exemplet skapar vi ett rotcertifikat och utfärdar ett klientcertifikat från roten. Om du redan har ett rotcertifikat och ett klientcertifikat kan du hoppa över de här stegen.
Generera en privat nyckel för rotcertifikatet
openssl genrsa -out root.key 2048
Generera ett rotcertifikat
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"
Generera en privat nyckel för klientcertifikatet
openssl genrsa -out client.key 2048
Skapa en begäran om certifikatsignering för klientcertifikatet
openssl req -new -key client.key -out client.csr -subj "/C=US/ST=North Dakota/L=Fargo/O=Contoso/CN=contoso-client"
Generera ett klientcertifikat signerat av rotcertifikatet
openssl x509 -req -in client.csr -CA root.crt -CAkey root.key -CAcreateserial -out client.crt -days 1024 -sha256
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: mtls-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 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 frontend-resurs som skapats i Azure kan du överväga att följa en 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: 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-resurs.
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
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 https-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
Skapa en Kubernetes-hemlighet med kubectl som innehåller certifikatkedjan till klientcertifikatet.
kubectl create secret generic ca.bundle -n test-infra --from-file=ca.crt=root.crt
Skapa en 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
När frontendTLSPolicy-objektet har skapats kontrollerar du statusen för objektet för att säkerställa att principen är giltig:
kubectl get frontendtlspolicy mtls-policy -n test-infra -o yaml
Exempel på utdata från skapande av giltigt FrontendTLSPolicy-objekt:
status:
conditions:
- lastTransitionTime: "2023-06-29T16:54:42Z"
message: Valid FrontendTLSPolicy
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
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}')
Att köra en FQDN för din frontend utan klientcertifikatet.
curl --insecure https://$fqdn/
Observera att ett certifikat krävs för svarsaviseringar.
curl: (56) OpenSSL SSL_read: OpenSSL/1.1.1k: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0
Curla det FQDN som presenterar klientcertifikatet som genererats.
curl --cert client.crt --key client.key --insecure https://$fqdn/
Observera att svaret kommer från serverdelstjänsten bakom Application Gateway för containrar.
Grattis, du installerade ALB Controller, distribuerade ett serverdelsprogram, autentiserade via klientcertifikat och returnerade trafik från serverdelstjänsten via Application Gateway för containrar.