Я настраиваю кластер Kubernetes, используя Kubernetes: трудный путь учебное пособие, и соединение зависает всякий раз, когда Pod подключается к другому Pod на том же узле через ClusterIP (фиксированный трафик).
Если я обращаюсь к модулям напрямую, без использования ClusterIP, все работает нормально.
Итак, визуально это не работает:
PodA -> ServiceA ClusterIP -> PodA
PodA -> ServiceB ClusterIP -> PodB on same node
Однако это работает на 100% отлично, как и любой Pod, связывающийся с другим Pod напрямую по его IP:
PodA -> ServiceB ClusterIP -> PodB on other node
я нашел Документация Kubernetes по сервисам отладки и перебрал, и вроде все нормально, до раздела Pod не может связаться с собой через Service VIP.
Я вижу правила, добавленные для моих служб в iptables-save
вывод (и я подтвердил использование iptables
Режим):
-A KUBE-SERVICES ! -s 10.200.0.0/16 -d 10.32.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.32.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
-A KUBE-SERVICES ! -s 10.200.0.0/16 -d 10.32.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.32.0.10/32 -p tcp -m comment --comment "kube-system/kube-dns:dns-tcp cluster IP" -m tcp --dport 53 -j KUBE-SVC-ERIFXISQEP7F7OF4
Я вижу из логов кубелета promiscuous-bridge
Флаг режима шпильки:
kubelet[12496]: I1204 04:13:29.761707 12496 flags.go:33] FLAG: --hairpin-mode="promiscuous-bridge"
Я не вижу логов типа Hairpin mode set to "promiscuous-bridge"
специально подтверждая режим, поэтому я явно установил его в kubelet-config.yml также
Кроме того, я отредактировал плагин CNI, чтобы добавить promiscMode: true
(документы), и я вижу PROMISC
на cnio0
интерфейс:
cnio0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
На данный момент я думаю, что либо 1) в этом руководстве не работает шпилька, либо 2) я напортачил с чем-то непонятным, что нарушает это, но я не могу понять, что это такое!
Поскольку этот учебник по Kubernetes The Hard Way известен как справочник по канонической настройке, я сомневаюсь, что он будет номером 1 ... у кого-нибудь есть другие предложения, чтобы определить номер 2?
Это известная проблема с задокументированным CNI. Вот и Вот.
Я думаю, что абстракция «допускает поведение шпильки» - это свойство плагинов. Некоторые это поддерживают. Некоторые этого не делают. Некоторые могут поддерживать его несколькими способами с необходимой конфигурацией. Если вы не поддерживаете его в установке Kubernetes, один класс поведения службы не будет работать правильно. Это может быть нормально для некоторых установок, но не для других.
Однако вы можете использовать Фланель с участием hairpinMode
установлен в true
(конфигурация фланели по умолчанию не устанавливает HairpinMode
к true
). Этот фрагмент конфигурации будет выглядеть так:
{
"name": "<name_here>",
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
}
Пожалуйста, дайте мне знать, помогло ли это.