Pourquoi ne puis-je pas accéder via SSH à mon noeud worker ?
Cloud privé virtuel Infrastructure classique
Vous ne pouvez pas accéder à votre nœud worker à l'aide d'une connexion SSH.
La connexion SSH par mot de passe n'est pas disponible sur les noeuds worker.
Pour exécuter des actions sur chaque nœud de travail, utilisez une Kubernetes DaemonSet, ou utilisez des tâches pour
les actions ponctuelles.
Pour obtenir un accès hôte aux noeuds worker à des fins de débogage et de traitement des incidents, passez en revue les options suivantes.
Débogage avec la commande oc debug
Utilisez la commande oc debug node pour déployer un pod avec un contexte securityContext privilégié sur un noeud worker pour lequel vous souhaitez effectuer une opération de traitement des incidents.
Le pod de débogage est déployé avec un interpréteur de commandes interactif afin de vous permettre d'accéder au noeud worker juste après la création du pod. Pour plus d'informations sur le fonctionnement de la commande oc debug node,
voir Ce post de blogue Red Hat.
-
Obtenez le nom du noeud worker auquel vous souhaitez accéder. Pour les noeuds worker CoreOS, le nom est le nom d'hôte de l'agent. Pour tous les autres noeuds worker, le nom de noeud worker est l'adresse IP privée.
oc get nodes -o wide -
Créez un pod de débogage qui dispose d'un accès hôte. Lorsque le pod est créé, son interpréteur de commandes interactif s'ouvre automatiquement. Si la commande
oc debug nodeéchoue, passez à l'option 2.oc debug node/<NODE_NAME>Si la commande
oc debug node/<NODE_NAME>échoue, il se peut que des règles de groupe de sécurité, de liste de contrôle d'accès ou de pare-feu empêchent l'extraction de l'image de conteneur par défaut. Réessayez la commande en utilisant l'option «--image=us.icr.io/armada-master/network-alpine:latest», qui utilise une image provenant de IBM Cloud Container Registry et accessible via le réseau privé. -
Exécutez des commandes de débogage pour collecter des informations et traiter les incidents. Les commandes que vous pouvez utiliser pour le débogage, par exemple
tcpdump,curl,ip,ifconfig,nc,pingetps, sont déjà disponibles dans l'interpréteur de commandes. Vous pouvez également installer d'autres outils, tels quemtretconntrack, en exécutantyum install <tool>.
Débogage avec la commande kubectl exec
Si vous ne parvenez pas à utiliser la commande oc debug node, vous pouvez créer un pod Alpine avec un contexte securityContext privilégié et utiliser la commande kubectl exec pour exécuter des commandes
de débogage à partir de l'interpréteur de commandes interactif du pod.
-
Obtenez le nom du noeud worker auquel vous souhaitez accéder. Pour les noeuds worker CoreOS, le nom est le nom d'hôte de l'agent. Pour tous les autres noeuds worker, le nom de noeud worker est l'adresse IP privée.
oc get nodes -o wide -
Exportez le nom dans une variable d'environnement.
export NODE=<NODE_NAME> -
Créez un pod de débogage sur le noeud worker. L'image Alpine Docker ici est utilisée à titre d'exemple. Si le nœud de travail ne dispose pas d'un accès au réseau public, vous pouvez conserver une copie de l'image à des fins de débogage dans votre propre référentiel ICR ou créer une image personnalisée à l'aide d'autres outils afin de l'adapter à vos besoins.
kubectl apply -f - << EOF apiVersion: v1 kind: Pod metadata: name: debug-${NODE} namespace: default spec: tolerations: - operator: "Exists" hostNetwork: true containers: - args: ["-c", "sleep 20d"] command: ["/bin/sh"] image: us.icr.io/armada-master/network-alpine:latest imagePullPolicy: Always name: debug securityContext: privileged: true volumeMounts: - mountPath: /host name: host-volume volumes: - name: host-volume hostPath: path: / nodeSelector: kubernetes.io/hostname: ${NODE} restartPolicy: Never EOF -
Connectez-vous au pod de débogage. L'interpréteur de commandes interactif du pod s'ouvre automatiquement. Si la commande
kubectl execéchoue, passez à l'option 3.kubectl exec -it debug-${NODE} -- shPour récupérer des fichiers journaux ou d'autres fichiers depuis un nœud de travail, utilisez la commande «
**kubectl cp**» selon le format suivant. L'exemple suivant récupère le fichier «/var/log/messages» à partir du système de fichiers hôte du nœud de travail.oc cp default/debug-${NODE}:/host/var/log/messages ./messagesRécupèrez les journaux suivants pour rechercher des problèmes sur le noeud worker.
/var/log/messages /var/log/kubelet.log /var/log/crio.log /var/log/calico/cni/cni.log -
Exécutez des commandes de débogage pour collecter des informations et traiter les incidents. Les commandes que vous pourriez utiliser pour le débogage, telles que
dig,tcpdump,mtr,curl,ip,ifconfig,nc,pingetps, sont déjà disponibles dans le shell. Vous pouvez également installer d'autres outils, tels queconntrack, en exécutantapk add <tool>. Par exemple, pour ajouterconntrack, exécutezapk add conntrack-tools. -
Supprimez le pod d'accès hôte que vous avez créé à des fins de débogage.
kubectl delete pod debug-${NODE}
Débogage en activant l'accès SSH root sur un noeud worker
Si vous ne parvenez pas à utiliser les commandes oc debug node ou kubectl exec, par exemple si la connexion VPN entre le maître cluster et les noeuds worker est rompue, vous pouvez créer un pod qui active l'accès SSH
racine et copie une clé SSH publique sur le noeud worker pour un accès SSH.
Autoriser l'accès SSH racine entraîne un risque de sécurité. Vous ne devez autoriser l'accès SSH que lorsque cela est nécessaire et qu'aucune autre option ne permet de déboguer les problèmes de noeud worker. Lorsque vous avez terminé l'identification et la résolution des incidents, veillez à suivre les étapes de la section Nettoyage après le débogage pour désactiver l'accès SSH.
-
Choisissez une clé SSH publique existant ou créez-en une nouvelle.
ssh-keygen -f /tmp/id_rsa_cluster_worker -t rsa -b 4096 -C temp-worker-ssh-key -P '' ls /tmpid_rsa_cluster_worker id_rsa_cluster_worker.pubcat /tmp/id_rsa_cluster_worker.pub -
Obtenez le nom du noeud worker auquel vous souhaitez accéder. Pour les noeuds worker CoreOS, le nom est le nom d'hôte de l'agent. Pour tous les autres noeuds worker, le nom de noeud worker est l'adresse IP privée.
oc get nodes -o wide -
Créez le fichier YAML suivant pour un pod de débogage et sauvegardez-le fichier sous le nom
enable-ssh.yaml. Remplacez<NODE_NAME>par le nom du noeud worker et remplacez l'exemplevaluepourSSH_PUBLIC_KEYpar votre clé SSH publique. L'image Alpine Docker ici est utilisée à titre d'exemple. Si le nœud de travail ne dispose pas d'un accès au réseau public, vous pouvez conserver une copie de l'image dans votre propre référentiel ICR à des fins de débogage, ou créer une image personnalisée à l'aide d'autres outils afin de l'adapter à vos besoins.apiVersion: v1 kind: Pod metadata: name: enable-ssh-<NODE_NAME> labels: name: enable-ssh spec: tolerations: - operator: "Exists" hostNetwork: true hostPID: true hostIPC: true containers: - image: us.icr.io/armada-master/network-alpine:latest env: - name: SSH_PUBLIC_KEY value: "<ssh-rsa AAA...ZZZ temp-worker-ssh-key>" args: ["-c", "echo $(SSH_PUBLIC_KEY) | tee -a /root/.ssh/authorized_keys && sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/g' /host/etc/ssh/sshd_config && sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/g' /host/etc/ssh/sshd_config.d/40-rhcos-defaults.conf || true && killall -1 sshd || yes n | ssh-keygen -f /host/etc/ssh/ssh_host_rsa_key -t rsa -b 4096 -C temp-server-ssh-key -P '' && while true; do sleep 86400; done"] command: ["/bin/sh"] name: enable-ssh securityContext: privileged: true volumeMounts: - mountPath: /host name: host-volume - mountPath: /root/.ssh name: ssh-volume volumes: - name: host-volume hostPath: path: / - name: ssh-volume hostPath: path: /root/.ssh nodeSelector: kubernetes.io/hostname: <NODE_NAME> restartPolicy: Never -
Créez le pod dans votre cluster. Lorsque ce pod est créé, votre clé publique est ajoutée au noeud worker et SSH est configuré pour autoriser la connexion SSH racine.
oc apply -f enable-ssh.yaml -
Utilisez le réseau privé ou le réseau public pour accéder au noeud worker à l'aide de votre clé SSH.
Connexion SSH à l'agent sur le réseau privé
Créez une nouvelle instance de serveur ou choisissez-en une qui existe avec un accès au même réseau privé que le noeud worker. Pour les clusters VPC, l'instance de serveur virtuel doit se trouver dans le même VPC que le nœud de travail.
Pour les clusters classiques, l'appareil peut accéder au nœud de travail depuis n'importe quel VLAN privé si la fonction de routeur virtuel(VRF) ou l'extension de VLAN est activée. Sinon, l'unité doit exister sur le même VLAN privé que le noeud worker.
-
Copiez votre clé privée SSH de l'étape 1 depuis votre machine locale sur cette instance de serveur.
scp <SSH_private_key_location> <user@host>:/.ssh/id_rsa_worker_private -
Ouvrez une session SSH sur l'instance de serveur.
-
Définissez les droits corrects d'utilisation de la clé privée SSH que vous avez copiée.
chmod 400 ~/.ssh/id_rsa_worker_private -
Utilisez la clé privée pour vous connecter via SSH au noeud worker que vous avez trouvé à l'étape 2.
ssh -i ~/.ssh/id_rsa_worker_private root@<WORKER_PRIVATE_IP>
Connexion SSH au noeud worker sur le réseau public
Déboguez des clusters classiques reliés à un réseau VLAN public en vous connectant aux noeuds worker.
-
Créez une règle réseau globale Calico nommée
ssh-openpour autoriser le trafic SSH entrant sur le port 22.calicoctl apply -f - <<EOF apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: ssh-open spec: selector: ibm.role == 'worker_public' ingress: - action: Allow protocol: TCP destination: ports: - 22 order: 1500 EOF -
Identifiez l'adresse IP publique de votre noeud worker.
oc get nodes -o wide -
SSH dans le nœud worker via son adresse IP publique.
ssh -i <SSH_private_key_location> root@<WORKER_PUBLIC_IP> -
Exécutez des commandes de débogage pour vous aider à recueillir des informations et à résoudre les problèmes, telles que
ip,ifconfig,ping,psetcurl. Vous pouvez également installer d'autres outils qui peuvent ne pas être installés par défaut, tels quetcpdumpounc, en exécutantyum install <tool>.
Nettoyage après le débogage
Après avoir terminé le débogage, nettoyez les ressources pour désactiver l'accès SSH.
-
Supprimez le pod d'activation SSH.
oc delete pod enable-ssh-<NODE_NAME> -
Si vous avez accédé au noeud worker via le réseau public, supprimez la règle Calico pour que le port 22 soit de nouveau bloqué.
calicoctl delete gnp ssh-open [-c <path_to_calicoctl_cfg>/calicoctl.cfg] -
Rechargez le noeud worker classique ou remplacez votre noeud worker VPC de sorte que la configuration SSH d'origine soit utilisée et que la clé SSH que vous aviez ajoutée soit retirée.