Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
На протяжении всего жизненного цикла кластера Служба Azure Kubernetes (AKS) вам в конечном итоге потребуется напрямую получить доступ к узлу AKS. Этот доступ может быть для операций обслуживания, сбора журналов или устранения неполадок.
Вы обращаетесь к узлу через проверку подлинности, какие методы зависят от операционной системы узла и метода подключения. Вы безопасно проходите проверку подлинности на узлах AKS Linux и Windows с помощью двух вариантов, рассмотренных в этой статье. Для одного из них требуется доступ к API Kubernetes, а другой — через API ARM AKS, который предоставляет прямые частные IP-адреса. По соображениям безопасности узлы AKS не подключены к Интернету. Вместо этого для непосредственного подключения к любым узлам AKS необходимо использовать kubectl debug частный IP-адрес узла.
Доступ к узлам с помощью API Kubernetes
Для этого метода требуется использование kubectl debug команды.
Прежде чем начать
В этом руководстве показано, как создать подключение к узлу AKS и обновить ключ SSH кластера AKS. Чтобы выполнить действия, необходимо использовать Azure CLI, поддерживающую версию 2.0.64 или более позднюю. Чтобы узнать номер версии, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Выполните эти действия, если у вас нет ключа SSH. Создайте ключ SSH в зависимости от образа ОС узла, для macOS и Linux или Windows. Обязательно сохраните пару ключей в формате OpenSSH, избегайте неподдерживаемых форматов, таких как .ppk. Затем перейдите к управлению конфигурацией SSH, чтобы добавить ключ в кластер.
Linux и macOS
Пользователи Linux и macOS могут получить доступ к своему узлу с помощью kubectl debug или частного IP-адреса. Пользователи Windows должны перейти к разделу прокси-сервера Windows Server для обходного решения по протоколу SSH через прокси-сервер.
Подключение с использованием kubectl debug
Чтобы создать интерактивное подключение оболочки, используйте команду 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, чтобы завершить интерактивный сеанс оболочки. После закрытия интерактивного сеанса контейнера удалите модуль pod отладки, используемый с 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команду, чтобы получить имя модуля pod, запущенного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 — это имя pod, который был запущен с помощью
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в развернутом модуле pod. При использовании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-адреса и подключитесь к порту через порт
222022на компьютере разработки. Имя пользователя по умолчанию для узлов 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на имя узла Windows AKS.Эта спецификация использует базовый образ nanoserver. Базовый образ не имеет 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.Для доступа к узлу Windows можно выполнять любые команды PowerShell в контейнере HPC.
Примечание.
Чтобы получить доступ к файлам на узле Windows, необходимо переключить корневую папку на C:\ в контейнере HPC.
SSH с помощью Бастиона Azure для Windows
Если ваш прокси-узел Linux недоступен, использование Бастиона Azure в качестве прокси-сервера является альтернативой. Для этого метода требуется настроить узел Бастиона Azure для виртуальной сети, в которой находится кластер. Дополнительные сведения см. в статье «Подключение к Azure Bastion».
SSH с использованием частных IP-адресов через API AKS
Если у вас нет доступа к API Kubernetes, вы можете получить доступ к таким свойствам, как Node IPNode NameAPI пула агентов AKS (доступно в стабильных версиях или более поздних версиях 07-01-2024 ), чтобы подключиться к узлам AKS.
Создайте интерактивное подключение оболочки к узлу с помощью IP-адреса.
Для удобства узлы AKS предоставляются в виртуальной сети кластера через частные IP-адреса. Однако вам нужно находиться в виртуальной сети кластера, чтобы подключиться к узлу по SSH. Если у вас еще нет настроенной среды, можно использовать Бастион Azure для создания прокси-сервера, из которого можно использовать SSH для узлов кластера. Убедитесь, что бастион Azure развернут в той же виртуальной сети, что и кластер.
Получите частные 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".