واجهة MTLS الخلفية مع بوابة التطبيق للحاويات - واجهة برمجة تطبيقات البوابة

يساعد هذا المستند في إعداد تطبيق مثال يستخدم الموارد التالية من واجهة برمجة تطبيقات البوابة. يتم توفير الخطوات إلى:

خلفية

أمان طبقة النقل المتبادل (MTLS) هي عملية تعتمد على الشهادات لتشفير الاتصالات وتحديد العملاء لخدمة ما. وهذا يمكن أحمال العمل الخلفية من زيادة وضع الأمان الخاص بها عن طريق الوثوق فقط بالاتصالات من الأجهزة المصادق عليها.

راجع الشكل التالي:

A diagram showing the Application Gateway for Containers backend MTLS process.

المتطلبات الأساسية

  1. إذا كنت تتبع استراتيجية نشر BYO، فتأكد من إعداد Application Gateway لموارد الحاويات ووحدة تحكم ALB.

  2. إذا كنت تتبع استراتيجية التوزيع المدارة ل ALB، فتأكد من توفير وحدة تحكم ALB وتوفير موارد Application Gateway for Containers عبر مورد ApplicationLoadBalancer المخصص.

  3. توزيع نموذج تطبيق HTTP:

    قم بتطبيق ملف deployment.yaml التالي على نظام المجموعة الخاص بك لإنشاء نموذج تطبيق ويب ونشر عينة من الأسرار لإظهار المصادقة المتبادلة الخلفية (mTLS).

    kubectl apply -f https://trafficcontrollerdocs.blob.core.windows.net/examples/https-scenario/end-to-end-ssl-with-backend-mtls/deployment.yaml
    

    ينشئ هذا الأمر ما يلي على نظام المجموعة:

    • مساحة اسم تسمى test-infra
    • خدمة واحدة تسمى mtls-app في test-infra مساحة الاسم
    • نشر واحد يسمى mtls-app في test-infra مساحة الاسم
    • خريطة تكوين واحدة تسمى mtls-app-nginx-cm في test-infra مساحة الاسم
    • أربعة أسرار تسمى backend.comو frontend.comgateway-client-certو و ca.bundle في test-infra مساحة الاسم

توزيع موارد واجهة برمجة تطبيقات البوابة المطلوبة

إنشاء بوابة

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

إشعار

عندما تنشئ وحدة تحكم ALB موارد بوابة التطبيق للحاويات في ARM، ستستخدم اصطلاح التسمية التالي لمورد الواجهة الأمامية: أحرف fe-8< التي تم إنشاؤها عشوائيا>

إذا كنت ترغب في تغيير اسم الواجهة الأمامية التي تم إنشاؤها في Azure، ففكر في اتباع استراتيجية إحضار التوزيع الخاصة بك.

بمجرد إنشاء مورد البوابة، تأكد من صحة الحالة، وبرمجة وحدة الاستماع، وتعيين عنوان إلى البوابة.

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

مثال على مخرجات إنشاء البوابة الناجحة:

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

بمجرد إنشاء البوابة، قم بإنشاء مورد 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

بمجرد إنشاء مورد HTTPRoute، تأكد من قبول المسار وبرمجة مورد Application Gateway for Containers.

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

تحقق من تحديث حالة مورد Application Gateway for Containers بنجاح.

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

إنشاء نهج BackendTLS

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، تحقق من الحالة على الكائن للتأكد من أن النهج صالح:

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

مثال على إخراج إنشاء كائن BackendTLSPolicy صالح:

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

اختبار الوصول إلى التطبيق

الآن نحن على استعداد لإرسال بعض نسبة استخدام الشبكة إلى نموذج التطبيق الخاص بنا، عبر FQDN المعين للواجهة الأمامية. استخدم الأمر التالي للحصول على FQDN:

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

يجب أن يرجع Curling FQDN هذا الاستجابات من الخلفية كما تم تكوينها على HTTPRoute.

curl --insecure https://$fqdn/

تهانينا، لقد قمت بتثبيت وحدة تحكم ALB، ونشر تطبيق الخلفية وتوجيه حركة المرور إلى التطبيق عبر الدخول على بوابة التطبيق للحاويات.