Pourquoi ne puis-je pas accéder via SSH à mon noeud worker ?
Virtual Private Cloud 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 travailleur, utilisez un " DaemonSet
Kubernetes, ou utilisez des
tâches pour des 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 avec l'option--image=us.icr.io/armada-master/network-alpine:latest
, qui utilise une image provenant de IBM Cloud Container Registry accessible sur 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
,ping
etps
, sont déjà disponibles dans l'interpréteur de commandes. Vous pouvez également installer d'autres outils, tels que "mtr
et "conntrack
, en exécutant "yum 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 pour le débogage dans votre propre dépôt ICR ou créer une image personnalisée avec d'autres outils pour répondre à 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} -- sh
Pour obtenir des journaux ou d'autres fichiers d'un nœud de travail, utilisez la commande "
**kubectl cp**
dans le format suivant. L'exemple suivant extrait le fichier "/var/log/messages
du système de fichiers hôte du nœud de travail.oc cp default/debug-${NODE}:/host/var/log/messages ./messages
Ré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 déboguer, telles que '
dig
, 'tcpdump
, 'mtr
, 'curl
, 'ip
, 'ifconfig
, 'nc
', 'ping
et 'ps
, sont déjà disponibles dans l'interpréteur de commandes. Vous pouvez également installer d'autres outils, tels que "conntrack
, en exécutant "apk add <tool>
. Par exemple, pour ajouter le "conntrack
, exécutez le "apk 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 /tmp
id_rsa_cluster_worker id_rsa_cluster_worker.pub
cat /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'exemplevalue
pourSSH_PUBLIC_KEY
par 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 pour le débogage dans votre propre dépôt ICR ou créer une image personnalisée avec d'autres outils pour répondre à 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 exister dans le même VPC que le nœud de travail.
Pour les clusters classiques, le dispositif peut accéder au nœud de travail à partir de n'importe quel VLAN privé si une fonction de routeur virtuel(VRF) ou une 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-open
pour 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
", "ps
et "curl
. Vous pouvez également installer d'autres outils qui peuvent ne pas être installés par défaut, tels quetcpdump
ounc
, 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.