Udostępnij za pomocą


Odciążanie SSL przy użyciu Application Gateway dla kontenerów — API Gateway

Ten dokument ułatwia skonfigurowanie przykładowej aplikacji korzystającej z następujących zasobów Gateway API. Podano kroki, aby:

  • Utwórz zasób Gateway z jednym odbiornikiem HTTPS.
  • Utwórz usługę HTTPRoute odwołującą się do usługi zaplecza.

Kontekst

Usługa Application Gateway dla kontenerów umożliwia odciążanie protokołu SSL w celu uzyskania lepszej wydajności zaplecza. Zobacz następujący przykładowy scenariusz:

Rysunek przedstawiający odciążanie protokołu SSL za pomocą usługi Application Gateway for Containers.

Wymagania wstępne

  1. Jeśli wykonasz strategię wdrażania BYO, upewnij się, że skonfigurujesz usługę Application Gateway dla zasobów kontenerów i kontrolera ALB

  2. Jeśli stosujesz strategię wdrażania zarządzanego przez ALB, upewnij się, że za pośrednictwem niestandardowego zasobu ApplicationLoadBalancer zaprovisionujesz kontroler ALB oraz zasoby Application Gateway for Containers.

  3. Wdróż przykładową aplikację HTTPS Zastosuj następujący plik deployment.yaml w klastrze, aby utworzyć przykładową aplikację internetową w celu zademonstrowania odciążania protokołu TLS/SSL.

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

    To polecenie tworzy w klastrze następujące elementy:

    • przestrzeń nazw o nazwie test-infra
    • jedna usługa o nazwie echo w przestrzeni nazw test-infra
    • jedno wdrożenie nazwane echo w przestrzeni nazw test-infra
    • jeden sekret nazywany listener-tls-secret w przestrzeni nazw test-infra

Wdróż wymagane zasoby Gateway API

  1. Tworzenie bramy

    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
    

Uwaga / Notatka

Gdy kontroler usługi ALB tworzy zasoby usługi Application Gateway for Containers w usłudze Azure Resource Manager, używa następującej konwencji nazewnictwa dla zasobu frontonu: fe-<eight randomly generated characters>.

Jeśli chcesz zmienić nazwę zasobu interfejsu frontowego utworzonego w Azure, rozważ zastosowanie strategii wdrożenia 'bring-your-own'.

Po utworzeniu zasobu bramy upewnij się, że stan jest prawidłowy, odbiornik jest zaprogramowany, a adres jest przypisany do bramy.

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

Przykładowy wynik pomyślnie utworzonej bramy.

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

Po utworzeniu bramy utwórz zasób httpRoute.

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

Po utworzeniu zasobu usługi HTTPRoute upewnij się, że trasa jest zaakceptowana , a zasób Application Gateway for Containers jest zaprogramowany.

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

Sprawdź, czy zasób usługi Application Gateway for Containers został pomyślnie zaktualizowany.

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

Testowanie dostępu do aplikacji

Teraz jesteśmy gotowi wysłać ruch do naszej przykładowej aplikacji za pośrednictwem FQDN przypisanego do frontend. Użyj następującego polecenia, aby uzyskać pełną nazwę domeny (FQDN).

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

Polecenie curl dla tej nazwy FQDN powinno zwrócić odpowiedzi z zaplecza na podstawie konfiguracji dla HTTPRoute.

curl --insecure https://$fqdn/

Gratulacje, zainstalowano ALB Controller, wdrożono aplikację zaplecza i skierowano ruch do aplikacji za pośrednictwem Application Gateway for Containers.