Udostępnij za pomocą


Usługa MTLS zaplecza 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. Podano kroki, aby:

  • Utwórz zasób Gateway z jednym odbiornikiem HTTPS.
  • Utwórz zasób HTTPRoute , który odwołuje się do usługi zaplecza.
  • Utwórz zasób BackendTLSPolicy z certyfikatem klienta i urzędu certyfikacji dla usługi zaplecza, do którego odwołuje się usługa HTTPRoute.

Kontekst

Mutual Transport Layer Security (MTLS) to proces oparty na certyfikatach szyfrowania komunikacji i identyfikowania klientów w usłudze. Dzięki temu obciążenia zaplecza mogą dodatkowo zwiększyć poziom zabezpieczeń, ufając tylko połączeniom z uwierzytelnionymi urządzeniami.

Zobacz następującą ilustrację:

Diagram przedstawiający proces MTLS zaplecza usługi Application Gateway for Containers.

Wymagania wstępne

  1. Jeśli stosujesz strategię wdrażania BYO, upewnij się, że skonfigurujesz Application Gateway dla zasobów kontenerów oraz kontroler ALB.

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

  3. Wdróż przykładową aplikację HTTP:

    Zastosuj następujący plik deployment.yaml w Twoim klastrze, aby utworzyć przykładową aplikację internetową i wdrożyć przykładowe sekrety w celu zademonstrowania wzajemnego uwierzytelniania zaplecza (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
    

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

    • Przestrzeń nazw o nazwie test-infra
    • Jedna usługa nazywana mtls-app w przestrzeni nazw test-infra
    • Wdrożenie o nazwie mtls-app w przestrzeni nazw test-infra
    • Jedna mapa konfiguracyjna w przestrzeni nazw test-infra o nazwie mtls-app-nginx-cm
    • Cztery sekrety o nazwie backend.com, frontend.com, gateway-client-cert i ca.bundle w przestrzeni nazw test-infra

Wdróż wymagane zasoby Gateway API

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: frontend.com
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, nasłuchiwacz jest zaprogramowany, a do bramy przypisano adres.

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

Przykładowe dane wyjściowe pomyślnego utworzenia bramy:

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

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: mtls-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 stan zasobu 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: 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

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

kubectl get backendtlspolicy -n test-infra mtls-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 wysłać ruch do naszej przykładowej aplikacji za pośrednictwem FQDN przypisanego do frontend. Użyj następującego polecenia, aby uzyskać 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.