Bakım veya sorun giderme amacıyla Azure Kubernetes Service (AKS) kümesi düğümlerine bağlanma

Azure Kubernetes Service (AKS) kümenizin yaşam döngüsü boyunca bir AKS düğümüne doğrudan erişmeniz gerekir. Bu erişim bakım, günlük toplama veya sorun giderme işlemleri için olabilir.

Bir düğüme kimlik doğrulaması aracılığıyla erişebilirsiniz. Bu yöntemler Düğüm işletim sisteminize ve bağlantı yönteminize bağlı olarak değişir. Bu makalede açıklanan iki seçenek aracılığıyla AKS Linux ve Windows düğümlerinde güvenli bir şekilde kimlik doğrulaması yaparsınız. Bunlardan biri Kubernetes API erişimine sahip olmanız, diğeri ise doğrudan özel IP bilgileri sağlayan AKS ARM API'sini kullanmanız gerekir. Güvenlik nedeniyle AKS düğümleri İnternet'e sunulmaz. Bunun yerine, herhangi bir AKS düğümüne doğrudan bağlanmak için kubectl debug konağın özel IP adresini kullanmanız gerekir.

Kubernetes API'sini kullanarak düğümlere erişme

Bu yöntem komut kullanımını kubectl debug gerektirir.

Başlamadan önce

Bu kılavuzda AKS düğümüne bağlantı oluşturma ve AKS kümenizin SSH anahtarını güncelleştirme adımları gösterilmektedir. Adımları izlemek için 2.0.64 veya sonraki bir sürümü destekleyen Azure CLI kullanmanız gerekir. Sürümü denetlemek için komutunu çalıştırın az --version . Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

SSH anahtarınız yoksa bu adımları tamamlayın. Node İşletim Sistemi Görüntünüze bağlı olarak, macOS ve Linux veya Windows için bir SSH anahtarı oluşturun. Anahtar çiftini OpenSSH biçiminde kaydettiğinizden emin olun, gibi .ppkdesteklenmeyen biçimlerden kaçının. Ardından, anahtarı kümenize eklemek için SSH yapılandırmasını yönetme bölümüne bakın.

Linux ve macOS

Linux ve macOS kullanıcıları, düğümlerine veya özel IP Adreslerini kullanarak kubectl debug erişebilir. Ara sunucu aracılığıyla SSH'ye geçici bir çözüm için Windows kullanıcıları Windows Server Proxy bölümüne atlamalıdır.

kubectl hata ayıklama kullanarak bağlanma

Etkileşimli kabuk bağlantısı oluşturmak için komutunu kullanarak kubectl debug düğümünüzde ayrıcalıklı bir kapsayıcı çalıştırın.

  1. Düğümlerinizi listelemek için komutunu kubectl get nodes kullanın:

    kubectl get nodes -o wide
    

    Örnek çıkış:

    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. Komutunu kullanarak kubectl debug düğümünüzde ayrıcalıklı bir kapsayıcı başlatın ve bu kapsayıcıya bağlanın.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
    

    Örnek çıkış:

    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:/#
    

    Artık hata ayıklama podu olarak ayrıcalıklı bir kapsayıcı üzerinden düğüme erişebilirsiniz.

    Not

    Ayrıcalıklı kapsayıcıdan komutunu çalıştırarak chroot /host düğüm oturumuyla etkileşim kurabilirsiniz.

Kubectl hata ayıklama modundan çıkma

Düğümünüzü bitirdiğinizde etkileşimli kabuk oturumunu exit sonlandırmak için komutunu girin. Etkileşimli kapsayıcı oturumu kapatıldıktan sonra ile kubectl delete podkullanılan hata ayıklama podunu silin.

kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx

SSH için Windows Server proxy bağlantısı

Windows Server düğümünde SSH'ye bağlanmak için geçici çözüm olarak bu adımları izleyin.

Ara sunucu oluşturma

Şu anda kullanarak kubectl debugbir Windows Server düğümüne doğrudan bağlanamazsınız. Bunun yerine, önce ile kubectlkümedeki başka bir düğüme bağlanmanız ve ardından SSH kullanarak bu düğümden Windows Server düğümüne bağlanmanız gerekir.

Kümedeki başka bir düğüme bağlanmak için komutunu kullanın kubectl debug . Daha fazla bilgi için kubectl bölümündeki yukarıdaki adımları izleyin. AKS kümesini oluştururken sağlanan SSH anahtarlarını ve Windows Server düğümünün iç IP adresini kullanarak başka bir düğümden Windows Server düğümüne bir SSH bağlantısı oluşturun.

Önemli

Başka bir düğümden Windows Server düğümüne SSH bağlantısı oluşturmak için aşağıdaki adımlar yalnızca AZURE CLI kullanarak AKS kümenizi parametresiyle --generate-ssh-keys oluşturduysanız kullanılabilir. Bunun yerine kendi SSH anahtarlarınızı kullanmak istiyorsanız, mevcut bir AKS kümesindeki SSH anahtarlarını yönetmek için komutunu kullanabilirsiniz az aks update . Daha fazla bilgi için bkz . SSH düğümü erişimini yönetme.

Not

Linux proxy düğümünüz çalışmıyorsa veya yanıt vermiyorsa, bunun yerine bağlanmak için Azure Bastion yöntemini kullanın.

  1. Komutunu kullanarak kubectl debug ara sunucu (Linux) düğümünüzde ayrıcalıklı bir kapsayıcı başlatın ve bu kapsayıcıya bağlanın.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
    

    Örnek çıkış:

    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. Yeni bir terminal penceresi açın ve tarafından kubectl debugbaşlatılan podun adını almak için komutunu kullanınkubectl get pods.

    kubectl get pods
    

    Örnek çıkış:

    NAME                                                    READY   STATUS    RESTARTS   AGE
    node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx   1/1     Running   0          21s
    

    Örnek çıktıda node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx tarafından kubectl debugbaşlatılan podun adıdır.

  3. Dağıtılan kubectl port-forward podla bağlantı açmak için komutunu kullanın:

    kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
    

    Örnek çıkış:

    Forwarding from 127.0.0.1:2022 -> 22
    Forwarding from [::1]:2022 -> 22
    

    Önceki örnek, dağıtım bilgisayarınızdaki bağlantı noktasından 2022 dağıtılan pod üzerindeki bağlantı noktasına 22 ağ trafiğini iletmeye başlar. Bağlantı açmak ve ağ trafiğini iletmek için kullanırken kubectl port-forward , siz komutu durdurana kubectl port-forward kadar bağlantı açık kalır.

  4. Yeni bir terminal açın ve Windows Server düğümünün iç IP adresini göstermek için komutunu kubectl get nodes çalıştırın:

    kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
    

    Örnek çıkış:

    NAME                                INTERNAL_IP
    aks-nodepool1-19409214-vmss000003   10.224.0.8
    

    Önceki örnekte 10.224.0.62 , Windows Server düğümünün iç IP adresidir.

  5. İç IP adresini kullanarak Windows Server düğümüne bir SSH bağlantısı oluşturun ve geliştirme bilgisayarınızdaki bağlantı noktası üzerinden bağlantı noktasına 22 2022 bağlanın. AKS düğümleri için varsayılan kullanıcı adı azureuser'dır. Bağlantıyla devam etmek için istemi kabul edin. Ardından Windows Server düğümünüzün bash istemiyle birlikte sunulur:

    ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
    

    Örnek çıkış:

    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
    

    Not

    Parola kimlik doğrulamasını kullanmayı tercih ediyorsanız parametresini -o PreferredAuthentications=passwordekleyin. Örneğin:

     ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
    

Windows düğümüne erişmek için Konak İşlem Kapsayıcısı kullanma

  1. Aşağıdaki içerikle oluşturun hostprocess.yaml ve yerine AKSWINDOWSNODENAME AKS Windows düğüm adı yazın.

    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. Belirtilen Windows düğümünde Windows ana bilgisayar işlem kapsayıcısını (HPC) dağıtmak için komutunu çalıştırın kubectl apply -f hostprocess.yaml .

  3. kubectl exec -it [HPC-POD-NAME] -- powershell adresini kullanın.

  4. Windows düğümüne erişmek için HPC kapsayıcısının içinde herhangi bir PowerShell komutu çalıştırabilirsiniz.

Not

Windows düğümündeki dosyalara erişmek için C:\ kök klasörü HPC kapsayıcısının içine geçirmeniz gerekir.

Windows için Azure Bastion kullanarak SSH

Linux proxy düğümünüze ulaşılamıyorsa, ara sunucu olarak Azure Bastion'ı kullanmak alternatif bir seçenektir. Bu yöntem, kümenin bulunduğu sanal ağ için bir Azure Bastion konağı ayarlamanızı gerektirir. Diğer ayrıntılar için bkz . Azure Bastion ile bağlanma.

AKS API'sinden özel IP'leri kullanarak SSH (önizleme)

Kubernetes API'sine erişiminiz yoksa AKS düğümlerine bağlanmak için AKS aracı havuzu API'si (önizleme), (önizleme sürümlerinde veya üzeri sürümlerde 07-02-2023 kullanılabilir) gibi Node IP Node Name özelliklere erişebilirsiniz.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

IP adresini kullanarak düğüme etkileşimli kabuk bağlantısı oluşturma

Kolaylık sağlamak için AKS düğümleri özel IP adresleri aracılığıyla kümenin sanal ağında kullanıma sunulur. Ancak düğüme SSH'ye kümenin sanal ağında olmanız gerekir. Henüz yapılandırılmış bir ortamınız yoksa Azure Bastion'ı kullanarak küme düğümlerine SSH yapabileceğiniz bir ara sunucu oluşturabilirsiniz. Azure Bastion'ın kümeyle aynı sanal ağda dağıtıldığından emin olun.

  1. komutunu kullanarak, bayrağıyla az aks machine list belirli bir düğüm havuzundaki tüm VM'leri hedefleyen özel IP'leri --nodepool-name alın.

    az aks machine list --resource-group myResourceGroup  --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
    

    Aşağıdaki örnek çıktı, düğüm havuzundaki tüm düğümlerin iç IP adreslerini gösterir:

    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
    

    Düğüm havuzunun içindeki belirli bir düğümü hedeflemek için bayrağını --machine-name kullanın:

    az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
    

    Aşağıdaki örnek çıktı, belirtilen tüm düğümün iç IP adresini gösterir:

    Name                               Ip         Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    
  2. Önceki adımda aldığınız özel IP adresini kullanarak düğüme SSH. Bu adım yalnızca Linux makineleri için geçerlidir. Windows makineleri için bkz . Azure Bastion ile bağlanma.

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

Sonraki adımlar

Daha fazla sorun giderme verisine ihtiyacınız varsa kubelet günlüklerini görüntüleyebilir veya Kubernetes denetim düzlemi günlüklerini görüntüleyebilirsiniz.

SSH anahtarlarınızı yönetme hakkında bilgi edinmek için bkz . SSH yapılandırmasını yönetme.