Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A lo largo del ciclo de vida del clúster de Azure Kubernetes Service (AKS), finalmente debe 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.
En este artículo se describen dos opciones para la conexión segura con los nodos de Linux y Windows de AKS. 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 o la dirección IP privada del host.
Acceso a nodos con la API de Kubernetes
Este método requiere el comando .
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 estos pasos, necesita CLI de Azure versión 2.0.64 o posterior. Ejecute para comprobar la versión. Si necesita instalar o actualizar, consulte Install 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. Guarde el par de claves en el formato OpenSSH y evite formatos no admitidos como . 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 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 con kubectl debug
Para crear una conexión de shell interactiva, use el comando para ejecutar un contenedor con privilegios en el nodo.
Para enumerar los nodos, use el comando :
kubectl get nodes -o wideResultados 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 DatacenterUse el comando 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/azurelinux/busybox:1.36Resultados 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 ejecutando desde el contenedor privilegiado.
Salida del modo de depuración de kubectl
Cuando haya terminado con el nodo, escriba el comando 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 node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Conexión de 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 directamente a un nodo de Windows Server mediante kubectl debug. En su lugar, primero debe conectarse a otro nodo del clúster con kubectl y, a continuación, conectarse al nodo Windows Server desde ese nodo mediante SSH.
Para conectarse a otro nodo del clúster, use el comando . Para obtener más información, siga los pasos anteriores de la sección kubectl. Cree una conexión SSH al nodo 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 Windows Server.
Importante
Los pasos siguientes para crear la conexión SSH al nodo Windows Server desde otro nodo solo se pueden usar si creó el clúster de AKS mediante el CLI de Azure con el parámetro --generate-ssh-keys. Si quiere usar sus propias claves SSH en su lugar, puede usar el 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 proxy de Linux está inactivo o no responde, use el método Azure Bastion para conectarse en su lugar.
Use el comando 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/azurelinux/busybox:1.36Resultados 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 para obtener el nombre del pod iniciado por .
kubectl get podsResultados del ejemplo:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21sEn la salida de ejemplo, es el nombre del pod iniciado por .
Use el comando para abrir una conexión al pod implementado:
kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22Resultados del ejemplo:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22En el ejemplo anterior se comienza a reenviar el tráfico de red desde el puerto del equipo de desarrollo al puerto del pod implementado. Cuando se usa para abrir una conexión y reenviar el tráfico de red, la conexión permanece abierta hasta que se detiene el comando .
Abra un nuevo terminal y ejecute el comando
kubectl get nodespara mostrar la dirección IP interna del nodo Windows Server:kubectl get nodes -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 aksnpwin000000 10.224.0.62En el ejemplo anterior,
10.224.0.62es la dirección IP interna del nodo Windows Server.Cree una conexión SSH al nodo Windows Server mediante la dirección IP interna y conéctese al puerto
22a través del puerto2022en 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.62Resultados del ejemplo:
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)? yesNota:
Si prefiere usar la autenticación con contraseña, incluya el parámetro . Por ejemplo:
ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Usa un contenedor de procesos de host para acceder a un nodo de Windows
Ejecute el siguiente script para crear . En el script, reemplace
AKSWINDOWSNODENAMEpor el nombre de nodo de AKS Windows.Esta especificación usa la imagen base nanoserver. La imagen base no tiene PowerShell, pero porque se ejecuta como contenedor de procesos host (HPC), PowerShell está disponible en la máquina virtual subyacente.
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: ExistsEjecute
kubectl apply -f hostprocess.yamlpara implementar el HPC de Windows en el nodo de Windows especificado.Utilice .
Puede ejecutar cualquier comando de PowerShell dentro del contenedor de HPC para acceder al nodo Windows.
Nota:
Debe cambiar la carpeta raíz a C:\ dentro del contenedor de HPC para acceder a los archivos del nodo Windows.
SSH con Azure Bastion
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 en la que reside el clúster. Consulte Connect with Azure Bastion para obtener más información.
SSH con direcciones IP privadas de la red virtual del clúster
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 no tiene acceso a la API de Kubernetes, puede obtener acceso a propiedades como y a través de la API del grupo de agentes de AKS , (disponible en versiones estables o posteriores) para conectarse a los nodos de AKS. Obtenga direcciones IP privadas mediante el comando , que tengan como destino todas las máquinas virtuales de un grupo de nodos específico con la marca .
az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o tableLa 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 IPv4Para establecer como destino un nodo específico dentro del grupo de nodos, use la marca :
az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o tableEn la salida de ejemplo siguiente se muestra la dirección IP interna del nodo especificado:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4Conéctese a través de SSH al nodo mediante la dirección IP privada que obtuvo en el paso anterior. Este paso solo se aplica a los nodos de Linux.
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.