Деякі роз’яснення (насправді не відповідь)
У kubernetes кожному модулю присвоюється IP-адреса, а кожному контейнеру в модулі призначається та сама IP-адреса. Таким чином, як зазначив Алекс Робінсон у своїй відповіді , ви можете просто використовувати hostname -i
всередині контейнера, щоб отримати IP-адресу підсистеми.
Я тестував із стручком, який запускає два німі контейнери, і справді hostname -i
видавав одну і ту ж IP-адресу всередині обох контейнерів. Крім того, цей IP був еквівалентний тому, що отриманий із використання kubectl describe pod
ззовні, що підтверджує всю суть IMO.
Однак відповідь PiersyP мені здається більш чистою.
Джерела
З документів kubernetes :
Усі програми в модулі використовують один і той самий простір імен мережі (однаковий IP та простір портів), тому можуть «знаходити» одне одного та спілкуватися за допомогою localhost. Через це програми в підсистемі повинні координувати використання портів. Кожен модуль має IP-адресу в плоскому спільному мережевому просторі, що забезпечує повний зв’язок з іншими фізичними комп’ютерами та модулями в мережі.
Ще один фрагмент з dokubernetes docs :
До цього часу в цьому документі говорилося про контейнери. Насправді Kubernetes застосовує IP-адреси в діапазоні Pod - контейнери всередині Pod поділяють свої простори імен мережі, включаючи свою IP-адресу. Це означає, що контейнери всередині підсистеми можуть дістатися до портів один одного на localhost.
printenv | grep '10.254.24.167'
не повертає нічого, крім визначеної користувачем змінної MY_POD_IP. У будь-якому разі, прийміть мій голос, сер :)