Я пытаюсь установить пару рабочих kubernetes на инстансах EC2 и сталкиваюсь с проблемой, когда служба, похоже, не "видит" все поды, которые должна быть видна.
Моя точная среда - это пара AWS Snowballs, красный и синий, и мой кластер выглядит как контрольный
, рабочий-красный
и рабочий-синий
[1] . Я развертываю фиктивный сервер python, который ждет GET на порту 8080 и отвечает с локальным именем хоста. Я установил для него достаточно реплик, чтобы у обоих красный рабочий
и синий рабочий
было хотя бы по одному модулю. Наконец, я создал службу, спецификация которой выглядит как
spec:
type: NodePort
selector:
app: hello-server
ports:
- port: 8080
targetPort: 8080
nodePort: 30080
. Теперь я могу проверить, работают ли мои модули.
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hello-world-deployment-587468bdb7-hf4dq 1/1 Running 0 27m 192.168.1.116 worker.red <none> <none>
hello-world-deployment-587468bdb7-mclhm 1/1 Running 0 27m 192.168.1.126 worker.blue <none> <none>
Теперь я могу попытаться скрутить их
curl worker-red:30080
greetings from hello-world-deployment-587468bdb7-hf4dq
curl worker-blue:30080
greetings from hello-world-deployment-587468bdb7-mclhm
Это происходит примерно в половине случаев. В другой половине времени завиток завершается с ошибкой тайм-аута. В частности, curling worker-red даст ответ ТОЛЬКО от hf4dq, а curling worker-blue даст ответ ТОЛЬКО от mclhm. Если я оцеплю и осушу синий рабочий, чтобы оба моих модуля работали на красном рабочем, тайм-аут никогда не истечет, и оба модуля ответят.
Похоже, что служба NodePort не достигает модулей, которых нет в хозяин я керлинг. Насколько я понимаю, сервисы должны работать не так. Что мне не хватает?
[1] Если я настрою так, что у меня есть два воркера, оба на Red, произойдет та же проблема, которую я описываю, но это мой основной вариант использования, поэтому я сосредоточусь на нем.
Это сложно чтобы просто сказать, что здесь может быть не так, но есть несколько шагов, которые вы можете предпринять для устранения вашей проблемы:
kubectl logs ${ POD_NAME} ${CONTAINER_NAME}
kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
Существует ли служба?
Существует ли служба работает по DNS-имени?
Сервис работает по IP?
Правильно ли определен Сервис?
Есть ли у Сервиса конечные точки?
Кьюб-прокси работает?
Проходит через них шаги помогут вам найти причину вашей проблемы, а также лучше понять механизм, лежащий в основе служб.