Kubernetes przypisuje adres IP dla każdego kontenera, ale jak mogę uzyskać adres IP z kontenera w kapsule? Nie mogłem znaleźć drogi z dokumentacji.Jak poznać własny adres IP kapsuły z wnętrza kontenera w kapsule?
Odpowiedz
Najprostszą odpowiedzią jest upewnienie się, że pliki kontrolne podlubu lub kontrolera yaml/json dodają adres IP podrzędu jako zmienną środowiskową poprzez dodanie bloku konfiguracji zdefiniowanego poniżej. (Blok poniżej dodatkowo sprawia, że imię i nazw dostępne do gondoli)
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
odtworzyć Pod/rc a następnie spróbuj
echo $MY_POD_IP
również uruchomić env
aby zobaczyć, co jeszcze kubernetes oferuje.
Cheers
Przetestowałem to w kontenerze, a ta zmienna nie była dostępna. –
Przeprosiny, poprzednia odpowiedź była niepoprawna, zaktualizowałem ją. – PiersyP
Właśnie przetestowałem Twoje rozwiązanie i działa bardzo dobrze. Jestem w 100% pewien, że kernernetes nie ma takiej zmiennej środowiskowej, ponieważ 'printenv | grep '10 .254.24.167'' nie zwraca niczego poza zmienną zdefiniowaną przez użytkownika MY_POD_IP. W każdym razie, weź mój głos sir :) –
Adres IP kontenera powinien być odpowiednio skonfigurowany wewnątrz przestrzeni nazw sieciowych, aby można było uzyskać dostęp do dowolnego standardowego narzędzia Linux. Na przykład spróbuj ifconfig
, ip addr show
, hostname -I
itd. Z załączonej powłoki w jednym z twoich kontenerów, aby przetestować to.
kubectl opisać pod daje pewne informacje w tym OD
Myślę, że pytanie dotyczy uzyskania IP z wewnątrz pod/pojemnika, gdzie 'kubectl' nie jest dostępny. –
można użyć
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
która opiera się na tym, co @mibbit sugerowane.
Trwa to następujące fakty pod uwagę:
- hosta jest ustawiony na nazwie POD, ale this might change in the future
kubectl
została ręcznie umieszczony w zbiorniku (ewentualnie, gdy obraz został zbudowany)- Kubernetes zapewnia poświadczenie konta usługi do kontenera niejawnie, jak opisano w Accessing the Cluster/Accessing the API from a Pod, tj.
/var/run/secrets/kubernetes.io/serviceaccount
w kontenerze
To działa dobrze. Dziękuję Ci. –
Niektóre wyjaśnienia (naprawdę nie odpowiedź)
W kubernetes, każdy pod zostaje przypisany adres IP, a każdy pojemnik w kapsule zostanie przypisany ten sam adres IP. Tak więc, jak powiedział Alex Robinson w his answer, można po prostu użyć hostname -I
w swoim kontenerze, aby uzyskać adres IP pod.
Przetestowałem z kapsułą, na której działały dwa głupie pojemniki, i rzeczywiście hostname -I
wyprowadzał ten sam adres IP w obu pojemnikach. Co więcej, ten IP był równoważny z uzyskanym przy użyciu kubectl describe pod
z zewnątrz, który potwierdza całą IMO.
Jednak PiersyP's answer wydaje mi się bardziej czysty.
Źródła
Od kubernetes docs:
aplikacji w strąku wszystkie używać tej samej przestrzeni nazw sieci (tego samego IP i przestrzeń portu), a tym samym może „znaleźć” siebie i komunikowania się za pomocą localhost. Z tego powodu aplikacje w pakiecie muszą koordynować korzystanie z portów. Każdy strąk ma adres IP w płaskiej wspólnej przestrzeni sieciowej, która ma pełną komunikację z innymi komputerami fizycznymi i podsystemami w sieci.
Kolejny kawałek z kubernetes docs:
Do tej pory dokument ten mówił o kontenerach. W rzeczywistości Kubernetes stosuje adresy IP w zasięgu Pod - kontenery wewnątrz Pod dzielą swoje sieciowe przestrzenie nazw - w tym ich adres IP. Oznacza to, że kontenery w kapsule mogą dosięgnąć do siebie nawzajem na lokalnym hoście.
POD_HOST = $ (kubectl uzyskać pod $ POD_NAME --template = {{. Status.podIP}})
To polecenie zwróci Ci IP
Dziękuję za odpowiedź. Ale chcę znać adres IP w pojemniku w kapsule. Więc chcę to poznać bez użycia 'kubectl'. – yanana
jeszcze prostszy do zapamiętania niż sed
podejście polega na użyciu awk
.
Oto przykład, który można uruchomić na komputerze lokalnym:
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
Samo IP jest na kolumnie 2 wyjścia, stąd $2
.
Downvoter, proszę dać mi znać, jeśli to nie działa, ponieważ działa na moim komputerze. – whirlwin
Zakładam, że to dlatego, że nie odpowiadasz na pytanie. Pytanie brzmi "ale jak mogę uzyskać adres IP z kontenera w Pod?' Zakładasz, że dana osoba ma dostęp do 'kubectl' na samym pakiecie. – Seivan
- 1. Jak mogę poznać adres IP dla interfejsów w C?
- 2. Kubernetes - komunikacja kontenera w kapsule z użyciem nazw zamiast "localhost"?
- 3. Jak poznać przyczynę zakończenia kontenera dokera?
- 4. WICKET: jak uzyskać adres IP/adres IP klienta
- 5. Adres IP w Silverlight
- 6. Jak skopiować plik z kontenera w kapsule w określonym obszarze nazw?
- 7. Jak uzyskać absolutny adres URL zdalnego aktora z wnętrza aktora?
- 8. Jak uzyskać adres IP z sockaddr
- 9. Jak zdobyć adres IP klienta?
- 10. Jak zablokować adres IP lub klasy IP w ASP.NET
- 11. Jak uzyskać adres IP klienta?
- 12. Jak uzyskać adres IP serwera?
- 13. Zapisz adres IP w mongoDB
- 14. Jak pingować adres IP w golang
- 15. jak uzyskać adres IP użytkownika w mvc
- 16. Zmieniaj adres IP dynamicznie?
- 17. Jak zweryfikować adres IP w C#
- 18. Uzyskaj adres IP użytkownika
- 19. Zmień adres IP w ruby
- 20. Jak uzyskać adres IP peera w azocie
- 21. adres IP cURL
- 22. Extract adres IP z ciągiem html (Python)
- 23. Uzyskaj adres IP z ciągu (Groovy)
- 24. Jak mogę pobrać adres IP z nagłówka HTTP w Javie
- 25. Jak uzyskać adres IP z żądania w ASP.NET?
- 26. Jak uzyskać adres IP z gniazda W systemie Windows
- 27. Jak ustawić adres IP z C w linux
- 28. Jak uzyskać adres IP z Nazwy Domeny w Javie?
- 29. Uzyskaj adres IP nadawcy z pakietu multiemisji
- 30. Jak uzyskać adres IP boost :: asio :: ip :: tcp :: socket?
Istnieje wiele sposobów, aby to zrobić, czy jest coś konkretnego, co próbujesz zrobić? – aronchick
Mam zamiar uruchomić klaster Aerospike w Kubernetes. a pliki konfiguracyjne wymagają własnego adresu IP. I próbuję użyć confd do ustawienia nazwy hosta. Chciałbym użyć zmiennej środowiskowej, jeśli została ustawiona ... – yanana