Про путаницу с хостами при использовании контейнеров

July 30, 2018
docker kubernetes troubles

Задача:

Необходимо развернуть через Kubernetes контейнер с новым микросервисом. Апи слушает 8000 порт, соответственно необходимо обеспечить передачу внешнего запроса к контейнеру на этот порт.

До этого аналогичные задачи не вызывали особых трудностей. Однако здесь я впервые использовал новый для себя фреймворк go-swagger, и на спецификациях Kubernetes, работающих для прежних апи, новая апи по каким-то непонятным причинам не взлетела. При запуске пода Kubernetes во время проверки сервиса не мог достучаться до апи по указанному порту и завершал его работу.

По всем признакам порт в контейнере был открыт, но в ответ при вызове из вне приходило nothing data. Все выглядит так, словно внутри контейнера на этом порту нет никакой апи. При заходе же во внутрь контейнера и вызова через curl http://127.0.0.1:8000, он корректно перехватывался запущенной в нем апи.

Вывод: по каким-то причинам запрос, не смотря на то что он проходит в контейнер, до самой апи не доходит.

Выявленная ошибка:

Апи слушала 127.0.0.1:8000, а нужно было 0.0.0.0:8000

В контейнере апи должна слушать не localhost (127.0.0.1), а 0.0.0.0 так все внешние запросы к контейнеру передаются именно на него.