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

Kubernetes CNI Шпилька Трафик

Я настраиваю кластер 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
      }
    }

Пожалуйста, дайте мне знать, помогло ли это.