Kubernetes назначает IP-адрес каждому контейнеру, но как я могу получить IP-адрес из контейнера в Pod? Я не мог найти выход из документации.
Изменить: я собираюсь запустить кластер Aerospike в Kubernetes. а файлам конфигурации нужен собственный IP-адрес. И я пытаюсь использовать confd для установки имени хоста. Я бы использовал переменную окружения, если бы она была установлена.
источник
printenv | grep '10.254.24.167'
что не возвращает ничего, кроме пользовательской переменной MY_POD_IP. В любом случае, примите мой голос, сэр :)status.hostIP
?Некоторые пояснения (не совсем ответ)
В kubernetes каждому модулю назначается IP-адрес, а каждому контейнеру в модуле назначается тот же IP-адрес. Таким образом, как сказал Алекс Робинсон в своем ответе , вы можете просто использовать
hostname -i
внутри своего контейнера, чтобы получить IP-адрес модуля.Я тестировал модуль с двумя тупыми контейнерами и действительно
hostname -i
выводил один и тот же IP-адрес внутри обоих контейнеров. Кроме того, этот IP был эквивалентен IP, полученному с использованиемkubectl describe pod
извне, что подтверждает все ИМО.Однако ответ PiersyP кажется мне более чистым.
Источники
Из документации kubernetes :
Еще один фрагмент из документации kubernetes :
источник
kubectl describe pods <name of pod>
предоставит вам некоторую информацию, включая IPисточник
kubectl
он недоступен.POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})
Эта команда вернет вам IP
источник
kubectl
.IP-адрес контейнера должен быть правильно настроен внутри его сетевого пространства имен, чтобы его можно было получить с помощью любого из стандартных инструментов Linux. Например, попробуйте
ifconfig
,ip addr show
,hostname -I
и т.д. с прикрепленной оболочки в одном из контейнеров , чтобы проверить его.источник
Вы могли бы использовать
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
который основан на предложении @mibbit.
При этом учитываются следующие факты:
kubectl
был помещен в контейнер вручную (возможно, при построении образа)/var/run/secrets/kubernetes.io/serviceaccount
в контейнере.источник
grep
кsed
:kubectl describe pod $POD | sed -nE '/IP/s/IP:[[:space:]]+//p'
(но для этого лучше использовать awk, чем sed)Еще проще запомнить, чем использовать
sed
подходawk
.Вот пример, который вы можете запустить на своем локальном компьютере:
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
Следовательно, сам IP находится в столбце 2 вывода
$2
.источник
but how can I acquire the IP address from a container in the Pod?
что вы предполагаете, что у данного человека есть доступ кkubectl
самому модулю.kubectl describe pod $POD | awk '/IP/{print $2}'
В некоторых случаях, вместо того, чтобы полагаться на нисходящий API, также работает программное чтение локального IP-адреса (из сетевых интерфейсов) изнутри контейнера.
Например, в голанге: https://stackoverflow.com/a/31551220/6247478
источник
kubectl get pods -o wide
Дайте вам список модулей с именем, статусом, IP, узлом ...
источник