Back-end MTLS met Application Gateway for Containers - Gateway-API
Dit document helpt bij het instellen van een voorbeeldtoepassing die gebruikmaakt van de volgende resources uit de Gateway-API. Er worden stappen gegeven voor:
- Maak een gatewayresource met één HTTPS-listener.
- Maak een HTTPRoute-resource die verwijst naar een back-endservice.
- Maak een BackendTLSPolicy-resource met een client- en CA-certificaat voor de back-endservice waarnaar wordt verwezen in de HTTPRoute.
Achtergrond
Mutual Transport Layer Security (MTLS) is een proces dat afhankelijk is van certificaten voor het versleutelen van communicatie en het identificeren van clients voor een service. Hierdoor kunnen back-endworkloads het beveiligingspostuur verder verhogen door alleen verbindingen van geverifieerde apparaten te vertrouwen.
Zie de volgende afbeelding:
Vereisten
Als u de BYO-implementatiestrategie volgt, moet u ervoor zorgen dat u uw Application Gateway for Containers-resources en DE ALB-controller instelt.
Als u de beheerde IMPLEMENTATIEstrategie van ALB volgt, moet u ervoor zorgen dat u uw ALB-controller inricht en de Application Gateway for Containers-resources inricht via de aangepaste applicationLoadBalancer-resource.
Voorbeeld-HTTP-toepassing implementeren:
Pas het volgende bestand deployment.yaml toe op uw cluster om een voorbeeldwebtoepassing te maken en voorbeeldgeheimen te implementeren om wederzijdse back-endverificatie (mTLS) te demonstreren.
kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/end-to-end-ssl-with-backend-mtls/deployment.yaml
Met deze opdracht maakt u het volgende op uw cluster:
- Een naamruimte met de naam
test-infra
- Eén service die wordt aangeroepen
mtls-app
in detest-infra
naamruimte - Eén implementatie die wordt aangeroepen
mtls-app
in detest-infra
naamruimte - Eén configuratietoewijzing die wordt aangeroepen
mtls-app-nginx-cm
in detest-infra
naamruimte - Vier geheimen met de naam
backend.com
,frontend.com
enca.bundle
gateway-client-cert
in detest-infra
naamruimte
- Een naamruimte met de naam
De vereiste gateway-API-resources implementeren
Een gateway maken
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: https-listener
port: 443
protocol: HTTPS
allowedRoutes:
namespaces:
from: Same
tls:
mode: Terminate
certificateRefs:
- kind : Secret
group: ""
name: frontend.com
EOF
Notitie
Wanneer de ALB-controller de Application Gateway for Containers-resources in ARM maakt, wordt de volgende naamconventie gebruikt voor een front-endresource: fe-8< willekeurig gegenereerde tekens>
Als u de naam van de front-end die in Azure is gemaakt, wilt wijzigen, kunt u overwegen om uw eigen implementatiestrategie te volgen.
Zodra de gatewayresource is gemaakt, controleert u of de status geldig is, wordt de listener geprogrammeerd en wordt er een adres toegewezen aan de gateway.
kubectl get gateway gateway-01 -n test-infra -o yaml
Voorbeelduitvoer van geslaagde gateway maken:
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
Zodra de gateway is gemaakt, maakt u een HTTPRoute-resource.
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: mtls-app
port: 443
EOF
Zodra de HTTPRoute-resource is gemaakt, controleert u of de route wordt geaccepteerd en of de Application Gateway for Containers-resource is geprogrammeerd.
kubectl get httproute https-route -n test-infra -o yaml
Controleer of de status van de Application Gateway for Containers-resource is bijgewerkt.
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
Een BackendTLSPolicy maken
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: BackendTLSPolicy
metadata:
name: mtls-app-tls-policy
namespace: test-infra
spec:
targetRef:
group: ""
kind: Service
name: mtls-app
namespace: test-infra
default:
sni: backend.com
ports:
- port: 443
clientCertificateRef:
name: gateway-client-cert
group: ""
kind: Secret
verify:
caCertificateRef:
name: ca.bundle
group: ""
kind: Secret
subjectAltName: backend.com
EOF
Zodra het object BackendTLSPolicy is gemaakt, controleert u de status van het object om ervoor te zorgen dat het beleid geldig is:
kubectl get backendtlspolicy -n test-infra mtls-app-tls-policy -o yaml
Voorbeelduitvoer van geldige back-endTLSPolicy-object maken:
status:
conditions:
- lastTransitionTime: "2023-06-29T16:54:42Z"
message: Valid BackendTLSPolicy
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
Toegang tot de toepassing testen
Nu zijn we klaar om verkeer naar onze voorbeeldtoepassing te verzenden, via de FQDN die is toegewezen aan de front-end. Gebruik de volgende opdracht om de FQDN op te halen:
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')
Deze FQDN moet antwoorden retourneren van de back-end, zoals geconfigureerd op de HTTPRoute.
curl --insecure https://$fqdn/
Gefeliciteerd, u hebt EEN ALB-controller geïnstalleerd, een back-endtoepassing geïmplementeerd en verkeer naar de toepassing gerouteerd via het toegangsbeheerobject op Application Gateway for Containers.