kubernetes pod пытается подключиться сам и терпит неудачу, потому что http://localhost: <port> - PullRequest
0 голосов
/ 12 февраля 2020

У нас есть приложение k8s на основе helm, в котором один из модулей (с именем «auth») имеет код, который вызывает себя для выполнения операции CRUD для сброса пароля.

Поскольку он вызывает сам себя, эта операция использует URL-адрес конечной точки http://localhost: 8081 / API / авторизации

Проблема: При развертывании того же приложения на локальном модуле аутентификации кластера k8s не удается подключиться самостоятельно.

Ошибка: {"api":"external","component":"auth","delay":900000000,"error":"Post http://localhost:8081/api/authorizations: dial tcp 10.250.44.31:8081: connect: connection refused","insecureSkipVerify":false,"message":"Request failed, retrying","method":"POST","requestID":"fb9475e8-bcf9-4924-8339-d3d21922f357","severity":"debug","timestamp":"2020-02-10T11:54:29Z","url":"http://localhost:8081/api/authorizations"}

Примечание: 10.250.44.31:8081 - это IP-адрес конечной точки кластера

Ожидаемое поведение : при запуске этого приложения на AWS eks или azure aks , работает нормально с желаемой операцией.

Вопрос:

1) Ожидается ли поведение pod для подключения к главному серверу k8s с прокси-IP при использовании конечной точки localhost внутри pod?

2) для AWS eks и azure aks это относится только к URL-адресу pod, значит ли это, что наша кластерная сеть должна быть устранена для решения этой проблемы?

Спасибо за добавленные ∆ очки заранее.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

1) это ожидаемое поведение для pod для подключения к главному серверу k8s с прокси-IP при использовании конечной точки localhost внутри pod?

NO, не ожидается подключение к главному API-серверу для localhost сообщение

2) для AWS eks и azure aks относится только к URL-адресу pod, значит ли это, что для решения этой проблемы необходимо устранить неполадки в нашей кластерной сети?

Exe c в модуль

kubectl exe c -it "имя-модуля" -n "пространство имен" bash

Однажды внутри pod, проверьте, прослушивает ли какой-либо процесс порт 8081

ps -ef | grep "8081"

Если вы обнаружите, что требуемый процесс запущен и прослушивает порт, сверните конечную точку и проверьте, получаете ли вы ответ обратно или нет

curl -v http://localhost: 8081 / API / авторизации

0 голосов
/ 12 февраля 2020

Каково содержание /etc/hosts на запускаемом образе? Я предполагаю, что он неправильно настроен или отсутствует, поэтому контейнерный процесс вместо того, чтобы получить оттуда правильный IP-адрес localhost, запрашивает у сервера имен. Возможно, ваш сервер API также является DNS вашего кластера, и когда его спрашивают о локальном хосте, он отвечает своим собственным IP.

. В качестве быстрого обходного пути вы можете изменить свою программу на прямое использование 127.0.0.1 вместо localhost.

...