تكوين Azure CNI المشغل بواسطة Cilium في خدمة Azure Kubernetes (AKS)

يجمع Azure CNI المشغل بواسطة Cilium بين مستوى التحكم القوي في Azure CNI ولوحة بيانات Cilium لتوفير شبكات وأمان عاليي الأداء.

من خلال الاستفادة من برامج eBPF المحملة في نواة Linux وبنية كائن API أكثر كفاءة، يوفر Azure CNI المشغل بواسطة Cilium المزايا التالية:

  • وظائف مكافئة لوظائف Azure CNI الحالية والمكونات الإضافية لتراكب Azure CNI

  • توجيه الخدمة المحسن

  • فرض نهج الشبكة الأكثر كفاءة

  • إمكانية مراقبة حركة مرور نظام المجموعة بشكل أفضل

  • دعم المجموعات الأكبر (المزيد من العقد والقرون والخدمات)

إدارة عناوين IP (IPAM) مع Azure CNI المشغل بواسطة Cilium

يمكن نشر Azure CNI المشغل بواسطة Cilium باستخدام طريقتين مختلفتين لتعيين عناوين IP للجراب:

  • تعيين عناوين IP من شبكة تراكب (على غرار وضع تراكب Azure CNI)

  • تعيين عناوين IP من شبكة ظاهرية (مشابهة ل Azure CNI الحالي مع Dynamic Pod IP Assignment)

إذا لم تكن متأكدا من الخيار الذي يجب تحديده، فاقرأ "اختيار نموذج شبكة لاستخدامه".

إنفاذ نهج الشبكة

يفرض Cilium نهج الشبكة للسماح بنسبة استخدام الشبكة بين القرون أو رفضها. باستخدام Cilium، لا تحتاج إلى تثبيت محرك نهج شبكة منفصل مثل Azure Network Policy Manager أو Calico.

القيود

يحتوي Azure CNI المشغل بواسطة Cilium حاليا على القيود التالية:

  • متوفر فقط لنظام التشغيل Linux وليس لنظام التشغيل Windows.

  • تم تعطيل تنفيذ نهج Cilium L7.

  • تم تعطيل Hubble.

  • لا يمكن استخدام ipBlock نهج الشبكة للسماح بالوصول إلى عناوين IP للعقدة أو الجراب. راجع الأسئلة المتداولة للحصول على التفاصيل والحلول البديلة الموصى بها.

  • خدمات Kubernetes مع internalTrafficPolicy=Local غير مدعومة (إصدار Cilium #17796).

  • لا يمكن لخدمات Kubernetes المتعددة استخدام نفس منفذ المضيف ببروتوكولات مختلفة (على سبيل المثال، TCP أو UDP) (مشكلة Cilium #14287).

  • قد يتم فرض نهج الشبكة على حزم الرد عندما يتصل جراب بنفسه عبر عنوان IP لنظام مجموعة الخدمة (مشكلة Cilium #19406).

  • لا يتم تطبيق نهج الشبكة على pods باستخدام شبكة المضيف (spec.hostNetwork: true) لأن هذه الحجيرات تستخدم هوية المضيف بدلا من وجود هويات فردية.

المتطلبات الأساسية

  • الإصدار 2.48.1 من Azure CLI أو أحدث. قم بتشغيل az --version لمشاهدة الإصدار المثبت حاليا. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

  • إذا كنت تستخدم قوالب ARM أو REST API، يجب أن يكون إصدار AKS API معاينة 2022-09-02 أو أحدث.

إشعار

استخدمت إصدارات AKS API السابقة (2022-09-02preview إلى 2023-01-02preview) الحقل networkProfile.ebpfDataplane=cilium. تستخدم إصدارات AKS API منذ 2023-02-02preview الحقل networkProfile.networkDataplane=cilium لتمكين Azure CNI المشغل بواسطة Cilium.

إنشاء نظام مجموعة AKS جديد باستخدام Azure CNI المشغل بواسطة Cilium

الخيار 1: تعيين عناوين IP من شبكة تراكب

استخدم الأوامر التالية لإنشاء نظام مجموعة مع شبكة تراكب وCilium. استبدل قيم و <clusterName><resourceGroupName>و:<location>

az aks create \
    --name <clusterName> \
    --resource-group <resourceGroupName> \
    --location <location> \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --pod-cidr 192.168.0.0/16 \
    --network-dataplane cilium \
    --generate-ssh-keys

إشعار

تحل --network-dataplane cilium العلامة محل العلامة المهملة --enable-ebpf-dataplane المستخدمة في الإصدارات السابقة من ملحق aks-preview CLI.

الخيار 2: تعيين عناوين IP من شبكة ظاهرية

قم بتشغيل الأوامر التالية لإنشاء مجموعة موارد وشبكة ظاهرية باستخدام شبكة فرعية للعقد وشبكة فرعية للقرون.

# Create the resource group
az group create --name <resourceGroupName> --location <location>
# Create a virtual network with a subnet for nodes and a subnet for pods
az network vnet create --resource-group <resourceGroupName> --location <location> --name <vnetName> --address-prefixes <address prefix, example: 10.0.0.0/8> -o none 
az network vnet subnet create --resource-group <resourceGroupName> --vnet-name <vnetName> --name nodesubnet --address-prefixes <address prefix, example: 10.240.0.0/16> -o none 
az network vnet subnet create --resource-group <resourceGroupName> --vnet-name <vnetName> --name podsubnet --address-prefixes <address prefix, example: 10.241.0.0/16> -o none 

إنشاء نظام المجموعة باستخدام --network-dataplane cilium:

az aks create \
    --name <clusterName> \
    --resource-group <resourceGroupName> \
    --location <location> \
    --max-pods 250 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/nodesubnet \
    --pod-subnet-id /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>/subnets/podsubnet \
    --network-dataplane cilium \
    --generate-ssh-keys

ترقية نظام مجموعة موجود إلى Azure CNI المشغل بواسطة Cilium

إشعار

يمكنك تحديث نظام مجموعة موجود إلى Azure CNI المشغل بواسطة Cilium إذا كانت المجموعة تفي بالمعايير التالية:

إشعار

عند تمكين Cilium في نظام مجموعة بمحرك نهج شبكة مختلف (Azure NPM أو Calico)، سيتم إلغاء تثبيت محرك نهج الشبكة واستبداله ب Cilium. راجع إلغاء تثبيت Azure Network Policy Manager أو Calico لمزيد من التفاصيل.

تحذير

تؤدي عملية الترقية إلى تشغيل كل تجمع عقدة لإعادة تصويرها في وقت واحد. ترقية كل تجمع عقدة بشكل منفصل غير مدعوم. أي اضطرابات في شبكة نظام المجموعة مشابهة لترقية صورة العقدة أو ترقية إصدار Kubernetes حيث تتم إعادة تصوير كل عقدة في تجمع عقدة.

سيبدأ Cilium في فرض نهج الشبكة فقط بعد إعادة تصوير جميع العقد.

لإجراء الترقية، ستحتاج إلى الإصدار 2.52.0 من Azure CLI أو أحدث. قم بتشغيل az --version لمشاهدة الإصدار المثبت حاليا. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

استخدم الأمر التالي لترقية نظام مجموعة موجود إلى Azure CNI المشغل بواسطة Cilium. استبدل قيم و <clusterName><resourceGroupName>:

az aks update --name <clusterName> --resource-group <resourceGroupName> \
  --network-dataplane cilium

الأسئلة الشائعة

  • هل يمكنني تخصيص تكوين Cilium؟

    لا، تدير AKS تكوين Cilium ولا يمكن تعديله. نوصي العملاء الذين يحتاجون إلى مزيد من التحكم باستخدام AKS BYO CNI وتثبيت Cilium يدويا.

  • هل يمكنني استخدام CiliumNetworkPolicy موارد مخصصة بدلا من موارد Kubernetes NetworkPolicy ؟

    CiliumNetworkPolicy الموارد المخصصة غير مدعومة رسميا. نوصي العملاء باستخدام موارد Kubernetes NetworkPolicy لتكوين نهج الشبكة.

  • لماذا يتم حظر حركة المرور عندما NetworkPolicy يكون لديه ipBlock الذي يسمح بعنوان IP؟

    يتمثل أحد قيود Azure CNI المشغل بواسطة Cilium في أنه NetworkPolicyلا يمكن ل 's ipBlock تحديد pod أو node IPs.

    على سبيل المثال، يحتوي هذا NetworkPolicy على ipBlock الذي يسمح لجميع الخروج إلى 0.0.0.0/0:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: example-ipblock
    spec:
      podSelector: {}
      policyTypes:
        - Egress
      egress:
        - to:
          - ipBlock:
              cidr: 0.0.0.0/0 # This will still block pod and node IPs.
    

    ومع ذلك، عند تطبيق هذا NetworkPolicy ، سيحظر Cilium الخروج إلى pod وIPs العقدة على الرغم من أن عناوين IP داخل ipBlock CIDR.

    كحل بديل، يمكنك إضافة namespaceSelector وتحديد podSelector pods. يحدد المثال أدناه جميع pods في جميع مساحات الأسماء:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: example-ipblock
    spec:
      podSelector: {}
      policyTypes:
        - Egress
      egress:
        - to:
          - ipBlock:
              cidr: 0.0.0.0/0
          - namespaceSelector: {}
          - podSelector: {}
    

    إشعار

    لا يمكن حاليا تحديد NetworkPolicy مع ipBlock للسماح بحركة المرور إلى عناوين IP للعقدة.

  • هل تقوم AKS بتكوين وحدة المعالجة المركزية أو حدود الذاكرة على Cilium daemonset؟

    لا، لا تقوم AKS بتكوين وحدة المعالجة المركزية أو حدود الذاكرة على Cilium daemonset لأن Cilium هو مكون نظام مهم لشبكة الجراب وإنفاذ نهج الشبكة.

  • هل يستخدم Azure CNI المشغل بواسطة Cilium Kube-Proxy؟

    لا، لا تستخدم مجموعات AKS التي تم إنشاؤها باستخدام مخطط بيانات الشبكة مثل Cilium Kube-Proxy. إذا كانت مجموعات AKS على تراكب Azure CNI أو Azure CNI مع تخصيص IP ديناميكي وتتم ترقيتها إلى مجموعات AKS التي تشغل Azure CNI مدعومة من Cilium، يتم إنشاء أحمال عمل العقد الجديدة دون kube-proxy. يتم أيضا ترحيل أحمال العمل القديمة للتشغيل دون kube-proxy كجزء من عملية الترقية هذه.

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

تعرف على المزيد حول الشبكات في AKS في المقالات التالية: