Kapsayıcılar için Application Gateway ile Arka Plan MTLS - Gateway API'si

Bu belge, Ağ Geçidi API'sinden aşağıdaki kaynakları kullanan örnek bir uygulama ayarlamanıza yardımcı olur. Aşağıdaki adımlar şunlar için verilmiştir:

  • Bir HTTPS dinleyicisi ile bir Ağ Geçidi kaynağı oluşturun.
  • Arka uç hizmetine başvuran bir HTTPRoute kaynağı oluşturun.
  • HTTPRoute'ta başvuruda bulunan arka uç hizmeti için bir istemci ve CA sertifikasına sahip bir BackendTLSPolicy kaynağı oluşturun.

Arka plan

Karşılıklı Aktarım Katmanı Güvenliği (MTLS), iletişimleri şifrelemek ve hizmet istemcilerini tanımlamak için sertifikaları kullanan bir işlemdir. Bu, arka uç iş yüklerinin yalnızca kimliği doğrulanmış cihazlardan gelen bağlantılara güvenerek güvenlik duruşunu daha da artırmasını sağlar.

Aşağıdaki şekle bakın.

Kapsayıcılar için Uygulama Geçidi'nin arka uç MTLS işlemini gösteren bir diyagram.

Önkoşullar

  1. BYO dağıtım stratejisini izliyorsanız Kapsayıcılar için Application Gateway kaynaklarınızı ve ALB Denetleyicisi'ni (Eklenti veya Helm) ayarladığınızdan emin olun.

  2. ALB yönetilen dağıtım stratejisini izliyorsanız, ALB Denetleyicinizi (Eklenti veya Helm) ve ApplicationLoadBalancer özel kaynağı aracılığıyla Kapsayıcılar için Application Gateway kaynaklarını sağladığınızdan emin olun.

  3. Örnek HTTP uygulamasını dağıtma:

    Örnek bir web uygulaması oluşturmak ve arka uç karşılıklı kimlik doğrulamasını (mTLS) göstermek için örnek gizli dizileri dağıtmak için kümenize aşağıdaki deployment.yaml dosyasını uygulayın.

    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
    

    Bu komut kümenizde aşağıdakileri oluşturur:

    • "test-infra adlı bir ad alanı"
    • mtls-app isim alanındaki test-infra adlı bir hizmet
    • mtls-app ad alanında test-infra adlı bir dağıtım
    • mtls-app-nginx-cm ad alanında test-infra adlı bir yapılandırma eşlemesi
    • backend.com ad alanında frontend.com, gateway-client-cert, ca.bundle ve test-infra adı verilen dört sır

Gerekli Ağ Geçidi API kaynaklarını dağıtın.

Ağ geçidi oluşturma

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

Uyarı

ALB Denetleyicisi Azure Resource Manager'da Kapsayıcılar için Application Gateway kaynaklarını oluşturduğunda, bir ön uç kaynağı için aşağıdaki adlandırma kuralını kullanır: fe-<eight randomly generated characters>.

Azure'da oluşturulan ön uç kaynağının adını değiştirmek istiyorsanız , kendi dağıtım stratejinizi getirin seçeneğini izleyin.

Ağ geçidi kaynağı oluşturulduktan sonra durumun geçerli olduğundan, dinleyicinin Programlandığından ve ağ geçidine bir adres atandığından emin olun.

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

Başarılı ağ geçidi oluşturma işleminin örnek çıktısı:

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

Ağ geçidi oluşturulduktan sonra bir HTTPRoute kaynağı oluşturun.

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

HTTPRoute kaynağı oluşturulduktan sonra, yolun Kabul Edildi ve Kapsayıcılar için Application Gateway kaynağının Programlandığıdan emin olun.

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

Kapsayıcılar için Application Gateway kaynağının durumunun başarıyla güncelleştirildiğinden emin olun.

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

Arka Uç TLSPolicy Oluştur

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

BackendTLSPolicy nesnesi oluşturulduktan sonra, ilkenin geçerli olduğundan emin olmak için nesnenin durumunu denetleyin:

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

Geçerli BackendTLSPolicy nesne oluşturma örneği:

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

Uygulamaya erişimi test etme

Artık ön uçta atanan FQDN aracılığıyla örnek uygulamamıza trafik göndermeye hazırız. FQDN'yi almak için aşağıdaki komutu kullanın:

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

Bu FQDN'nin kümelenmesi, HTTPRoute'ta yapılandırıldığı gibi arka uçtan yanıt döndürmelidir.

curl --insecure https://$fqdn/

Tebrikler, ALB Denetleyicisi'ni yüklediniz, bir arka uç uygulaması dağıttınız ve kapsayıcılar için Application Gateway'e giriş yoluyla trafiği uygulamaya yönlendirdiniz.