استخدام عنوان IP عامًا ثابتًا وتسمية DNS مع موازن تحميل Azure Kubernetes Service (AKS)
عند إنشاء مورد موازن تحميل في نظام مجموعة Azure Kubernetes Service (AKS)، يكون عنوان IP العام المعين له صالحا فقط طوال عمر هذا المورد. إذا قمت بحذف خدمة Kubernetes، فسيتم أيضًا حذف موازن التحميل وعنوان IP. إذا كنت ترغب في تعيين عنوان IP محدد أو الاحتفاظ بعنوان IP لخدمات Kubernetes المعاد نشرها، فيمكنك إنشاء واستخدام عنوان IP عام ثابت.
توضح لك هذه المقالة كيفية إنشاء عنوان IP عام ثابت وتعيينه لخدمة Kubernetes الخاصة بك.
قبل البدء
- تحتاج إلى تثبيت الإصدار 2.0.59 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. - تتناول هذه المقالة استخدام SKU IP القياسي مع موازن تحميل SKU قياسي . لمزيد من المعلومات، راجع أنواع عناوين IP وطرق التخصيص في Azure .
إنشاء نظام مجموعة AKS
إنشاء مجموعة موارد Azure باستخدام
az group create
الأمر .az group create --name myNetworkResourceGroup --location eastus
إنشاء نظام مجموعة AKS باستخدام
az aks create
الأمر .az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
إنشاء عنوان IP ثابت
احصل على اسم مجموعة موارد العقدة
az aks show
باستخدام الأمر والاستعلام للخاصيةnodeResourceGroup
.az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
إنشاء عنوان IP عام ثابت في مجموعة موارد العقدة
az network public ip create
باستخدام الأمر .az network public-ip create \ --resource-group <node resource group name> \ --name myAKSPublicIP \ --sku Standard \ --allocation-method static
إشعار
إذا كنت تستخدم موازن تحميل SKU أساسي في نظام مجموعة AKS، فاستخدم Basic للمعلمة
--sku
عند تعريف IP عام. تعمل عناوين SKU IP الأساسية فقط مع موازن تحميل SKU الأساسي وتعمل عناوين SKU IP القياسية فقط مع موازنات تحميل SKU القياسية .احصل على عنوان IP العام الثابت باستخدام
az network public-ip list
الأمر . حدد اسم مجموعة موارد العقدة وعنوان IP العام الذي أنشأته، واستعلم عنipAddress
.az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
إنشاء خدمة باستخدام عنوان IP ثابت
أولا، حدد نوع الهوية المدارة التي تستخدمها مجموعة AKS الخاصة بك، المعينة من قبل النظام أو المعينة من قبل المستخدم. إذا لم تكن متأكدا، فاستدعي الأمر az aks show والاستعلام عن خاصية نوع الهوية.
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query identity.type \ --output tsv
إذا كان نظام المجموعة يستخدم هوية مدارة، ستكون قيمة خاصية النوع إما SystemAssigned أو UserAssigned.
إذا كان نظام المجموعة يستخدم كيان خدمة، ستكون قيمة خاصية النوع فارغة. ضع في اعتبارك ترقية نظام المجموعة لاستخدام هوية مدارة.
إذا كان نظام مجموعة AKS الخاص بك يستخدم هوية مدارة معينة من قبل النظام، ثم الاستعلام عن المعرف الأساسي للهوية المدارة كما يلي:
# Get the principal ID for a system-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.principalId \ --output tsv)
إذا كان نظام مجموعة AKS يستخدم هوية مدارة معينة من قبل المستخدم، فسيكون المعرف الأساسي فارغا. الاستعلام عن معرف عميل الهوية المدارة المعين من قبل المستخدم بدلا من ذلك:
# Get the client ID for a user-assigned managed identity. CLIENT_ID=$(az aks show \ --name myAKSCluster \ --resource-group myNetworkResourceGroup \ --query identity.userAssignedIdentities.*.clientId \ --output tsv
تعيين أذونات مفوضة للهوية المدارة المستخدمة من قبل نظام مجموعة AKS لمجموعة موارد IP العامة عن طريق استدعاء
az role assignment create
الأمر .# Get the resource ID for the node resource group. RG_SCOPE=$(az group show \ --name <node resource group> \ --query id \ --output tsv) # Assign the Network Contributor role to the managed identity, # scoped to the node resource group. az role assignment create \ --assignee ${CLIENT_ID} \ --role "Network Contributor" \ --scope ${RG_SCOPE}
هام
إذا قمت بتخصيص عنوان IP الصادر، فتأكد من أن هوية نظام المجموعة الخاصة بك لديها أذونات لكل من IP العام الصادر وعنوان IP العام الوارد.
أنشئ ملفا باسم
load-balancer-service.yaml
وانسخه في محتويات ملف YAML التالي، مع توفير عنوان IP العام الذي تم إنشاؤه في الخطوة السابقة واسم مجموعة موارد العقدة.هام
تؤدي إضافة الخاصية
loadBalancerIP
إلى بيان YAML لموازن التحميل إلى إهمال متابعة Kubernetes المصدر. بينما يظل الاستخدام الحالي كما هو ومن المتوقع أن تعمل الخدمات الحالية دون تعديل، نوصي بشدة بتعيين التعليقات التوضيحية للخدمة بدلا من ذلك. لتعيين التعليقات التوضيحية للخدمة، يمكنك إما استخدامservice.beta.kubernetes.io/azure-pip-name
لاسم IP العام، أو استخدامservice.beta.kubernetes.io/azure-load-balancer-ipv4
لعنوان IPv4 ولعنوانservice.beta.kubernetes.io/azure-load-balancer-ipv6
IPv6، كما هو موضح في مثال YAML.apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancer
إشعار
تضمن إضافة التعليق التوضيحي
service.beta.kubernetes.io/azure-pip-name
إنشاء LoadBalancer الأكثر كفاءة ويوصى به بشدة لتجنب التقييد المحتمل.قم بتعيين تسمية DNS ذات الواجهة العامة إلى الخدمة باستخدام التعليق التوضيحي للخدمة
service.beta.kubernetes.io/azure-dns-label-name
. يؤدي هذا إلى نشر اسم مجال مؤهل بالكامل (FQDN) للخدمة الخاصة بك باستخدام خوادم DNS العامة ومجال المستوى الأعلى في Azure. يجب أن تكون قيمة التعليق التوضيحي فريدة داخل موقع Azure، لذلك نوصي باستخدام تسمية مؤهلة بشكل كاف. يقوم Azure تلقائيا بإلحاق لاحقة افتراضية في الموقع الذي حددته، مثل<location>.cloudapp.azure.com
، بالاسم الذي تقدمه، وإنشاء FQDN.apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name> service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label> name: azure-load-balancer spec: type: LoadBalancer ports: - port: 80 selector: app: azure-load-balancer
إنشاء الخدمة والنشر باستخدام
kubectl apply
الأمر .kubectl apply -f load-balancer-service.yaml
لمشاهدة تسمية DNS لموازن التحميل الخاص بك، استخدم
kubectl describe service
الأمر .kubectl describe service azure-load-balancer
سيتم سرد تسمية DNS ضمن
Annotations
، كما هو موضح في إخراج المثال المكثف التالي:Name: azure-load-balancer Namespace: default Labels: <none> Annotations: service.beta.kuberenetes.io/azure-dns-label-name: <unique-service-label>
استكشاف الأخطاء وإصلاحها
إذا لم يكن عنوان IP الثابت المحدد في loadBalancerIP
خاصية بيان خدمة Kubernetes موجودا أو لم يتم إنشاؤه في مجموعة موارد العقدة ولم يتم تكوين تفويضات أخرى، يفشل إنشاء خدمة موازن التحميل. لاستكشاف الأخطاء وإصلاحها، راجع أحداث إنشاء الخدمة باستخدام kubectl describe
الأمر . أدخل اسم الخدمة المحددة في بيان YAML، كما هو موضح في المثال التالي:
kubectl describe service azure-load-balancer
يظهر لك الإخراج معلومات حول مورد خدمة Kubernetes. يظهر Warning
إخراج المثال التالي في Events
: "user supplied IP address was not found
." في هذا السيناريو، تأكد من إنشاء عنوان IP العام الثابت في مجموعة موارد العقدة ومن صحة عنوان IP المحدد في بيان خدمة Kubernetes.
Name: azure-load-balancer
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=azure-load-balancer
Type: LoadBalancer
IP: 10.0.18.125
IP: 40.121.183.52
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32582/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatingLoadBalancer 7s (x2 over 22s) service-controller Creating load balancer
Warning CreatingLoadBalancerFailed 6s (x2 over 12s) service-controller Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found
الخطوات التالية
لمزيد من التحكم في حركة مرور الشبكة إلى التطبيقات الخاصة بك، استخدم ملحق توجيه التطبيق ل AKS. لمزيد من المعلومات حول ملحق توجيه التطبيق، راجع دخول NGINX المدار مع الوظيفة الإضافية لتوجيه التطبيق.
Azure Kubernetes Service