Läs på engelska

Dela via


TLS från slutpunkt till slutpunkt 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. Steg tillhandahålls för att:

Bakgrund

Application Gateway för containrar möjliggör TLS från slutpunkt till slutpunkt för bättre sekretess och säkerhet. I den här designen krypteras trafiken mellan klienten och en Application Gateway för containrars klientdel och trafik som skickas från Application Gateway för containrar till serverdelsmålet krypteras. Se följande exempelscenario:

En bild som visar TLS från slutpunkt till slutpunkt med Application Gateway för containrar.

Förutsättningar

  1. Om du följer BYO-distributionsstrategin kontrollerar du att du konfigurerar application gateway för containrar-resurser och ALB-styrenhet

  2. Om du följer den hanterade distributionsstrategin för ALB kontrollerar du att du etablerar ALB-styrenheten och application gatewayen för containrar via den anpassade resursen ApplicationLoadBalancer.

  3. Distribuera HTTPS-exempelprogrammet Tillämpa följande deployment.yaml-fil på klustret för att skapa ett exempelwebbprogram för att demonstrera TLS/SSL-avlastning.

    Bash
    kubectl apply -f https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/refs/heads/main/articles/application-gateway/for-containers/examples/https-scenario/end-to-end-tls/deployment.yaml
    

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

    • ett namnområde med namnet test-infra
    • en tjänst som anropas https-app test-infra i namnområdet
    • en distribution som anropas https-app i test-infra namnområdet
    • en konfigurationskarta som heter https-app-cm i test-infra namnområdet
    • en hemlighet som heter contoso.com i test-infra namnområdet
    • en hemlighet som heter contoso.xyz i test-infra namnområdet

Distribuera de gateway-API-resurser som krävs

  1. Skapa en gateway

    Bash
    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: contoso.com
    EOF
    

Anteckning

När ALB-styrenheten skapar Application Gateway for Containers-resurser i ARM använder den följande namngivningskonvention för en klientdelsresurs: fe-8< slumpmässigt genererade tecken>

Om du vill ändra namnet på klientdelen som skapats i Azure kan du överväga att följa din egen distributionsstrategi.

När gatewayresursen skapas kontrollerar du att statusen är giltig, att lyssnaren är programmerad och att en adress har tilldelats till gatewayen.

Bash
kubectl get gateway gateway-01 -n test-infra -o yaml

Exempel på att gatewayen har skapats.

YAML
status:
  addresses:
  - type: Hostname
    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.

Bash
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: https-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.

Bash
kubectl get httproute https-route -n test-infra -o yaml

Kontrollera att Application Gateway for Containers-resursen har uppdaterats.

YAML
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 BackendTLSPolicy

Bash
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: BackendTLSPolicy
metadata:
  name: https-app-tls-policy
  namespace: test-infra
spec:
  targetRef:
    group: ""
    kind: Service
    name: https-app
    namespace: test-infra
  default:
    sni: contoso.xyz
    ports:
    - port: 443
EOF

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

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

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

YAML
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.

Bash
fqdn=$(kubectl get gateway gateway-01 -n test-infra -o jsonpath='{.status.addresses[0].value}')

Curling detta FQDN bör returnera svar från serverdelen enligt konfigurationen på HTTPRoute.

Bash
fqdnIp=$(dig +short $fqdn)
curl -k --resolve contoso.com:443:$fqdnIp https://contoso.com --insecure

Följande resultat bör visas:

Hello world!

Grattis, du har installerat ALB Controller, distribuerat ett serverdelsprogram och dirigerat trafik till programmet via ingressen på Application Gateway för containrar.