استخدام عناوين IP العامة على مستوى المثيل في خدمة Azure Kubernetes (AKS)
لا تتطلب عقد AKS عناوين IP العامة الخاصة بها للاتصال. ومع ذلك، قد تتطلب وحدات السيناريو العقد في تجمع عقدة لتلقي عناوين IP العامة المخصصة الخاصة بهم. السيناريو الشائع هو أعباء عمل الألعاب، حيث تحتاج وحدة التحكم إلى إجراء اتصال مباشر بجهاز ظاهري سحابي لتقليل القفزات. يمكن تحقيق هذا السيناريو على AKS باستخدام IP عام العقدة.
أولًا، قم بإنشاء مجموعة موارد جديدة.
az group create --name <resourceGroup> --location <region>
قم بإنشاء كتلة AKS جديدة وإرفاق IP عام للعقد الخاصة بك. يتلقى كل عقدة في تجمع عقدة IP عام فريد. يمكنك التحقق من ذلك من خلال النظر في مثيلات مجموعة مقياس الجهاز الظاهري.
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--generate-ssh-keys
بالنسبة لمجموعات AKS الموجودة، يمكنك أيضًا إضافة تجمع عقدة جديد، وإرفاق IP عام للعقد الخاصة بك.
az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip
قم باستخدام بادئة IP عامة
هناك عدد من الفوائد لاستخدام بادئة IP عامة. يدعم AKS استخدام عناوين من بادئة IP عامة موجودة للعقد الخاصة بك عن طريق تمرير معرف المورد ID مع العلامة --node-public-ip-prefix-id
عند إنشاء كتلة جديدة أو إضافة تجمع عقدة.
لحذف بادئة IP عامة، استخدم az network public-ip prefix delete:
az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>
قم بعرض الإخراج، ثم أخذ ملاحظة من id
البادئة:
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
...
}
وأخيرًا، عند إنشاء كتلة جديدة أو إضافة تجمع عقدة جديدة، استخدم العلامة --node-public-ip-prefix-id
وتمرير في معرف المورد ID البادئة:
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--node-public-ip-prefix-id /subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName> \
--generate-ssh-keys
قم بتحديد مواقع IPs العامة للعقد
يمكنك تحديد موقع IPs العامة للعقد الخاصة بك بطرق مختلفة:
- استخدم
az vmss list-instance-public-ips
الأمر Azure CLI. - قم باستخدام أوامر PowerShell أو Bash.
- يمكنك أيضًا عرض برامج IPs العامة في مدخل Azure عن طريق عرض المثيلات في مجموعة مقياس الجهاز الظاهري.
هام
تحتوي مجموعة موارد العقدة على العقد و IPs العامة الخاصة بها. استخدم مجموعة موارد العقدة عند تنفيذ الأوامر للبحث عن IPs العامة للعقد الخاصة بك.
az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>
استخدام علامات IP العامة على عناوين IP العامة للعقدة
يمكن استخدام علامات IP العامة على عناوين IP العامة للعقدة للاستفادة من ميزة تفضيلات توجيه Azure.
المتطلبات
- مطلوب AKS الإصدار 1.29 أو أحدث.
إنشاء نظام مجموعة جديد باستخدام تفضيلات التوجيه عبر الإنترنت
az aks create \
--name <aksClusterName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
إضافة تجمع عقدة مع تفضيلات التوجيه عبر الإنترنت
az aks nodepool add --cluster-name <aksClusterName> \
--name <nodePoolName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
السماح باتصالات منفذ المضيف وإضافة تجمعات العقد إلى مجموعات أمان التطبيقات
تحتاج عقد AKS التي تستخدم عناوين IP العامة للعقدة التي تستضيف الخدمات على عنوان المضيف الخاص بها إلى إضافة قاعدة NSG للسماح بنسبة استخدام الشبكة. ستؤدي إضافة المنافذ المطلوبة في تكوين تجمع العقدة إلى إنشاء قواعد السماح المناسبة في مجموعة أمان شبكة نظام المجموعة.
إذا كانت مجموعة أمان الشبكة موجودة على الشبكة الفرعية مع نظام مجموعة باستخدام الشبكة الظاهرية الخاصة بك، يجب إضافة قاعدة السماح إلى مجموعة أمان الشبكة هذه. يمكن أن يقتصر هذا على العقد في تجمع عقدة معين عن طريق إضافة تجمع العقدة إلى مجموعة أمان تطبيق (ASG). سيتم إنشاء ASG مدارة بشكل افتراضي في مجموعة الموارد المدارة إذا تم تحديد منافذ المضيف المسموح بها. يمكن أيضا إضافة العقد إلى مجموعة ASGs مخصصة واحدة أو أكثر عن طريق تحديد معرف المورد لمجموعة (مجموعات أمان الشبكة) في معلمات تجمع العقدة.
تنسيق مواصفات منفذ المضيف
عند تحديد قائمة المنافذ التي تريد السماح بها، استخدم قائمة منفصلة بفواصل مع إدخالات بتنسيق port/protocol
أو startPort-endPort/protocol
.
أمثلة:
- 80/tcp
- 80/tcp،443/tcp
- 53/udp،80/tcp
- 50000-60000/tcp
المتطلبات
- مطلوب AKS الإصدار 1.29 أو أحدث.
إنشاء مجموعة جديدة مع المنافذ المسموح بها ومجموعات أمان التطبيقات
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--nodepool-name <nodePoolName> \
--nodepool-allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp\
--nodepool-asg-ids "<asgId>,<asgId>" \
--generate-ssh-keys
إضافة تجمع عقدة جديد مع المنافذ المسموح بها ومجموعات أمان التطبيق
az aks nodepool add \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
تحديث المنافذ المسموح بها ومجموعات أمان التطبيق لتجمع عقدة
az aks nodepool update \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
تعيين منافذ المضيف تلقائيا لأحمال عمل الجراب (معاينة)
عند تكوين عناوين IP العامة على العقد، يمكن استخدام منافذ المضيف للسماح للقرون بتلقي حركة المرور مباشرة دون الحاجة إلى تكوين خدمة موازن التحميل. هذا مفيد بشكل خاص في سيناريوهات مثل الألعاب، حيث لا تكون الطبيعة المؤقتة لعنباط IP العقدة والمنفذ مشكلة لأن خدمة مطابقة في اسم مضيف معروف يمكن أن توفر المضيف والمنفذ الصحيحين لاستخدامهما في وقت الاتصال. ومع ذلك، لأن عملية واحدة فقط على المضيف يمكن أن تستمع إلى نفس المنفذ، يمكن أن يؤدي استخدام التطبيقات مع منافذ المضيف إلى مشاكل في الجدولة. لتجنب هذه المشكلة، توفر AKS القدرة على أن يقوم النظام بتعيين منفذ متاح ديناميكيا في وقت الجدولة، ما يمنع التعارضات.
تحذير
سيتم حظر حركة مرور منفذ مضيف الجراب بواسطة قواعد NSG الافتراضية الموجودة على نظام المجموعة. يجب دمج هذه الميزة مع السماح لمنافذ المضيف على تجمع العقدة للسماح بتدفق حركة المرور.
هام
تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:
المتطلبات
- مطلوب AKS الإصدار 1.29 أو أحدث.
تسجيل علامة ميزة "PodHostPortAutoAssignPreview"
قم بتسجيلPodHostPortAutoAssignPreview
ميزة الإشارة باستخدامتسجيل ميزة az كما هو موضح في المثال التالي:
az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل. تحقق من حالة التسجيل باستخدام الأمر az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام الأمر az provider register:
az provider register --namespace Microsoft.ContainerService
تعيين منفذ مضيف تلقائيا إلى جراب
يتم تشغيل التعيين التلقائي لمنفذ المضيف عن طريق نشر حمل عمل بدون أي منافذ مضيفة وتطبيق kubernetes.azure.com/assign-hostports-for-containerports
التعليق التوضيحي مع قائمة المنافذ التي تحتاج إلى تعيينات منفذ المضيف. يجب تحديد قيمة التعليق التوضيحي ك قائمة مفصولة بفواصل من الإدخالات مثل port/protocol
، حيث المنفذ هو رقم منفذ فردي يتم تعريفه في مواصفات Pod والبروتوكول هو tcp
أو udp
.
سيتم تعيين المنافذ من النطاق 40000-59999
وستكون فريدة عبر نظام المجموعة. ستتم أيضا إضافة المنافذ المعينة إلى متغيرات البيئة داخل الجراب بحيث يمكن للتطبيق تحديد المنافذ التي تم تعيينها. سيكون اسم متغير البيئة بالتنسيق التالي (المثال أدناه): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT
، لذلك سيكون mydeployment_PORT_8080_TCP_HOSTPORT: 41932
المثال هو .
فيما يلي مثال echoserver
على النشر، يظهر تعيين منافذ المضيف للمنافذ 8080 و8443:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echoserver-hostport
labels:
app: echoserver-hostport
spec:
replicas: 3
selector:
matchLabels:
app: echoserver-hostport
template:
metadata:
annotations:
kubernetes.azure.com/assign-hostports-for-containerports: 8080/tcp,8443/tcp
labels:
app: echoserver-hostport
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: echoserver-hostport
image: k8s.gcr.io/echoserver:1.10
ports:
- name: http
containerPort: 8080
protocol: TCP
- name: https
containerPort: 8443
protocol: TCP
عند تطبيق النشر، hostPort
ستكون الإدخالات في YAML للجرابات الفردية:
$ kubectl describe pod echoserver-hostport-75dc8d8855-4gjfc
<cut for brevity>
Containers:
echoserver-hostport:
Container ID: containerd://d0b75198afe0612091f412ee7cf7473f26c80660143a96b459b3e699ebaee54c
Image: k8s.gcr.io/echoserver:1.10
Image ID: k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 Ports: 8080/TCP, 8443/TCP
Host Ports: 46645/TCP, 49482/TCP
State: Running
Started: Thu, 12 Jan 2023 18:02:50 +0000
Ready: True
Restart Count: 0
Environment:
echoserver-hostport_PORT_8443_TCP_HOSTPORT: 49482
echoserver-hostport_PORT_8080_TCP_HOSTPORT: 46645
الخطوات التالية
Azure Kubernetes Service