Kubernetes attribue une adresse IP à chaque conteneur, mais comment puis-je obtenir l'adresse IP d'un conteneur du pod? Je n'ai pas trouvé le chemin à partir des documentations.
La réponse la plus simple consiste à s'assurer que vos fichiers yaml/json du pod ou du contrôleur de réplication ajoutent l'adresse IP du pod en tant que variable d'environnement en ajoutant le bloc de configuration défini ci-dessous. (le bloc ci-dessous met en outre le nom et l'espace de noms à la disposition du pod)
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
Recréez le pod/rc puis essayez
echo $MY_POD_IP
lancez également env
pour voir ce que kubernetes vous fournit d’autre.
À votre santé
Quelques précisions (pas vraiment une réponse)
Dans kubernetes, chaque pod se voit attribuer une adresse IP et chaque conteneur du pod se voit attribuer la même adresse IP. Ainsi, comme Alex Robinson l'a déclaré dans sa réponse , vous pouvez simplement utiliser hostname -i
dans votre conteneur pour obtenir l'adresse IP du pod.
J'ai testé avec un pod exécutant deux conteneurs Dumb et, en effet, hostname -i
produisait la même adresse IP dans les deux conteneurs. De plus, cette adresse IP était équivalente à celle obtenue en utilisant kubectl describe pod
de l'extérieur, ce qui valide l'ensemble du processus IMO.
Cependant, réponse de PiersyP me semble plus propre.
De documentation de kubernetes :
Les applications d'un pod utilisent toutes le même espace de noms réseau (mêmes adresses IP et ports) et peuvent ainsi se "trouver" et communiquer à l'aide de localhost. Pour cette raison, les applications d'un pod doivent coordonner leur utilisation des ports. Chaque pod a une adresse IP dans un espace réseau partagé et plat qui communique entièrement avec d’autres ordinateurs physiques et pods sur le réseau.
Un autre morceau de kubernetes docs :
Jusqu'à présent, ce document a parlé de conteneurs. En réalité, Kubernetes applique les adresses IP à l’étendue du pod: les conteneurs d’un pod partagent leurs espaces de noms réseau, y compris leur adresse IP. Cela signifie que les conteneurs d'un pod peuvent tous atteindre les ports des uns des autres sur localhost.
kubectl describe pods <name of pod>
vous donnera des informations, y compris l'adresse IP
POD_Host=$(kubectl get pod $POD_NAME --template={{.status.podIP}})
Cette commande vous retournera un IP
L'adresse IP du conteneur doit être correctement configurée à l'intérieur de son espace de noms réseau, afin que tous les outils linux standard puissent l'obtenir. Par exemple, essayez ifconfig
, ip addr show
, hostname -I
, etc. à partir d'un shell attaché dans l'un de vos conteneurs pour le tester.
Vous pourriez utiliser
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
qui est basé sur ce que @mibbit a suggéré.
Cela prend en compte les faits suivants:
kubectl
a été placé manuellement dans le conteneur (éventuellement lors de la création de l'image)/var/run/secrets/kubernetes.io/serviceaccount
dans le conteneur.Encore plus simple à retenir que l’approche sed
consiste à utiliser awk
.
Voici un exemple que vous pouvez exécuter sur votre ordinateur local:
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
L'IP elle-même est sur la colonne 2 de la sortie, d'où $2
.
Dans certains cas, au lieu de s’appuyer sur une API descendante, la lecture par programme de l’adresse IP locale (à partir des interfaces réseau) depuis l’intérieur du conteneur fonctionne également.
Par exemple, dans golang: https://stackoverflow.com/a/31551220/6247478