Ищите способ определить, почему пакет, покидающий мой кластер, сохранит свой IP-адрес - PullRequest
0 голосов
/ 01 апреля 2020

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

Фон в том, что у меня есть два кластера. Я установил первый (месяцы go) вручную, используя это руководство , и оно отлично работало. Затем второй, который я создавал несколько раз, когда создавал / отлаживал скрипты Anisble для автоматизации создания первого кластера.

В кластере 2 у меня проблема с сетью ... Я могу добраться до модулей на других узлах, но могу ни к чему в моей обычной сети. У меня есть tcpdump'd физический интерфейс на узле 0 в cluster2 при проверке связи с модулем busybox, и внутренний IP-модуль 172.16.0.x виден на этом интерфейсе как исходный IP-адрес - и моя сеть вне узла не имеет понятия, что делать с этим. Но на cluster1 этот же тест показывает ip узла вместо pod ip - как я предполагаю, что он должен работать.

Мой вопрос: как я могу устранить эту проблему? Любые идеи были бы великолепны, поскольку я занимался этим уже несколько дней. Даже если это кажется очевидным, так как я больше не вижу леса сквозь деревья ... ie. оба кластера выглядят одинаково везде, я знаю, как проверить:)

предостережение "мои кластеры одинаковы": Cluster1 работает kubectl 1.16 cluster2 работает 1.18

---- редактировать после @Matt бросил на меня некоторые знания о kube-proxy ----

Не знал, что правила kube-proxy можно просто прочитать командой iptables! Круто!

Я думаю, что моя проблема в этих адресах 10. net в сломанном кластере. Я даже не знаю, откуда они пришли, поскольку их нет ни в одном из моих ansible конфигурационных скриптов или файлов инициализации kube ... Я использую все 172 в своих конфигах.

Я действительно вытягиваю некоторые конфиги напрямую из источника (фланелевые и CSI / CPI) я опущу их и проверим, нет ли там десятых ... Надеюсь, это во фланелевых настройках по умолчанию или что-то еще, и я могу просто изменить этот файл yml!

кластер1 работает:

[root@k8s-master ~]# iptables -t nat -vnL| grep POSTROUTING -A5
Chain POSTROUTING (policy ACCEPT 22 packets, 1346 bytes)
 pkts bytes target     prot opt in     out     source               destination
6743K  550M KUBE-POSTROUTING  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */
    0     0 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0
3383K  212M RETURN     all  --  *      *       172.16.0.0/16        172.16.0.0/16
 117K 9002K MASQUERADE  all  --  *      *       172.16.0.0/16       !224.0.0.0/4
    0     0 RETURN     all  --  *      *      !172.16.0.0/16        172.16.0.0/24
    0     0 MASQUERADE  all  --  *      *      !172.16.0.0/16        172.16.0.0/16

кластер2 - не работает:

[root@testvm-master ~]# iptables -t nat -vnL | grep POSTROUTING -A5
Chain POSTROUTING (policy ACCEPT 1152 packets, 58573 bytes)
 pkts bytes target     prot opt in     out     source               destination
 719K   37M KUBE-POSTROUTING  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */
    0     0 RETURN     all  --  *      *       10.244.0.0/16        10.244.0.0/16
    0     0 MASQUERADE  all  --  *      *       10.244.0.0/16       !224.0.0.0/4
 131K 7849K RETURN     all  --  *      *      !10.244.0.0/16        172.16.0.0/24
    0     0 MASQUERADE  all  --  *      *      !10.244.0.0/16        10.244.0.0/16

1 Ответ

2 голосов
/ 03 апреля 2020

Boom! @Matt advice для победы.

Использование iptables для проверки правил nat, которые применяла фланель, добилось цели. Я смог найти 10.244 su bnet в фланелевой конфигурации, на которую ссылались в руководстве, которое я использовал.

У меня было два варианта. 1. Загрузите и измените фланелевый yaml перед развертыванием CNI или 2. Сделайте так, чтобы моя декларация kubeadmin init su bnet совпадала с фланелевой.

Я выбрал вариант 2, потому что я не хочу изменять фланель Конфиг каждый раз ... Я просто хочу вытащить их последний файл и запустить с ним. Это помогло решить мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...