Conexión a los nodos de clúster de Azure Kubernetes Service (AKS) para mantenimiento o solución de problemas
Durante el ciclo de vida del clúster de Azure Kubernetes Service (AKS), es posible que necesite acceder directamente a un nodo de AKS. Este acceso podría ser para mantenimiento, recopilación de registros u otras operaciones de solución de problemas.
Puede acceder a un nodo a través de la autenticación, con métodos que varían en función del sistema operativo del nodo y del método de conexión. Puede autenticarse de forma segura en nodos de AKS Linux y Windows mediante dos opciones que se describen en este artículo. Una requiere que tenga acceso a la API de Kubernetes y la otra es a través de la API de ARM para AKS, que proporciona información de IP privada directa. Por motivos de seguridad, los nodos de AKS no están expuestos a Internet. En su lugar, para conectarse directamente a cualquier nodo de AKS, debe usar kubectl debug
o la dirección IP privada del host.
Acceso a nodos mediante la API de Kubernetes
Este método requiere el uso del comando kubectl debug
.
Antes de empezar
En esta guía se muestra cómo crear una conexión a un nodo de AKS y actualizar la clave SSH del clúster de AKS. Para seguir los pasos, debe usar la CLI de Azure que admita la versión 2.0.64 o posterior. Ejecute az --version
para comprobar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Complete estos pasos si no tiene una clave SSH. Cree una clave SSH en función de la imagen del sistema operativo del nodo, para macOS y Linux o Windows. Asegúrese de que guarda el par de claves en formato OpenSSH y evite formatos no admitidos, como .ppk
. A continuación, consulte Administración de la configuración de SSH para agregar la clave al clúster.
Linux y macOS
Los usuarios de Linux y macOS pueden acceder a su nodo mediante kubectl debug
o su dirección IP privada. Los usuarios de Windows deben ir directamente a la sección Proxy de Windows Server para obtener una solución alternativa a SSH a través del proxy.
Conexión mediante la depuración de kubectl
Para crear una conexión de shell interactiva, use el comando kubectl debug
para ejecutar un contenedor con privilegios en el nodo.
Para enumerar los nodos, use el comando
kubectl get nodes
:kubectl get nodes -o wide
Resultados del ejemplo:
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
Use el comando
kubectl debug
para iniciar un contenedor con privilegios en el nodo y conectarse a él.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Resultados del ejemplo:
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:/#
Ahora tiene acceso al nodo a través de un contenedor con privilegios como pod de depuración.
Nota:
Puede interactuar con la sesión de nodo mediante la ejecución de
chroot /host
desde el contenedor con privilegios.
Salida del modo de depuración de kubectl
Cuando haya terminado con el nodo, escriba el comando exit
para finalizar la sesión interactiva del shell. Una vez que se cierre la sesión interactiva del contenedor, elimine el pod de depuración usado con kubectl delete pod
.
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Conexión del proxy de Windows Server para SSH
Siga estos pasos como solución alternativa para conectarse con SSH en un nodo de Windows Server.
Creación de un servidor proxy
En este momento, no se puede conectar a un nodo de Windows Server directamente con kubectl debug
. En su lugar, primero debe conectarse a otro nodo del clúster con kubectl
y, luego, conectarse al nodo de Windows Server desde ese nodo mediante SSH.
Para conectarse a otro nodo del clúster, use el comando kubectl debug
. Para más información, siga los pasos anteriores en la sección kubectl. Cree una conexión SSH al nodo de Windows Server desde otro nodo mediante las claves SSH proporcionadas al crear el clúster de AKS y la dirección IP interna del nodo de Windows Server.
Importante
Los pasos siguientes para crear la conexión SSH al nodo de Windows Server desde otro nodo solo se pueden utilizar si ha creado el clúster de AKS mediante la CLI de Azure con el parámetro --generate-ssh-keys
. Si quiere usar sus propias claves SSH en su lugar, puede usar el az aks update
para administrar las claves SSH en un clúster de AKS existente. Para más información, consulte Administración del acceso al nodo con SSH.
Nota:
Si el nodo del proxy de Linux está inactivo o no responde, use el método de Azure Bastion para conectarse.
Use el comando
kubectl debug
para iniciar un contenedor con privilegios en el nodo (Linux) del proxy y conectarse a él.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Resultados del ejemplo:
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:/#
Abra una nueva ventana de terminal y use el comando
kubectl get pods
para obtener el nombre del pod iniciado porkubectl debug
.kubectl get pods
Resultados del ejemplo:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
En la salida del ejemplo, node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx es el nombre del pod iniciado por
kubectl debug
.Use el comando
kubectl port-forward
para abrir una conexión al pod implementado:kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
Resultados del ejemplo:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22
En el ejemplo anterior se comienza a reenviar el tráfico de red desde el puerto
2022
del equipo de desarrollo al puerto22
del pod implementado. Cuando se usakubectl port-forward
para abrir una conexión y reenviar el tráfico de red, la conexión permanece abierta hasta que se detiene el comandokubectl port-forward
.Abra un nuevo terminal y ejecute el comando
kubectl get nodes
para mostrar la dirección IP interna del nodo de Windows Server:kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
Resultados del ejemplo:
NAME INTERNAL_IP aks-nodepool1-19409214-vmss000003 10.224.0.8
En el ejemplo anterior, 10.224.0.62 es la dirección IP interna del nodo de Windows Server.
Cree una conexión SSH al nodo de Windows Server mediante la dirección IP interna y conéctese al puerto
22
mediante el puerto2022
en el equipo de desarrollo. El nombre de usuario para los nodos de AKS es azureuser. Acepte el mensaje para continuar con la conexión. Luego, se le proporciona el símbolo del sistema de bash del nodo de Windows Server:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
Salida de muestra:
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
Nota:
Si prefiere usar la autenticación con contraseña, incluya el parámetro
-o PreferredAuthentications=password
. Por ejemplo:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Uso del contenedor de procesos de host para acceder al nodo de Windows
Cree
hostprocess.yaml
con el siguiente contenido y reemplaceAKSWINDOWSNODENAME
por el nombre del nodo de Windows de AKS.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
Ejecute
kubectl apply -f hostprocess.yaml
para implementar el contenedor de procesos de host (HPC) de Windows en el nodo de Windows especificado.Use
kubectl exec -it [HPC-POD-NAME] -- powershell
.Para acceder al nodo de Windows puede ejecutar cualquier comando de PowerShell dentro del contenedor de HPC.
Nota:
Para acceder a los archivos del nodo de Windows, debe cambiar la carpeta raíz a C:\
dentro del contenedor de HPC.
Conexión a través de SSH mediante Azure Bastion para Windows
Si el nodo de proxy de Linux no es accesible, el uso de Azure Bastion como proxy es una alternativa. Este método requiere que configure un host de Azure Bastion para la red virtual donde reside el clúster. Consulte Conexión con Azure Bastion para más información.
Conexión a través de SSH mediante direcciones IP privadas desde la API de AKS (versión preliminar)
Si no tiene acceso a la API de Kubernetes, puede acceder a propiedades como Node IP
y Node Name
mediante la API del grupo de agentes de AKS (versión preliminar), (disponible en versiones preliminares 07-02-2023
u otras posteriores) para conectarse a los nodos de AKS.
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Creación de una conexión de shell interactiva a un nodo mediante la dirección IP
Para mayor comodidad, los nodos de AKS se exponen en la red virtual del clúster mediante direcciones IP privadas. Sin embargo, debe estar en la red virtual del clúster para conectarse mediante SSH al nodo. Si aún no tiene configurado un entorno, puede usar Azure Bastion para establecer un proxy desde el que puede conectarse mediante SSH a los nodos del clúster. Asegúrese de que Azure Bastion está implementado en la misma red virtual que el clúster.
Obtenga direcciones IP privadas mediante el comando
az aks machine list
, que tengan como destino todas las máquinas virtuales de un grupo de nodos específico con la marca--nodepool-name
.az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
La salida del ejemplo siguiente muestra las direcciones IP internas de todos los nodos del grupo de nodos:
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
Para establecer como destino un nodo específico dentro del grupo de nodos, use la marca
--machine-name
:az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
La salida del ejemplo siguiente muestra las direcciones IP internas de todos los nodos especificados:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
Conéctese a través de SSH al nodo mediante la dirección IP privada que obtuvo en el paso anterior. Este paso solo es aplicable a las máquinas Linux. Para máquinas Windows, consulte Conexión con Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
Pasos siguientes
Si necesita datos adicionales para la solución de problemas, puede ver los registros de kubelet o ver los registros del plano de control de Kubernetes.
Para obtener información sobre la administración de las claves SSH, consulte Administración de la configuración de SSH.
Azure Kubernetes Service