Подтвердить что ты не робот

Как узнать собственный IP-адрес Pod внутри контейнера в Pod?

Kubernetes назначает IP-адрес для каждого контейнера, но как я могу получить IP-адрес из контейнера в Pod? Я не мог найти путь от документации.

4b9b3361

Ответ 1

Самый простой ответ заключается в том, чтобы гарантировать, что ваши файлы yaml/json контроллера pod или репликации добавляют IP-адрес 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

Восстановите pod/rc, а затем попробуйте

echo $MY_POD_IP

также запустите env, чтобы узнать, что еще предоставляет кубернете.

Приветствия

Ответ 2

kubectl describe pods <name of pod> даст вам некоторую информацию, включая IP

Ответ 3

Некоторые разъяснения (не совсем ответ)

В kubernetes каждому модулю назначается IP-адрес, а каждому контейнеру назначается тот же IP-адрес. Таким образом, как сказал Алекс Робинсон в своем ответе, вы можете просто использовать hostname -i внутри своего контейнера, чтобы получить IP-адрес модуля.

Я провел тестирование с модулем, в котором работали два тупых контейнера, и действительно hostname -i и тот же IP-адрес внутри обоих контейнеров. Кроме того, этот IP был эквивалентен тому, который был получен с помощью kubectl describe pod извне, что подтверждает kubectl describe pod всего IMO.

Тем не менее, ответ PiersyP кажется мне более чистым.

источники

Из кубернетес документов:

Все приложения в модуле используют одно и то же пространство имен сети (один и тот же IP-адрес и пространство портов) и, таким образом, могут "находить" друг друга и обмениваться данными с помощью localhost. Из-за этого приложения в модуле должны координировать использование портов. Каждый модуль имеет IP-адрес в плоском общем сетевом пространстве, которое имеет полную связь с другими физическими компьютерами и модулями по сети.

Еще один кусок из документов kubernetes:

До сих пор в этом документе говорилось о контейнерах. В действительности, Kubernetes применяет IP-адреса в области Pod - контейнеры внутри Pod совместно используют свои пространства имен сети - включая их IP-адреса. Это означает, что все контейнеры внутри Pod могут достигать портов друг друга на localhost.

Ответ 4

POD_HOST=$(kubectl get pod $POD_NAME --template={{.status.podIP}})

Эта команда вернет вам IP-адрес

Ответ 5

IP-адрес контейнера должен быть правильно настроен внутри своего пространства имен, поэтому любой из стандартных средств Linux может получить его. Например, попробуйте ifconfig, ip addr show, hostname -I и т.д. Из прикрепленной оболочки в одном из ваших контейнеров, чтобы проверить ее.

Ответ 6

Вы можете использовать

kubectl describe pod `hostname` | grep IP | sed -E 's/IP:[[:space:]]+//'

который основан на том, что предложил @mibbit.

Это учитывает следующие факты:

Ответ 7

Еще проще запомнить, чем подход sed - использовать awk.

Вот пример, который вы можете запустить на своем локальном компьютере:

kubectl describe pod `<podName>` | grep IP | awk '{print $2}'

Сам IP находится в столбце 2 вывода, поэтому $2.

Ответ 8

В некоторых случаях вместо того, чтобы полагаться на нисходящий API, также работает программное чтение локального IP-адреса (из сетевых интерфейсов) изнутри контейнера.

Например, на Голанге: fooobar.com/info/170978/...