واجهة MTLS الخلفية مع بوابة التطبيق للحاويات - واجهة برمجة تطبيقات البوابة
يساعد هذا المستند في إعداد تطبيق مثال يستخدم الموارد التالية من واجهة برمجة تطبيقات البوابة. يتم توفير الخطوات إلى:
- إنشاء مورد بوابة مع وحدة استماع HTTPS واحدة.
- إنشاء مورد HTTPRoute يشير إلى خدمة خلفية.
- إنشاء مورد BackendTLSPolicy يحتوي على عميل وشهادة CA لخدمة الواجهة الخلفية المشار إليها في HTTPRoute.
خلفية
أمان طبقة النقل المتبادل (MTLS) هي عملية تعتمد على الشهادات لتشفير الاتصالات وتحديد العملاء لخدمة ما. وهذا يمكن أحمال العمل الخلفية من زيادة وضع الأمان الخاص بها عن طريق الوثوق فقط بالاتصالات من الأجهزة المصادق عليها.
راجع الشكل التالي:
المتطلبات الأساسية
إذا كنت تتبع استراتيجية نشر BYO، فتأكد من إعداد Application Gateway لموارد الحاويات ووحدة تحكم ALB.
إذا كنت تتبع استراتيجية التوزيع المدارة ل ALB، فتأكد من توفير وحدة تحكم ALB وتوفير موارد Application Gateway for Containers عبر مورد ApplicationLoadBalancer المخصص.
توزيع نموذج تطبيق 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.com
gateway-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، ونشر تطبيق الخلفية وتوجيه حركة المرور إلى التطبيق عبر الدخول على بوابة التطبيق للحاويات.