الدخول الخارجي أو الداخلي لخدمة Azure Kubernetes (AKS) لنشر الوظيفة الإضافية لشبكة خدمة Istio
توضح لك هذه المقالة كيفية نشر تجاوزات خارجية أو داخلية للوظيفة الإضافية لشبكة خدمة Istio لنظام مجموعة Azure Kubernetes Service (AKS).
إشعار
عند إجراء ترقية مراجعة ثانوية للوظيفة الإضافية Istio، سيتم إنشاء نشر آخر للبوابات الخارجية / الداخلية لمراجعة وحدة التحكم الجديدة.
المتطلبات الأساسية
يفترض هذا الدليل أنك اتبعت الوثائق لتمكين الوظيفة الإضافية Istio على نظام مجموعة AKS، ونشر نموذج تطبيق، وتعيين متغيرات البيئة.
تمكين بوابة الدخول الخارجية
استخدم az aks mesh enable-ingress-gateway
لتمكين دخول Istio الذي يمكن الوصول إليه خارجيا على مجموعة AKS الخاصة بك:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
استخدم kubectl get svc
للتحقق من الخدمة المعينة إلى بوابة الدخول:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
لاحظ من الإخراج أن عنوان IP الخارجي للخدمة هو عنوان يمكن الوصول إليه بشكل عام:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-istio-ingressgateway-external LoadBalancer 10.0.10.249 <EXTERNAL_IP> 15021:30705/TCP,80:32444/TCP,443:31728/TCP 4m21s
إشعار
التخصيصات لعنوان IP على البوابات الداخلية والخارجية غير مدعومة حتى الآن. يتم إرجاع تخصيصات عنوان IP على مواصفات الدخول مرة أخرى بواسطة الوظيفة الإضافية Istio. من المخطط السماح بهذه التخصيصات في تنفيذ واجهة برمجة تطبيقات البوابة للوظيفة الإضافية Istio في المستقبل.
لا يمكن الوصول إلى التطبيقات من خارج نظام المجموعة بشكل افتراضي بعد تمكين بوابة الدخول. لتسهيل الوصول إلى تطبيق، قم بتعيين دخول توزيع العينة إلى بوابة دخول Istio باستخدام البيان التالي:
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: bookinfo-gateway-external
spec:
selector:
istio: aks-istio-ingressgateway-external
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: bookinfo-vs-external
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway-external
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
إشعار
يشير المحدد المستخدم في كائن Gateway إلى istio: aks-istio-ingressgateway-external
، والذي يمكن العثور عليه كتسمية على الخدمة المعينة إلى الدخول الخارجي الذي تم تمكينه سابقا.
تعيين متغيرات البيئة لمضيف الدخول الخارجي والمنافذ:
export INGRESS_HOST_EXTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT_EXTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL_EXTERNAL=$INGRESS_HOST_EXTERNAL:$INGRESS_PORT_EXTERNAL
استرداد العنوان الخارجي لنموذج التطبيق:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
انتقل إلى عنوان URL من إخراج الأمر السابق وتأكد من عرض صفحة منتج نموذج التطبيق. بدلا من ذلك، يمكنك أيضا استخدام curl
لتأكيد إمكانية الوصول إلى نموذج التطبيق. على سبيل المثال:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
تأكد من إمكانية الوصول إلى صفحة منتج نموذج التطبيق. الإخراج المتوقع هو:
<title>Simple Bookstore App</title>
تمكين بوابة الدخول الداخلية
استخدم az aks mesh enable-ingress-gateway
لتمكين دخول Istio داخلي على مجموعة AKS الخاصة بك:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
استخدم kubectl get svc
للتحقق من الخدمة المعينة إلى بوابة الدخول:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
لاحظ من الإخراج أن عنوان IP الخارجي للخدمة ليس عنوانا يمكن الوصول إليه بشكل عام، وبدلا من ذلك يمكن الوصول إليه محليا فقط:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-istio-ingressgateway-internal LoadBalancer 10.0.182.240 <IP> 15021:30764/TCP,80:32186/TCP,443:31713/TCP 87s
بعد تمكين بوابة الدخول، يجب كشف التطبيقات من خلال البوابة ويجب تكوين قواعد التوجيه وفقا لذلك. استخدم البيان التالي لتعيين دخول توزيع العينة إلى بوابة دخول Istio:
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: bookinfo-internal-gateway
spec:
selector:
istio: aks-istio-ingressgateway-internal
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: bookinfo-vs-internal
spec:
hosts:
- "*"
gateways:
- bookinfo-internal-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
إشعار
يشير المحدد المستخدم في كائن Gateway إلى istio: aks-istio-ingressgateway-internal
، والذي يمكن العثور عليه كتسمية على الخدمة المعينة إلى الدخول الداخلي الذي تم تمكينه سابقا.
تعيين متغيرات البيئة لمضيف الدخول الداخلي والمنافذ:
export INGRESS_HOST_INTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-internal -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT_INTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-internal -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL_INTERNAL=$INGRESS_HOST_INTERNAL:$INGRESS_PORT_INTERNAL
استرداد عنوان نموذج التطبيق:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
انتقل إلى عنوان URL من إخراج الأمر السابق وتأكد من عدم عرض صفحة منتج نموذج التطبيق. بدلا من ذلك، يمكنك أيضا استخدام curl
لتأكيد أن نموذج التطبيق غير قابل للوصول. على سبيل المثال:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
استخدم kubectl exec
لتأكيد إمكانية الوصول إلى التطبيق من داخل الشبكة الظاهرية لنظام المجموعة:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS "http://$GATEWAY_URL_INTERNAL/productpage" | grep -o "<title>.*</title>"
تأكد من إمكانية الوصول إلى صفحة منتج نموذج التطبيق. الإخراج المتوقع هو:
<title>Simple Bookstore App</title>
تخصيص التعليق التوضيحي لخدمة بوابة الدخول
يمكن إضافة التعليقات التوضيحية التالية إلى خدمة Kubernetes لبوابات الدخول الخارجية والداخلية:
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: لربط بوابة دخول داخلية بشبكة فرعية معينة.service.beta.kubernetes.io/azure-shared-securityrule
: لكشف بوابة الدخول من خلال قاعدة أمان معززة.service.beta.kubernetes.io/azure-allowed-service-tags
: لتحديد علامات الخدمة التي يمكن لبوابة الدخول تلقي الطلبات منها.service.beta.kubernetes.io/azure-load-balancer-ipv4
: لتكوين عنوان IPv4 ثابت.service.beta.kubernetes.io/azure-load-balancer-resource-group
: لتحديد مجموعة الموارد الخاصة ب IP عام في مجموعة موارد مختلفة عن المجموعة.service.beta.kubernetes.io/azure-pip-name
: لتحديد اسم عنوان IP عام.
حذف الموارد
إذا كنت ترغب في تنظيف بوابات الدخول الخارجية أو الداخلية Istio، ولكن اترك الشبكة ممكنة على نظام المجموعة، فقم بتشغيل الأمر التالي:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP}
إذا كنت ترغب في تنظيف شبكة خدمة Istio والدخول (تاركا وراءها نظام المجموعة)، فقم بتشغيل الأمر التالي:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
إذا كنت ترغب في تنظيف جميع الموارد التي تم إنشاؤها من مستندات إرشادات Istio الإرشادية، فقم بتشغيل الأمر التالي:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
الخطوات التالية
إشعار
في حالة مواجهة أي مشكلات في نشر بوابة دخول Istio أو تكوين توجيه حركة مرور الدخول، راجع مقالة حول استكشاف أخطاء بوابات دخول Istio الإضافية وإصلاحها
Azure Kubernetes Service