Kubernetes przypisuje adres IP do każdego kontenera, ale jak mogę uzyskać adres IP z kontenera w Pod? Nie mogłem znaleźć drogi z dokumentacji.
Edycja: mam zamiar uruchomić klaster Aerospike w Kubernetes. a pliki konfiguracyjne wymagają własnego adresu IP. I próbuję użyć confd, aby ustawić nazwę hosta. Użyłbym zmiennej środowiskowej, gdyby została ustawiona.
kubernetes
yanana
źródło
źródło
printenv | grep '10.254.24.167'
nie zwraca niczego poza zmienną zdefiniowaną przez użytkownika MY_POD_IP. Tak czystatus.hostIP
?Kilka wyjaśnień (nie jest to odpowiedź)
W Kubernetes każdemu podowi jest przypisany adres IP, a każdemu kontenerowi w pod jest przypisany ten sam adres IP. Tak więc, jak stwierdził Alex Robinson w swojej odpowiedzi , możesz po prostu użyć
hostname -i
wewnątrz swojego kontenera, aby uzyskać adres IP poda.Testowałem z pod działającym dwoma głupimi kontenerami i rzeczywiście
hostname -i
wyświetlałem ten sam adres IP w obu kontenerach. Co więcej, ten adres IP był równoważny z uzyskanym przy użyciukubectl describe pod
z zewnątrz, co potwierdza całość IMO.Jednak odpowiedź PiersyP wydaje mi się bardziej przejrzysta .
Źródła
Z dokumentów Kubernetes :
Kolejny artykuł z dokumentacji kubernetes :
źródło
kubectl describe pods <name of pod>
poda kilka informacji, w tym adres IPźródło
kubectl
nie jest dostępne.To polecenie zwróci adres IP
źródło
kubectl
.Adres IP kontenera powinien być poprawnie skonfigurowany w jego sieciowej przestrzeni nazw, aby można było go uzyskać za pomocą dowolnego ze standardowych narzędzi linuxowych. Na przykład, spróbuj
ifconfig
,ip addr show
,hostname -I
, itp z dołączonym muszli w jednym ze swoich pojemników do przetestowania go.źródło
Możesz użyć
który jest oparty na sugestii @mibbit.
Uwzględnia to następujące fakty:
kubectl
został ręcznie umieszczony w pojemniku (prawdopodobnie podczas budowania obrazu)/var/run/secrets/kubernetes.io/serviceaccount
W kontenerzeźródło
grep
dosed
:kubectl describe pod $POD | sed -nE '/IP/s/IP:[[:space:]]+//p'
(ale awk jest lepszy do tego niż sed)Jeszcze prostsze do zapamiętania niż
sed
podejście do użyciaawk
.Oto przykład, który możesz uruchomić na swoim komputerze lokalnym:
Stąd też sam adres IP znajduje się w kolumnie 2 danych wyjściowych
$2
.źródło
but how can I acquire the IP address from a container in the Pod?
: Zakładasz, że dana osoba ma dostęp dokubectl
samej kapsuły.kubectl describe pod $POD | awk '/IP/{print $2}'
W niektórych przypadkach zamiast polegać na downward API, działa również programowe odczytywanie lokalnego adresu IP (z interfejsów sieciowych) z wnętrza kontenera.
Na przykład w golang: https://stackoverflow.com/a/31551220/6247478
źródło
Podaj listę podów z nazwą, stanem, adresem IP, węzłem ...
źródło