Kubernetes назначает IP-адрес для каждого контейнера, но как я могу получить IP-адрес из контейнера в Pod? Я не мог найти путь от документации.Как узнать собственный IP-адрес Pod из контейнера в Pod?
ответ
Простейший ответ заключается в том, чтобы гарантировать, что ваши контроллеры yod/json-файлов контроллера или контроллера репликации добавляют IP-адрес IP в качестве переменной окружения, добавив блок конфигурации, определенный ниже. (Блок ниже дополнительно делает имя и пространство имен доступным для стручка)
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
Воссоздать стручок/гс, а затем попытаться
echo $MY_POD_IP
также запустить env
, чтобы увидеть, что еще kubernetes предоставляет вам.
Приветствия
Я тестировал это в контейнере, и эта переменная недоступна. –
Извинения, предыдущий ответ был неправильным, я его обновил. – PiersyP
Я только что протестировал ваше решение, и он отлично работает. Я на 100% уверен, что у кубернетов нет такой переменной среды, потому что 'printenv | grep '10 .254.24.167'' не возвращает ничего, кроме определяемой пользователем переменной MY_POD_IP. Во всяком случае, возьмите мой голос sir :) –
IP-адрес контейнера должен быть правильно сконфигурирован внутри сетевого пространства имен, поэтому любой из стандартных средств Linux может получить его. Например, попробуйте ifconfig
, ip addr show
, hostname -I
и т. Д. Из прикрепленной оболочки в одном из ваших контейнеров, чтобы проверить ее.
kubectl описывают стручок даст вам некоторую информацию, включая IP
Я думаю, что вопрос заключается в получении IP-адреса внутри контейнера/контейнера, где 'kubectl' недоступен. –
Вы можете использовать
kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'
, который основан на том, что @mibbit предложил.
Это принимает следующие факты во внимание:
- имя хоста устанавливается на имя POD, но this might change in the future
kubectl
был вручную помещен в контейнер (возможно, когда был построен образ)- Kubernetes обеспечивает учетная запись учетной записи службы неявно, как описано в Accessing the Cluster/Accessing the API from a Pod, то есть
/var/run/secrets/kubernetes.io/serviceaccount
в контейнере
Это работает хорошо. Спасибо. –
Некоторые пояснения (на самом деле не ответ)
В kubernetes, каждый стручок получает назначается IP-адрес, и каждый контейнер в контейнере получает назначение в тот же IP-адрес. Таким образом, как заявил Алекс Робинсон в his answer, вы можете просто использовать hostname -I
внутри вашего контейнера, чтобы получить IP-адрес.
Я тестировал с контейнером с двумя немыми контейнерами, и действительно, hostname -I
выдавал один и тот же IP-адрес в обоих контейнерах. Кроме того, этот IP был эквивалентен тому, который был получен с использованием kubectl describe pod
снаружи, который проверяет всю ИМО.
Однако PiersyP's answer кажется более чистым для меня.
Источники
От kubernetes docs:
приложений в стручках все используют один и тот же сетевой пространство имен (тот же IP-адрес и порт пространства), и таким образом может «найти» друг друга и общаться, используя локальный. Из-за этого приложения в контейнере должны координировать использование портов. Каждый блок имеет IP-адрес в плоском общем сетевом пространстве, который имеет полную связь с другими физическими компьютерами и контейнерами по сети.
Другая часть из kubernetes docs:
До сих пор этот документ не говорил о контейнерах. В действительности, Kubernetes применяет IP-адреса в области Pod - контейнеры в пределах Pod совместно используют свои пространства имен, включая их IP-адрес. Это означает, что контейнеры внутри Pod могут подключаться к портам друг друга на локальном хосте.
POD_HOST = $ (kubectl получить стручок $ POD_NAME --template = {{. Status.podIP}})
Эта команда вернет вам IP
Спасибо за ваш ответ. Но я хочу знать IP-адрес в контейнере в Pod. Поэтому я хочу знать это, не используя 'kubectl'. – yanana
Даже проще запомнить, чем sed
подход заключается в использовании awk
.
Вот пример, который вы можете запустить на локальном компьютере:
kubectl describe pod `<podName>` | grep IP | awk '{print $2}'
Сам IP находится на колонке 2 выхода, следовательно $2
.
Downvoter, пожалуйста, дайте мне знать, если он не работает, потому что он работает на моей машине. – whirlwin
Я предполагаю, что это потому, что вы не отвечаете на вопрос. Вопросы: «но как я могу получить IP-адрес из контейнера в Pod?» Вы предполагаете, что данное лицо имеет доступ к 'kubectl' на самом контейнере. – Seivan
- 1. Strip Pod as Pod из файла Perl
- 2. Будет ли static_assert в POD разрушать POD?
- 3. Добавление контейнера докеров для работы OpenShift pod
- 4. Ошибка файла Pod при установке нового pod
- 5. POD, non-POD, rvalue и lvalues
- 6. C++: объекты POD и POD-обтекания
- 7. Создайте пользовательский Pod, который использует внешний Pod
- 8. статического сопзЬ POD против Const POD
- 9. команда `pod update` не обновляет установленный pod
- 10. Pod Communication
- 11. Я получаю сообщение «No podspec found» при выполнении «pod install» против частного контейнера gitlab pod/project
- 12. Как загрузить устаревший pod
- 13. Как добавить POD 0.3.3
- 14. Wordpress Pod Relationshop поле
- 15. Как указать зависимости для pod
- 16. Удалить зависимость от pod
- 17. Cocoapods podfile pod name
- 18. Single Container Pod yaml
- 19. Прочтите изображение из библиотеки pod
- 20. Массив байтов в POD
- 21. Удаление Pod из проекта - xcode
- 22. Pod Контейнеры Держится на Перезапуск
- 23. Как вы устанавливаете sub spec pod без установки всего контейнера?
- 24. Kubernetes pod not start
- 25. Определить не оценивать POD?
- 26. Генерируемый конструктор в случаях POD vs non-POD
- 27. Как передать экземпляр экземпляра kubernetes pod внутри контейнера при запуске?
- 28. kuberenets pod создание в ожидании
- 29. Firebase Pod Код Изменение
- 30. инициализация элемента неявного класса C++ для (POD struct, POD class и POD) членов
Существует несколько способов сделать это, есть ли что-то конкретное, что вы пытаетесь сделать? – aronchick
Я собираюсь запустить Aerospike cluster в Кубернете. и конфигурационным файлам нужен собственный IP-адрес. И я пытаюсь использовать confd для установки имени хоста. Я бы использовал переменную окружения, если она была установлена ... – yanana