Share via


SSL-Abladung mit Application Gateway für Container – Gateway-API

Diese Anleitung hilft beim Einrichten einer Beispielanwendung, die die folgenden Ressourcen aus der Gateway-API verwendet. Es sind Schritte vorgesehen:

  • Erstellen Sie eine Gateway Ressource mit einem HTTPS-Listener.
  • Erstellen einer HTTPRoute, die auf einen Back-End-Dienst verweist.

Hintergrund

Application Gateway für Container ermöglicht die SSL-Abladung zum Erzielen einer besseren Back-End-Leistung. Sehen Sie sich folgendes Beispielszenario an:

Abbildung des SSL-Offloadings mit dem Application Gateway for Containers.

Voraussetzungen

  1. Wenn Sie die BYO-Bereitstellungsstrategie befolgen, stellen Sie sicher, dass Sie Ihre Application Gateway für Container-Ressourcen und Ihren ALB Controller einrichten

  2. Wenn Sie die vom ALB verwaltete Bereitstellungsstrategie befolgen, stellen Sie sicher, dass Sie den ALB-Controller und die Application Gateway für Container-Ressourcen über die benutzerdefinierte ApplicationLoadBalancer-Ressource bereitstellen.

  3. Stellen Sie eine Beispiel-HTTPS-Anwendung bereit, indem Sie die nachstehende Datei „deployment.yaml“ auf Ihrem Cluster anwenden, um eine Beispielwebanwendung zum Veranschaulichen der TLS/SSL-Abladung zu erstellen.

    kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/https-scenario/ssl-termination/deployment.yaml
    

    Mit diesem Befehl wird Folgendes in Ihrem Cluster erstellt:

    • Ein Namespace mit dem Namen test-infra
    • ein Dienst, der im Namespace test-infra als echo bezeichnet wird
    • eine Bereitstellung, die im Namespace test-infra als echo bezeichnet wird
    • ein Geheimnis, das im Namespace test-infra als listener-tls-secret bezeichnet wird

Bereitstellen der erforderlichen Gateway-API-Ressourcen

  1. 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: https-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 die Application Gateway für Container-Ressourcen in ARM erstellt, verwendet er die folgende Benennungskonvention für eine Frontend-Ressource: „fe-<8 zufällig generierte Zeichen>“.

Wenn Sie den Namen des in Azure erstellten Frontends ändern möchten, sollten Sie die BYO-Bereitstellungsstrategie (Bring Your Own) befolgen.

Wenn die Gatewayressource erstellt wird, 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: 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

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 die Application Gateway for Containers-Ressource 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

Testen des Zugriffs auf die Anwendung

Jetzt können wir über den FQDN, der dem Frontend zugewiesen ist, einige Datenverkehrsdaten an unsere 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}')

Beim Curling dieses FQDN sollten Antworten aus dem Back-End entsprechend der konfigurierten HTTPRoute zurückgegeben werden.

curl --insecure https://$fqdn/

Herzlichen Glückwunsch, Sie haben ALB Controller installiert, eine Back-End-Anwendung bereitgestellt und den Datenverkehr über den Eingang des Anwendungsgateways für Container an die Anwendung weitergeleitet.