Кажется, есть два противоречивых объяснения того, как сервисы NodePort маршрутизируют трафик. Сервисы могут направлять трафик к одному из двух, а не к обоим:
- Nodes (through the kube-proxy) According to
kubectl explain Service.spec.externalTrafficPolicy
and this article that adds more detail, packets incoming to NodePort services withService.spec.externalTrafficPolicy=Local
set get routed to a kube-proxy, which then routes the packets to the corresponding pods its running.- This kube-proxy networking documentation further supports this theory adding that endpoints add a rule in the service's IPtable that forwards traffic to nodes through the kube-proxy.
- Модули: службы обновляют свои IP-таблицы с
endpoints
, которые содержат IP-адреса для модулей, к которым они могут выполнять маршрутизацию. Кроме того, если вы удалите селекторы меток вашей службы и отредактируйте конечные точки вы можете изменить, куда направляется ваш трафик.
Если один из них правильный, значит, я что-то неправильно понимаю.
- Если службы направляют к узлам, то почему я могу редактировать
endpoints
, не нарушая IPtables? - Если сервисы направляются к модулям, то почему сервисы будут испытывать трудности с маршрутизацией к узлам, когда установлено
Service.spec.externalTrafficPolicy
?