استخدام عناوين IP العامة على مستوى المثيل في خدمة Azure Kubernetes (AKS)

لا تتطلب عقد AKS عناوين IP العامة الخاصة بها للاتصال. ومع ذلك، قد تتطلب وحدات السيناريو العقد في تجمع عقدة لتلقي عناوين IP العامة المخصصة الخاصة بهم. السيناريو الشائع هو أعباء عمل الألعاب، حيث تحتاج وحدة التحكم إلى إجراء اتصال مباشر بجهاز ظاهري سحابي لتقليل القفزات. يمكن تحقيق هذا السيناريو على AKS باستخدام IP عام العقدة.

أولًا، قم بإنشاء مجموعة موارد جديدة.

az group create --name myResourceGroup2 --location eastus

قم بإنشاء كتلة AKS جديدة وإرفاق IP عام للعقد الخاصة بك. يتلقى كل عقدة في تجمع عقدة IP عام فريد. يمكنك التحقق من ذلك من خلال النظر في مثيلات مجموعة مقياس الجهاز الظاهري.

az aks create \
    --resource-group MyResourceGroup2 \
    --name MyManagedCluster \
    --location eastus \
    --enable-node-public-ip \
    --generate-ssh-keys

بالنسبة لمجموعات AKS الموجودة، يمكنك أيضًا إضافة تجمع عقدة جديد، وإرفاق IP عام للعقد الخاصة بك.

az aks nodepool add --resource-group MyResourceGroup2 --cluster-name MyManagedCluster --name nodepool2 --enable-node-public-ip

قم باستخدام بادئة IP عامة

هناك عدد من الفوائد لاستخدام بادئة IP عامة. يدعم AKS استخدام عناوين من بادئة IP عامة موجودة للعقد الخاصة بك عن طريق تمرير معرف المورد ID مع العلامة node-public-ip-prefix عند إنشاء كتلة جديدة أو إضافة تجمع عقدة.

لحذف بادئة IP عامة، استخدم az network public-ip prefix delete:

az network public-ip prefix create --length 28 --location eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3

قم بعرض الإخراج، ثم أخذ ملاحظة من id البادئة:

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix",
  ...
}

وأخيرًا، عند إنشاء كتلة جديدة أو إضافة تجمع عقدة جديدة، استخدم العلامة node-public-ip-prefix وتمرير في معرف المورد ID البادئة:

az aks create \
    --resource-group MyResourceGroup3 \
    --name MyManagedCluster \
    --location eastus \
    --enable-node-public-ip \
    --node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix \
    --generate-ssh-keys

قم بتحديد مواقع IPs العامة للعقد

يمكنك تحديد موقع IPs العامة للعقد الخاصة بك بطرق مختلفة:

هام

تحتوي مجموعة موارد العقدة على العقد و IPs العامة الخاصة بها. استخدم مجموعة موارد العقدة عند تنفيذ الأوامر للبحث عن IPs العامة للعقد الخاصة بك.

az vmss list-instance-public-ips --resource-group MC_MyResourceGroup2_MyManagedCluster_eastus --name YourVirtualMachineScaleSetName

استخدام علامات IP العامة على عناوين IP العامة للعقدة

يمكن استخدام علامات IP العامة على عناوين IP العامة للعقدة للاستفادة من ميزة تفضيلات توجيه Azure.

المتطلبات

  • مطلوب AKS الإصدار 1.24 أو أحدث.

إنشاء نظام مجموعة جديد باستخدام تفضيلات التوجيه عبر الإنترنت

az aks create \
    --name <clusterName> \
    --location <location> \
    --resource-group <resourceGroup> \
    --enable-node-public-ip \
    --node-public-ip-tags RoutingPreference=Internet \
    --generate-ssh-keys

إضافة تجمع عقدة مع تفضيلات التوجيه عبر الإنترنت

az aks nodepool add --cluster-name <clusterName> --name <nodepoolName> --location <location> --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.24 أو أحدث.

إنشاء مجموعة جديدة مع المنافذ المسموح بها ومجموعات أمان التطبيقات

az aks create \
    --resource-group <resourceGroup> \
    --name <clusterName> \
    --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

إضافة تجمع عقدة جديد مع المنافذ المسموح بها ومجموعات أمان التطبيق

  --resource-group <resourceGroup> \
  --cluster-name <clusterName> \
  --name <nodepoolName> \
  --allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
  --asg-ids "<asgId>,<asgId>"

تحديث المنافذ المسموح بها ومجموعات أمان التطبيق لتجمع عقدة

  --resource-group <resourceGroup> \
  --cluster-name <clusterName> \
  --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.24 أو أحدث.

تسجيل علامة ميزة "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

الخطوات التالية