Udostępnij za pomocą


Kompleksowe protokoły TLS z usługą Application Gateway dla kontenerów — interfejs API bramy

Ten dokument ułatwia skonfigurowanie przykładowej aplikacji korzystającej z następujących zasobów Gateway API. Dostępne są następujące kroki:

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

Tło

Usługa Application Gateway dla kontenerów umożliwia kompleksowe szyfrowanie TLS w celu zwiększenia prywatności i bezpieczeństwa. W tym projekcie ruch między klientem a frontonem usługi Application Gateway for Containers jest szyfrowany, a ruch kierowany z usługi Application Gateway for Containers do obiektu docelowego zaplecza jest szyfrowany. Zobacz następujący przykładowy scenariusz:

Ilustracja przedstawiająca kompleksowe protokoły TLS z usługą Application Gateway dla kontenerów.

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/end-to-end-tls/deployment.yaml
    

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

    • przestrzeń nazw o nazwie test-infra
    • jedna usługa o nazwie https-app w przestrzeni nazw test-infra
    • jedno wdrożenie nazywane https-app w przestrzeni nazw test-infra
    • jedna mapa konfiguracji o nazwie https-app-cm w test-infra przestrzeni nazw
    • ** jeden sekret o nazwie contoso.com w przestrzeni nazw test-infra
    • ** jeden sekret o nazwie contoso.xyz 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: contoso.com
    EOF
    

Uwaga

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ładowe dane wyjściowe pomyślnego utworzenia 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: https-app
      port: 443
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

Utwórz BackendTLSPolicy

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

Po utworzeniu obiektu BackendTLSPolicy sprawdź stan obiektu, aby upewnić się, że zasady są prawidłowe:

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

Przykładowe dane wyjściowe prawidłowego tworzenia obiektu BackendTLSPolicy:

status:
  conditions:
  - lastTransitionTime: "2023-06-29T16:54:42Z"
    message: Valid BackendTLSPolicy
    observedGeneration: 1
    reason: Accepted
    status: "True"
    type: Accepted

Testowanie dostępu do aplikacji

Teraz jesteśmy gotowi, aby wysłać ruch sieciowy do naszej przykładowej aplikacji za pośrednictwem FQDN przypisanego do frontendu. 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.

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

Powinien zostać wyświetlony następujący wynik:

Hello world!

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