Dela via


Serverdels-MTLS med Application Gateway för containrar – Gateway-API

Det här dokumentet hjälper dig att konfigurera ett exempelprogram som använder följande resurser från Gateway-API:et. Här är steg för att:

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 serverdelsarbetsbelastningar att ytterligare öka sin säkerhetsstatus genom att endast lita på anslutningar från autentiserade enheter.

Se följande bild:

Ett diagram som visar Application Gateway for Containers-serverdelens MTLS-process.

Förutsättningar

  1. Om du följer BYO-distributionsstrategin, säkerställer du att du har konfigurerat Application Gateway för containrar och ALB Controller.

  2. Om du följer ALB-strategin för hanterad distribution, se till att du etablerar din ALB-styrenhet och etablerar resurser för Application Gateway för containrar via den anpassade resursen ApplicationLoadBalancer.

  3. Distribuera ett 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 serverdelsautentisering (mTLS).

    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
    

    Det här kommandot skapar följande i klustret:

    • Ett namnområde med namnet test-infra
    • En tjänst kallad mtls-app i test-infra-namnområdet
    • En distribution som kallas mtls-app i test-infra namnrymd
    • En konfigurationskarta med namnet mtls-app-nginx-cm i test-infra namnområdet
    • Fyra hemligheter med namnet backend.com, frontend.com, gateway-client-certoch ca.bundle i test-infra namnområdet

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: https-listener
    port: 443
    protocol: HTTPS
    allowedRoutes:
      namespaces:
        from: Same
    tls:
      mode: Terminate
      certificateRefs:
      - kind : Secret
        group: ""
        name: frontend.com
EOF

Anmärkning

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å lyckad skapande av gateway:

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: mtls-app
      port: 443
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 BackendTLS Policy

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

När backendTLSPolicy-objektet har skapats kontrollerar du objektets status för att säkerställa att principen är giltig:

kubectl get backendtlspolicy -n test-infra mtls-app-tls-policy -o yaml

Exempel på utdata från giltigt skapande av BackendTLSPolicy-objekt:

status:
  conditions:
  - lastTransitionTime: "2023-06-29T16:54:42Z"
    message: Valid BackendTLSPolicy
    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}')

Genom att använda curl-kommandot på detta FQDN bör svar från serverdelen returneras enligt inställningarna på HTTPRoute.

curl --insecure https://$fqdn/

Grattis, du har installerat ALB Controller, distribuerat en backend-applikation och dirigerat trafik till applikationen via ingressen på Application Gateway för containrar.