Мы запускаем приложение веб-API на Kubernetes (1.9.3) в AWS (установлено с помощью KOPS). Приложение представляет собой развертывание и представлено службой (тип: LoadBalancer), которая на самом деле является ELB (v1) на AWS. Обычно это работает - за исключением того, что некоторые пакеты (фрагменты HTTP-запросов) «задерживаются» где-то между контейнером client <-> app. (Как в HTTP, так и в HTTPS, который заканчивается на ELB).
Со стороны узла:
(Примечание: почти все пакеты на стороне сервера прибывают дублированными 3 раза.)
Мы используем keep-alive, чтобы tcp-сокет был открыт, а запросы приходили и возвращались довольно быстро. Тогда возникает проблема:
Со стороны клиента:
Я запустил некоторый трафик со своего компьютера, записывая его на стороне клиента, чтобы увидеть другой конец проблемы, но не на 100% уверен, что он представляет реальную сторону клиента.
Это происходит только под нагрузкой.
Насколько я понимаю, это что-то среднее между ELB и Kube-Proxy, но я невежественен и отчаянно нуждаюсь в помощи.
Это аргументы, с которыми работает Kube-Proxy:
Commands: /bin/sh -c mkfifo /tmp/pipe; (tee -a /var/log/kube-proxy.log < /tmp/pipe & ) ; exec /usr/local/bin/kube-proxy --cluster-cidr=100.96.0.0/11 --conntrack-max-per-core=131072 --hostname-override=ip-10-176-111-91.ec2.internal --kubeconfig=/var/lib/kube-proxy/kubeconfig --master=https://api.internal.prd.k8s.local --oom-score-adj=-998 --resource-container = "" --v=2 > /tmp/pipe 2>&1
И мы используем Calico в качестве CNI:
Пока я пробовал:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
- проблема осталась.E0801 04:10:57.269475 1 reflector.go:205] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:85: Failed to list *core.Endpoints: Get https://api.internal.prd.k8s.local/api/v1/endpoints?limit=500&resourceVersion=0: dial tcp: lookup api.internal.prd.k8s.local on 10.176.0.2:53: no such host
...а также...
E0801 04:09:48.075452 1 proxier.go:1667] Failed to execute iptables-restore: exit status 1 (iptables-restore: line 7 failed ) I0801 04:09:48.075496 1 proxier.go:1669] Closing local ports after iptables-restore failure
Я не смог найти ничего, описывающего такую проблему, и буду благодарен за любую помощь. Приветствуются идеи о том, как продолжить и устранить неполадки.
Лучший, А
Привет, @ArAr, я назначил награду за этот вопрос, потому что в настоящее время у нас есть аналогичная проблема. Думаю, этот вопрос заслуживает большего внимания! Будем надеяться, что найдем решение;)
@ArAr Вы нашли решение этой проблемы? У меня похожие проблемы с ELB с Kubernetes.
Какое приложение в итоге обрабатывает запросы? Возможно ли, что он однопоточный и блокирует ввод-вывод? Это означало бы, что он может обрабатывать только один запрос за раз. Поэтому, когда один запрос находится на рассмотрении, все остальные запросы будут устаревшими.
Сколько экземпляров подов у вас есть для вашего приложения? Может ли быть, что у вас проблема только для определенного экземпляра модуля / для модулей в определенном узле? +1 за предложение NickRak о тесте Nodeport, но, честно говоря, я не думаю, что ELB станет проблемой.
Только что понял, что это очень старый вопрос, извините, что возобновил его. Вы решили это в конце концов?
Вы исправили это? или мы должны закрыть вопрос?
Не могли бы вы попытаться разрешить весь межсетевой трафик между всеми узлами в кластере и создать тестовую службу с типом
nodePort
, чтобы проверить, есть ли проблема с балансировщиком или kube-proxy?