مشاركة عبر


اتصل بعُقد مجموعة 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 الأمر لتشغيل حاوية مميزة على العقدة الخاصة بك.

  1. لسرد العقد الخاصة بك، استخدم 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
    
  2. 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 للاتصال بدلا من ذلك.

  1. 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:/#
    
  2. افتح نافذة طرفية جديدة واستخدم 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.

  3. 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.

  4. افتح محطة طرفية جديدة وقم بتشغيل الأمر 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.

  5. إنشاء اتصال 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

  1. أنشئ 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
    
  2. قم بتشغيل kubectl apply -f hostprocess.yaml لنشر حاوية عملية مضيف Windows (HPC) في عقدة Windows المحددة.

  3. استخدم kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. يمكنك تشغيل أي أوامر 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 في نفس الشبكة الظاهرية مثل نظام المجموعة.

  1. احصل على عناوين 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
    
  2. SSH إلى العقدة باستخدام عنوان IP الخاص الذي حصلت عليه في الخطوة السابقة. تنطبق هذه الخطوة على أجهزة Linux فقط. بالنسبة لأجهزة Windows، راجع الاتصال ب Azure Bastion.

    ssh -i /path/to/private_key.pem azureuser@10.224.0.33
    

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

إذا كنت بحاجة إلى المزيد من بيانات استكشاف الأخطاء وإصلاحها، يمكنك عرض سجلات kubelet أو عرض سجلات وحدة التحكم Kubernetes.

للتعرف على إدارة مفاتيح SSH، راجع إدارة تكوين SSH.