إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
طوال دورة حياة نظام مجموعة 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 Datacenterkubectl 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.تستخدم هذه المواصفات الصورة الأساسية لخادم النانو. لا تحتوي الصورة الأساسية على PowerShell، ولكن نظرا لأنها تعمل كحاوية عملية مضيفة (HPC)، يتوفر PowerShell في الجهاز الظاهري الأساسي.
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/nanoserver:ltsc2022 # Use nanoserver: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 IPNode Name من خلال AKS agent pool API ، (متوفر على إصدارات مستقرة 07-01-2024 أو أعلى) للاتصال بعقد 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 IPv4SSH إلى العقدة باستخدام عنوان IP الخاص الذي حصلت عليه في الخطوة السابقة. تنطبق هذه الخطوة على أجهزة Linux فقط. بالنسبة لأجهزة Windows، راجع الاتصال ب Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
الخطوات التالية
إذا كنت بحاجة إلى المزيد من بيانات استكشاف الأخطاء وإصلاحها، يمكنك عرض سجلات kubelet أو عرض سجلات وحدة التحكم Kubernetes.
للتعرف على إدارة مفاتيح SSH، راجع إدارة تكوين SSH.