استخدام موازن التحميل الداخلي مع Azure Kubernetes Service (AKS)
يمكنك إنشاء موازن تحميل داخلي واستخدامه لتقييد الوصول إلى تطبيقاتك في Azure Kubernetes Service (AKS). لا يحتوي موازن التحميل الداخلي على عنوان IP عام ويجعل خدمة Kubernetes متاحة فقط للتطبيقات التي يمكنها الوصول إلى IP الخاص. يمكن أن تكون هذه التطبيقات داخل نفس VNET أو في VNET آخر من خلال نظير VNET. توضح لك هذه المقالة كيفية إنشاء موازن تحميل داخلي واستخدامه مع AKS.
إشعار
يتوفر موازن تحميل Azure في وحدتي SKU: أساسي وقياسي. يتم استخدام SKU القياسي بشكل افتراضي عند إنشاء نظام مجموعة AKS. عند إنشاء نوع خدمة LoadBalancer ، ستحصل على نفس نوع موازن التحميل كما هو الحال عند توفير نظام المجموعة. لمزيد من المعلومات، راجع مقارنة Azure Load Balancer SKU.
قبل البدء
- تفترض هذه المقالة أن لديك تجمع AKS قائمًا. إذا كنت بحاجة إلى نظام مجموعة AKS، يمكنك إنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Azure.
- تحتاج إلى الإصدار 2.0.59 من Azure CLI أو أحدث. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. - إذا كنت ترغب في استخدام شبكة فرعية أو مجموعة موارد موجودة، تحتاج هوية نظام مجموعة AKS إلى إذن لإدارة موارد الشبكة. للحصول على معلومات، راجع استخدام شبكة kubenet مع نطاقات عناوين IP الخاصة بك في AKS أو تكوين شبكات Azure CNI في AKS. إذا كنت تقوم بتكوين موازن التحميل الخاص بك لاستخدام عنوان IP في شبكة فرعية مختلفة، فتأكد من أن هوية نظام مجموعة AKS لديها أيضا حق الوصول للقراءة إلى تلك الشبكة الفرعية.
- لمزيد من المعلومات حول الأذونات، راجع تفويض وصول AKS إلى موارد Azure الأخرى.
قم بإنشاء موازن تحميل داخلي
إنشاء بيان خدمة باسم
internal-lb.yaml
مع نوعLoadBalancer
الخدمة والتعليعazure-load-balancer-internal
التوضيحي.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
انشر موازن التحميل الداخلي باستخدام
kubectl apply
الأمر . ينشئ هذا الأمر موازن تحميل Azure في مجموعة موارد العقدة المتصلة بنفس الشبكة الظاهرية مثل نظام مجموعة AKS.kubectl apply -f internal-lb.yaml
عرض تفاصيل الخدمة باستخدام
kubectl get service
الأمر .kubectl get service internal-app
يظهر عنوان IP لموازن التحميل الداخلي في
EXTERNAL-IP
العمود، كما هو موضح في إخراج المثال التالي. في هذا السياق، يشير External إلى الواجهة الخارجية لموازن التحميل. هذا لا يعني أنه يتلقى عنوان IP خارجي عام. يتم تعيين عنوان IP هذا ديناميكيا من نفس الشبكة الفرعية مثل نظام مجموعة AKS.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
تحديد عنوان IP
عند تحديد عنوان IP لموازن التحميل، يجب أن يتواجد عنوان IP المحدد في نفس الشبكة الظاهرية مثل نظام مجموعة AKS، ولكن لا يمكن تعيينه بالفعل إلى مورد آخر في الشبكة الظاهرية. على سبيل المثال، يجب عدم استخدام عنوان IP في النطاق المخصص لشبكة Kubernetes الفرعية داخل نظام مجموعة AKS. يمكن أن يؤدي استخدام عنوان IP الذي تم تعيينه بالفعل إلى مورد آخر في نفس الشبكة الظاهرية إلى حدوث مشكلات في موازن التحميل.
يمكنك استخدام az network vnet subnet list
أمر Azure CLI أو Get-AzVirtualNetworkSubnetConfig
PowerShell cmdlet للحصول على الشبكات الفرعية في شبكتك الظاهرية.
لمزيد من المعلومات حول الشبكات الفرعية، راجع إضافة تجمع عقدة مع شبكة فرعية فريدة.
إذا كنت تريد استخدام عنوان IP معين مع موازن التحميل، فلديك خياران: تعيين التعليقات التوضيحية للخدمة أو إضافة الخاصية LoadBalancerIP إلى بيان YAML لموازن التحميل.
هام
تؤدي إضافة خاصية LoadBalancerIP إلى بيان YAML لموازن التحميل إلى إهمال متابعة Kubernetes المصدر. بينما يظل الاستخدام الحالي كما هو ومن المتوقع أن تعمل الخدمات الحالية دون تعديل، نوصي بشدة بتعيين التعليقات التوضيحية للخدمة بدلا من ذلك.
تعيين التعليقات التوضيحية للخدمة باستخدام
service.beta.kubernetes.io/azure-load-balancer-ipv4
لعنوان IPv4 ولعنوانservice.beta.kubernetes.io/azure-load-balancer-ipv6
IPv6.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25 service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
عرض تفاصيل الخدمة باستخدام
kubectl get service
الأمر .kubectl get service internal-app
يجب أن يعكس عنوان IP في
EXTERNAL-IP
العمود عنوان IP المحدد، كما هو موضح في إخراج المثال التالي:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
لمزيد من المعلومات حول تكوين موازن التحميل في شبكة فرعية مختلفة، راجع تحديد شبكة فرعية مختلفة
توصيل خدمة Azure Private Link بموازن التحميل الداخلي
قبل البدء
- تحتاج إلى إصدار Kubernetes 1.22.x أو أحدث.
- تحتاج إلى مجموعة موارد موجودة مع شبكة ظاهرية وشبكة فرعية. مجموعة الموارد هذه هي المكان الذي تنشئ فيه نقطة النهاية الخاصة. إذا لم يكن لديك هذه الموارد، فشاهد إنشاء شبكة ظاهرية وشبكة فرعية.
إنشاء اتصال خدمة Private Link
إنشاء بيان خدمة باسم
internal-lb-pls.yaml
مع نوعLoadBalancer
الخدمة والتعليقاتazure-load-balancer-internal
التوضيحية وazure-pls-create
. لمزيد من الخيارات، راجع مستند تصميم تكامل خدمة Azure Private Link.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-pls-create: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
انشر موازن التحميل الداخلي باستخدام
kubectl apply
الأمر . ينشئ هذا الأمر موازن تحميل Azure في مجموعة موارد العقدة المتصلة بنفس الشبكة الظاهرية مثل نظام مجموعة AKS. كما أنه ينشئ كائن Private Link Service الذي يتصل بتكوين IP للواجهة الأمامية لموازن التحميل المرتبط بخدمة Kubernetes.kubectl apply -f internal-lb-pls.yaml
عرض تفاصيل الخدمة باستخدام
kubectl get service
الأمر .kubectl get service internal-app
يظهر عنوان IP لموازن التحميل الداخلي في
EXTERNAL-IP
العمود، كما هو موضح في إخراج المثال التالي. في هذا السياق، يشير External إلى الواجهة الخارجية لموازن التحميل. هذا لا يعني أنه يتلقى عنوان IP خارجي عام.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
عرض تفاصيل كائن Private Link Service باستخدام
az network private-link-service list
الأمر .# Create a variable for the node resource group AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv) # View the details of the Private Link Service object az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
إنشاء نقطة نهاية خاصة لخدمة Private Link
تسمح لك نقطة النهاية الخاصة بالاتصال بشكل خاص بكائن خدمة Kubernetes عبر Private Link Service التي أنشأتها.
إنشاء نقطة النهاية الخاصة باستخدام
az network private-endpoint create
الأمر .# Create a variable for the private link service AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv) # Create the private endpoint $ az network private-endpoint create \ -g myOtherResourceGroup \ --name myAKSServicePE \ --vnet-name myOtherVNET \ --subnet pe-subnet \ --private-connection-resource-id $AKS_PLS_ID \ --connection-name connectToMyK8sService
تخصيصات PLS عبر التعليقات التوضيحية
فيما يلي التعليقات التوضيحية التي يمكن استخدامها لتخصيص مورد PLS.
تعليق توضيحي | قيمة | الوصف | مطلوبة | افتراضي |
---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
قيمة منطقية تشير إلى ما إذا كان يجب إنشاء PLS. | المطلوب | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
سلسلة تحدد اسم مورد PLS المراد إنشاؤه. | اختياري | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
سلسلة تحدد اسم مجموعة الموارد حيث سيتم إنشاء مورد PLS | اختياري | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
سلسلة تشير إلى الشبكة الفرعية التي سيتم نشر PLS إليها. يجب أن تكون هذه الشبكة الفرعية موجودة في نفس VNET مثل تجمع الواجهة الخلفية. يتم تخصيص عناوين IP ل PLS NAT داخل هذه الشبكة الفرعية. | اختياري | إذا service.beta.kubernetes.io/azure-load-balancer-internal-subnet ، يتم استخدام هذه الشبكة الفرعية ILB. وإلا، يتم استخدام الشبكة الفرعية الافتراضية من ملف التكوين. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
إجمالي عدد عناوين NAT IPs الخاصة المراد تخصيصها. | اختياري | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
قائمة مفصولة بمسافة من عناوين IPv4 الثابتة التي سيتم تخصيصها. (IPv6 غير مدعوم الآن.) يجب ألا يكون إجمالي عدد عناوين IP أكبر من عدد IP المحدد في service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count . إذا كان هناك عدد أقل من عناوين IP المحددة، يتم تخصيص الباقي ديناميكيا. يتم تعيين عنوان IP الأول في القائمة على أنه Primary . |
اختياري | يتم تخصيص جميع عناوين IP ديناميكيا. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
قائمة مفصولة بمسافة من fqdns المقترنة ب PLS. | اختياري | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" أو "false" |
منطقي يشير إلى ما إذا كان يجب تمكين بروتوكول TCP PROXY على PLS لتمرير معلومات الاتصال، بما في ذلك معرف الارتباط وعنوان IP المصدر. لاحظ أن خدمة الواجهة الخلفية يجب أن تدعم بروتوكول PROXY أو ستفشل الاتصالات. | اختياري | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" أو "*" |
قائمة مفصولة بمسافة لمعرفات اشتراك Azure التي تكون خدمة الارتباط الخاص مرئية لها. استخدم "*" لكشف PLS لكافة الأقسام الفرعية (الأقل تقييدا). |
اختياري | قائمة [] فارغة تشير إلى التحكم في الوصول المستند إلى الدور فقط: ستكون خدمة الارتباط الخاص هذه متاحة فقط للأفراد الذين لديهم أذونات التحكم في الوصول المستندة إلى الدور داخل الدليل الخاص بك. (الأكثر تقييدا) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
قائمة مفصولة بمسافة لمعرفات اشتراك Azure. يسمح هذا بالموافقة تلقائيا على طلبات اتصال PE من الاشتراكات المدرجة في PLS. يعمل هذا فقط عند تعيين الرؤية إلى "*". | اختياري | [] |
استخدام الشبكات الخاصة
عند إنشاء نظام مجموعة AKS، يمكنك تحديد إعدادات الشبكة المتقدمة. تسمح لك هذه الإعدادات بنشر نظام المجموعة في شبكة Azure الظاهرية والشبكات الفرعية الموجودة. على سبيل المثال، يمكنك نشر نظام مجموعة AKS في شبكة خاصة متصلة بالبيئة المحلية وتشغيل الخدمات التي يمكن الوصول إليها داخليا فقط.
لمزيد من المعلومات، راجع تكوين الشبكات الفرعية للشبكة الظاهرية الخاصة بك باستخدام Kubenet أو باستخدام Azure CNI.
لا تحتاج إلى إجراء أي تغييرات على الخطوات السابقة لنشر موازن تحميل داخلي يستخدم شبكة خاصة في نظام مجموعة AKS. يتم إنشاء موازن التحميل في نفس مجموعة الموارد مثل نظام مجموعة AKS، ولكنه متصل بدلا من ذلك بشبكتك الظاهرية الخاصة والشبكة الفرعية، كما هو موضح في المثال التالي:
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
إشعار
يجب أن يكون لهوية نظام المجموعة المستخدمة من قبل مجموعة AKS على الأقل دور مساهم الشبكة على مورد الشبكة الظاهرية. يمكنك عرض هوية نظام المجموعة باستخدام az aks show
الأمر ، مثل az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity"
. يمكنك تعيين دور "مساهم الشبكة" باستخدام az role assignment create
الأمر ، مثل az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor"
.
إذا كنت تريد تعريف دور مخصص بدلا من ذلك، فأنت بحاجة إلى الأذونات التالية:
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Network/virtualNetworks/subnets/read
لمزيد من المعلومات، راجع إضافة شبكة فرعية للشبكة الظاهرية أو تغييرها أو حذفها.
تحديد شبكة فرعية مختلفة
أضف التعليق التوضيحي
azure-load-balancer-internal-subnet
إلى الخدمة لتحديد شبكة فرعية لموازن التحميل الخاص بك. يجب أن تكون الشبكة الفرعية المحددة في نفس الشبكة الظاهرية مثل نظام المجموعة AKS. عند النشر، يكون عنوان موازنEXTERNAL-IP
التحميل جزءا من الشبكة الفرعية المحددة.apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
حذف موازن التحميل
يتم حذف موازن التحميل عند حذف جميع خدماته.
كما هو الحال مع أي مورد Kubernetes، يمكنك حذف خدمة مباشرة، مثل kubectl delete service internal-app
، والتي تحذف أيضا موازن تحميل Azure الأساسي.
الخطوات التالية
لمعرفة المزيد حول خدمات Kubernetes، راجع وثائق خدمات Kubernetes.
Azure Kubernetes Service