Назад | Перейти на главную страницу

Тайм-аут сервисов Kubernetes при доступе к подам у разных воркеров

Я пытаюсь установить пару рабочих kubernetes на инстансах EC2 и сталкиваюсь с проблемой, когда служба, похоже, не «видит» все поды, которые она должна видеть.

Моя точная среда - это пара AWS Snowballs, красный и синий, и мой кластер выглядит как control, worker-red, и worker-blue [1]. Я развертываю фиктивный сервер python, который ждет GET на порту 8080 и отвечает локальным именем хоста. Я установил достаточно реплик, чтобы оба worker-red и worker-blue иметь по крайней мере по одной капсуле. Наконец, я создал сервис, спецификация которого выглядит как

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, произойдет та же проблема, которую я описываю, но это мой основной вариант использования, поэтому я сосредоточусь на нем.

Трудно просто сказать, что здесь может быть не так, но есть несколько шагов, которые вы можете предпринять, чтобы устранить вашу проблему:

  1. Модули отладки, особенно проверьте, нет ли в логах чего-то подозрительного:
  • kubectl logs ${POD_NAME} ${CONTAINER_NAME}

  • kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}

  1. Услуги отладки, например, проверив:
  • Сервис существует?

  • Работает ли Сервис по DNS-имени?

  • Сервис работает по IP?

  • Правильно ли определена служба?

  • Есть ли у службы какие-либо конечные точки?

  • Кубе-прокси работает?

Выполнение этих шагов поможет вам найти причину вашей проблемы, а также лучше понять механизмы, стоящие за услугами.