اتصل بعُقد مجموعة Azure Kubernetes Service (AKS) للصيانة أو استكشاف الأخطاء وإصلاحها
طوال دورة حياة نظام مجموعة Azure Kubernetes Service (AKS)، تحتاج في النهاية إلى الوصول مباشرة إلى عقدة AKS. قد يكون هذا الوصول لعمليات الصيانة أو جمع السجل أو استكشاف الأخطاء وإصلاحها.
يمكنك الوصول إلى عقدة من خلال المصادقة، والتي تختلف الأساليب اعتمادا على نظام تشغيل العقدة وطريقة الاتصال. يمكنك المصادقة بأمان مقابل عقد AKS Linux وWindows من خلال خيارين تمت مناقشهما في هذه المقالة. يتطلب أحدهما أن يكون لديك وصول Kubernetes API، والآخر من خلال AKS ARM API، والذي يوفر معلومات IP خاصة مباشرة. لأسباب أمنية، لا تتعرض عقد AKS للإنترنت. بدلا من ذلك، للاتصال مباشرة بأي عقد AKS، تحتاج إلى استخدام عنوان kubectl debug
IP الخاص بالمضيف أو .
الوصول إلى العقد باستخدام واجهة برمجة تطبيقات Kubernetes
يتطلب هذا الأسلوب استخدام kubectl debug
الأمر .
قبل البدء
يوضح لك هذا الدليل كيفية إنشاء اتصال بعقدة AKS وتحديث مفتاح SSH لنظام مجموعة AKS. لمتابعة الخطوات، تحتاج إلى استخدام Azure CLI الذي يدعم الإصدار 2.0.64 أو أحدث. قم بتشغيل az --version
للتحقق من الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.
أكمل هذه الخطوات إذا لم يكن لديك مفتاح SSH. إنشاء مفتاح SSH اعتمادا على صورة نظام تشغيل العقدة، لنظام التشغيل macOS وLinux، أو Windows. تأكد من حفظ زوج المفاتيح بتنسيق OpenSSH، وتجنب التنسيقات غير المدعومة مثل .ppk
. بعد ذلك، راجع إدارة تكوين SSH لإضافة المفتاح إلى نظام المجموعة.
Linux وmacOS
يمكن لمستخدمي Linux وmacOS الوصول إلى العقدة الخاصة بهم باستخدام kubectl debug
أو عنوان IP الخاص بهم. يجب على مستخدمي Windows التخطي إلى قسم Windows Server Proxy للحصول على حل بديل ل SSH عبر الوكيل.
الاتصال باستخدام تصحيح أخطاء kubectl
لإنشاء اتصال shell تفاعلي، استخدم kubectl debug
الأمر لتشغيل حاوية مميزة على العقدة الخاصة بك.
لسرد العقد الخاصة بك، استخدم
kubectl get nodes
الأمر :kubectl get nodes -o wide
عينة الإخراج:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE aks-nodepool1-37663765-vmss000000 Ready agent 166m v1.25.6 10.224.0.33 <none> Ubuntu 22.04.2 LTS aks-nodepool1-37663765-vmss000001 Ready agent 166m v1.25.6 10.224.0.4 <none> Ubuntu 22.04.2 LTS aksnpwin000000 Ready agent 160m v1.25.6 10.224.0.62 <none> Windows Server 2022 Datacenter
kubectl debug
استخدم الأمر لبدء حاوية مميزة على العقدة والاتصال بها.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
عينة الإخراج:
Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000. If you don't see a command prompt, try pressing enter. root@aks-nodepool1-37663765-vmss000000:/#
لديك الآن حق الوصول إلى العقدة من خلال حاوية مميزة كحجيرة تصحيح الأخطاء.
إشعار
يمكنك التفاعل مع جلسة عمل العقدة عن طريق تشغيل
chroot /host
من الحاوية المميزة.
إنهاء وضع تصحيح أخطاء kubectl
عند الانتهاء من العقدة exit
الخاصة بك، أدخل الأمر لإنهاء جلسة shell التفاعلية. بعد إغلاق جلسة الحاوية التفاعلية، احذف جراب تصحيح الأخطاء المستخدم مع kubectl delete pod
.
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
اتصال وكيل Windows Server ل SSH
اتبع هذه الخطوات كحل بديل للاتصال ب SSH على عقدة Windows Server.
إنشاء خادم وكيل
في الوقت الحالي، لا يُمكنك الاتصال بعقدة Windows Server مباشرة باستخدامkubectl debug
. بدلا من ذلك، تحتاج أولا إلى الاتصال بعقدة أخرى في نظام المجموعة باستخدام kubectl
، ثم الاتصال بعقدة Windows Server من تلك العقدة باستخدام SSH.
للاتصال بعقدة أخرى في نظام المجموعة، استخدم kubectl debug
الأمر . لمزيد من المعلومات، اتبع الخطوات المذكورة أعلاه في قسم kubectl. قم بإنشاء اتصال SSH بعقدة Windows Server من عقدة أخرى باستخدام مفاتيح SSH المتوفرة عند إنشاء نظام مجموعة AKS وعنوان IP الداخلي لعقدة Windows Server.
هام
يمكن استخدام الخطوات التالية لإنشاء اتصال SSH بعقدة Windows Server من عقدة أخرى فقط إذا قمت بإنشاء نظام مجموعة AKS باستخدام Azure CLI مع المعلمة --generate-ssh-keys
. إذا كنت ترغب في استخدام مفاتيح SSH الخاصة بك بدلا من ذلك، يمكنك استخدام az aks update
لإدارة مفاتيح SSH على مجموعة AKS موجودة. لمزيد من المعلومات، راجع إدارة الوصول إلى عقدة SSH.
إشعار
إذا كانت عقدة وكيل Linux الخاصة بك معطلة أو غير مستجيبة، فاستخدم أسلوب Azure Bastion للاتصال بدلا من ذلك.
kubectl debug
استخدم الأمر لبدء حاوية مميزة على عقدة الوكيل (Linux) والاتصال بها.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
عينة الإخراج:
Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000. If you don't see a command prompt, try pressing enter. root@aks-nodepool1-37663765-vmss000000:/#
افتح نافذة طرفية جديدة واستخدم
kubectl get pods
الأمر للحصول على اسم الجراب الذي بدأهkubectl debug
.kubectl get pods
عينة الإخراج:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
في إخراج العينة، node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx هو اسم الجراب الذي بدأه
kubectl debug
.kubectl port-forward
استخدم الأمر لفتح اتصال بالجراب المنشور:kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
عينة الإخراج:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22
يبدأ المثال السابق في إعادة توجيه حركة مرور الشبكة من المنفذ
2022
على كمبيوتر التطوير إلى المنفذ22
على الجراب المنشور. عند استخدامkubectl port-forward
لفتح اتصال وإعادة توجيه نسبة استخدام الشبكة، يبقى الاتصال مفتوحًا حتى تقوم بإيقاف الأمرkubectl port-forward
.افتح محطة طرفية جديدة وقم بتشغيل الأمر
kubectl get nodes
لإظهار عنوان IP الداخلي لعقدة Windows Server:kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
عينة الإخراج:
NAME INTERNAL_IP aks-nodepool1-19409214-vmss000003 10.224.0.8
في المثال السابق، 10.224.0.62 هو عنوان IP الداخلي لعقدة Windows Server.
إنشاء اتصال SSH بعقدة Windows Server باستخدام عنوان IP الداخلي، والاتصال بالمنفذ
22
من خلال المنفذ2022
على كمبيوتر التطوير الخاص بك. اسم المستخدم الافتراضي لعقد AKS هو azureuser. اقبل المطالبة لمتابعة الاتصال. ثم يتم تزويدك بمطالبة bash لعقدة Windows Server:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
عينة الإخراج:
The authenticity of host '10.224.0.62 (10.224.0.62)' can't be established. ECDSA key fingerprint is SHA256:1234567890abcdefghijklmnopqrstuvwxyzABCDEFG. Are you sure you want to continue connecting (yes/no)? yes
إشعار
إذا كنت تفضل استخدام مصادقة كلمة المرور، فضمن المعلمة
-o PreferredAuthentications=password
. على سبيل المثال:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
استخدام حاوية عملية المضيف للوصول إلى عقدة Windows
أنشئ
hostprocess.yaml
بالمحتوى التالي واستبدلAKSWINDOWSNODENAME
باسم عقدة AKS Windows.apiVersion: v1 kind: Pod metadata: labels: pod: hpc name: hpc spec: securityContext: windowsOptions: hostProcess: true runAsUserName: "NT AUTHORITY\\SYSTEM" hostNetwork: true containers: - name: hpc image: mcr.microsoft.com/windows/servercore:ltsc2022 # Use servercore:1809 for WS2019 command: - powershell.exe - -Command - "Start-Sleep 2147483" imagePullPolicy: IfNotPresent nodeSelector: kubernetes.io/os: windows kubernetes.io/hostname: AKSWINDOWSNODENAME tolerations: - effect: NoSchedule key: node.kubernetes.io/unschedulable operator: Exists - effect: NoSchedule key: node.kubernetes.io/network-unavailable operator: Exists - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists
قم بتشغيل
kubectl apply -f hostprocess.yaml
لنشر حاوية عملية مضيف Windows (HPC) في عقدة Windows المحددة.استخدم
kubectl exec -it [HPC-POD-NAME] -- powershell
.يمكنك تشغيل أي أوامر PowerShell داخل حاوية HPC للوصول إلى عقدة Windows.
إشعار
تحتاج إلى تبديل المجلد الجذر إلى C:\
داخل حاوية HPC للوصول إلى الملفات في عقدة Windows.
SSH باستخدام Azure Bastion لنظام التشغيل Windows
إذا لم يكن من الممكن الوصول إلى عقدة وكيل Linux، فإن استخدام Azure Bastion كوكيل هو بديل. يتطلب هذا الأسلوب إعداد مضيف Azure Bastion للشبكة الظاهرية التي يوجد بها نظام المجموعة. راجع الاتصال ب Azure Bastion لمزيد من التفاصيل.
SSH باستخدام عناوين IP الخاصة من واجهة برمجة تطبيقات AKS (معاينة)
إذا لم يكن لديك حق الوصول إلى واجهة برمجة تطبيقات Kubernetes، يمكنك الوصول إلى خصائص مثل Node IP
ومن Node Name
خلال واجهة برمجة تطبيقات تجمع عامل AKS (معاينة)، (متوفرة في إصدارات المعاينة 07-02-2023
أو أعلى) للاتصال بعقد AKS.
هام
تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:
إنشاء اتصال shell تفاعلي بعقدة باستخدام عنوان IP
للراحة، يتم عرض عقد AKS على الشبكة الظاهرية لنظام المجموعة من خلال عناوين IP الخاصة. ومع ذلك، تحتاج إلى أن تكون في الشبكة الظاهرية لنظام المجموعة إلى SSH في العقدة. إذا لم يكن لديك بيئة مكونة بالفعل، يمكنك استخدام Azure Bastion لإنشاء وكيل يمكنك من خلاله SSH إلى عقد نظام المجموعة. تأكد من نشر Azure Bastion في نفس الشبكة الظاهرية مثل نظام المجموعة.
احصل على عناوين IP خاصة باستخدام
az aks machine list
الأمر ، مع استهداف جميع الأجهزة الظاهرية في تجمع عقدة معين مع العلامة--nodepool-name
.az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
يظهر إخراج المثال التالي عناوين IP الداخلية لجميع العقد في تجمع العقدة:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4 aks-nodepool1-33555069-vmss000001 10.224.0.6 IPv4 aks-nodepool1-33555069-vmss000002 10.224.0.4 IPv4
لاستهداف عقدة معينة داخل تجمع العقدة، استخدم العلامة
--machine-name
:az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
يظهر إخراج المثال التالي عنوان IP الداخلي لكافة العقدة المحددة:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
SSH إلى العقدة باستخدام عنوان IP الخاص الذي حصلت عليه في الخطوة السابقة. تنطبق هذه الخطوة على أجهزة Linux فقط. بالنسبة لأجهزة Windows، راجع الاتصال ب Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
الخطوات التالية
إذا كنت بحاجة إلى المزيد من بيانات استكشاف الأخطاء وإصلاحها، يمكنك عرض سجلات kubelet أو عرض سجلات وحدة التحكم Kubernetes.
للتعرف على إدارة مفاتيح SSH، راجع إدارة تكوين SSH.
Azure Kubernetes Service