J'ai utilisé le kubectl avec des fichiers yaml pour créer le pod cible et j'ai trouvé que le processus du pod écoutait le port cible comme prévu.
À ma grande surprise, le port netstat -tunlp pas dans les sorties de netstat -tunlp ou netstat -alp ou netstat -an de la machine hôte. Mais cela fonctionne si j'essaie telnet localhost targetPort !!!
Pourquoi cela arrive? Quelqu'un peut-il expliquer cela?
3 Réponses :
Pour accéder au service sur un nœud worker, vous devez exposer le pod sur le nœud worker avec un service de type NodePort . Les processus exécutés à l'intérieur des pods se trouvent dans un espace de noms réseau différent. Vous pouvez accéder à l'application depuis l'intérieur du pod, mais pas depuis le nœud sans l'objet de service. Voir ce qui suit pour ref:
$ kubectl create deploy nginx --image=nginx
$ kubectl expose deploy nginx --target-port 80 --port 80 --type NodePort
$ NODE_PORT=$(kubectl get svc nginx -ojsonpath='{ .spec.ports[0].nodePort }')
$ netstat -an | grep $NODE_PORT
tcp46 0 0 *.31563 *.* LISTEN
$ curl localhost:$NODE_PORT
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
HTH
Étant donné que les conteneurs à l'intérieur des pods s'exécutent dans leur propre espace de noms réseau, netstat est incapable de les détecter.
Pour lister les ports écoutant à l'intérieur des conteneurs, utilisez nsenter . Cet outil vous aidera à exécuter la commande sur un espace de noms différent d'un processus (dans notre cas le PID du conteneur souhaité).
docker inspect <containerid> (si docker est votre environnement d'exécution de conteneur)et, après avoir récupéré le PID de la commande ci-dessus, exécutez
$ nsenter -t <container-PID> -n netstat -nltpC'est à cause de docker . Par défaut, docker n'ajoute pas d'espaces de noms de réseau de conteneurs aux données d'exécution Linux (/ var / run monté en tant que tmpfs à partir de / run), ce que vous voyez lorsque vous exécutez la commande ip netns .
Pour afficher les espaces de noms réseau, vous devez utiliser nsenter .
nsenter -t <<container pid>> -n netstat -tunlp
docker inspect --format '{{ .State.Pid }}' <<container-id>>
nsenter rapport à docker exec est que nsenter vous permettra d'exécuter tous les outils ou commandes disponibles sur le nœud à l'intérieur du pod alors qu'en tant que docker exec , seules des commandes limitées ou restreintes seront autorisées.docker ps