Рейтинг:0

Kubernetes: IP-адрес Pod выходит за пределы диапазона, указанного в --pod-network-cidr

флаг vn

После обновления до v1.24.0 (после удаления Dockershim) мне пришлось установить кри-докерд, затем я сделал следующее:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.0.196

я выбрал фланель как сетевой плагин:

kubectl применить -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

До сих пор все работало так, как ожидалось, но после включения планирования на главном узле, присоединения к рабочему узлу и развертывания модулей и служб я заметил странную проблему с сетью, из-за которой NodePort и IP кластера сервисы не работали между узлами (при использовании одного узла проблем не было).

Позже я узнал, что поды получают IP-адреса от докер сеть (172.17.0.*) а не от --pod-network-cidr=10.244.0.0/16:

masterzulu@master-zulu:~$ kubectl get pods --all-namespaces -o wide
ПРОСТРАНСТВО ИМЕН ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ IP-УЗЕЛ          

django-space django-588cb669d4-46b4w 1/1 Работает 0 3m35s 172.17.0.4 master-zulu
django-space postgres-deployment-b58d5ff94-hs7t4 1/1 Работает 0 3m35s 172.17.0.5 мастер-зулу
kube-system coredns-6d4b75cb6d-8gw6c 1/1 Работает 0 7m9s 172.17.0.2 мастер-зулу
kube-system coredns-6d4b75cb6d-nxlq9 1/1 Работает 0 7m9s 172.17.0.3 master-zulu

flannel DaemonSet работает:

kube-system kube-flannel-ds-tqgvk 1/1 Работает 0 5m51s 192.168.3.132 master-zulu

и установлен podCIDR:

masterzulu@master-zulu:~$ kubectl get no master-zulu -o json | jq '.spec.podCIDR'
"10.244.0.0/24"

Я попытался добавить --network-plugin=cni флаг в конфигурацию запуска kubelet, но я получаю сообщение об ошибке, так как этот флаг удален вместе с dockershim и другими флагами в v1.24.0.

вот статус кри-докер:

cri-docker.service — интерфейс CRI для Docker Application Container Engine
     Загружено: загружено (/etc/systemd/system/cri-docker.service; включено; предустановка поставщика: включена)
     Активно: активно (работает) с 25 мая 2022 г., 21:36:57 по московскому времени; 5ч 34мин назад
TriggeredBy: cri-docker.socket
       Документы: https://docs.mirantis.com
   Основной PID: 1098 (cri-dockerd)
      Заданий: 15
     Память: 53,4 Мб
     Группа CG: /system.slice/cri-docker.service
             ââ1098 /usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=

26 мая, 01:51:56 master-zulu cri-dockerd[1098]: time="2022-05-26T01:51:56+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для kube-system/coredns-6d4b75cb6d-nxlq9 через плагин: недопустимый статус сети для"
26 мая, 01:51:56 master-zulu cri-dockerd[1098]: time="2022-05-26T01:51:56+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для kube-system/coredns-6d4b75cb6d-nxlq9 через плагин: недопустимый статус сети для"
26 мая, 01:51:56 master-zulu cri-dockerd[1098]: time="2022-05-26T01:51:56+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для kube-system/coredns-6d4b75cb6d-8gw6c через плагин: недопустимый статус сети для"
26 мая 01:53:13 master-zulu cri-dockerd[1098]: time="2022-05-26T01:53:13+01:00" level=info msg="Попытка перезаписать файл конфигурации /var /lib/docker/containers/8ee7640d48c129058259b4b7632a0f6173ad8a9e2d5368cf3c9f29d1ea7db13e/resolv.conf как [сервер имен 192.168.3.48 сервер имен 192.168.0.1]"
26 мая 01:55:30 master-zulu cri-dockerd[1098]: time="2022-05-26T01:55:30+01:00" level=info msg="Попытка перезаписать файл конфигурации /var /lib/docker/containers/f378aff3d077030215ef664d72132b189f8412a8d432e5a554cdbfbb37c3ea19/resolv.conf as [nameserver 10.96.0.10 search django-space.svc.cluster.local svc.cluster.local cluster.local options:5] "ndots
26 мая, 01:55:30 master-zulu cri-dockerd[1098]: time="2022-05-26T01:55:30+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для django-space/django-588cb669d4-46b4w через плагин: недопустимый статус сети для"
26 мая, 01:55:31 master-zulu cri-dockerd[1098]: time="2022-05-26T01:55:31+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для django-space/django-588cb669d4-46b4w через плагин: недопустимый статус сети для"
26 мая 01:55:43 master-zulu cri-dockerd[1098]: time="2022-05-26T01:55:43+01:00" level=info msg="Попытка перезаписать файл конфигурации /var /lib/docker/containers/9523255b7991855027185cecbc8420bbe1268fcef21c2ddcb4d76851bce7e3a0/resolv.conf as [nameserver 10.96.0.10 search django-space.svc.cluster.local svc.cluster.local cluster.local options:5] "ndots
26 мая, 01:55:43 master-zulu cri-dockerd[1098]: time="2022-05-26T01:55:43+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для django-space/postgres-deployment-b58d5ff94-hs7t4 через плагин: недопустимый статус сети для"
26 мая, 01:55:43 master-zulu cri-dockerd[1098]: time="2022-05-26T01:55:43+01:00" level=info msg="Не удалось прочитать IP-адрес модуля из плагина/докера: Не удалось найти статус сети для django-space/postgres-deployment-b58d5ff94-hs7t4 через плагин: недопустимый статус сети для"

Кто-нибудь знает, что мне делать, чтобы решить эту проблему?

Обновлять:

cni0 интерфейс отсутствует на мастере k8s:

masterzulu@master-zulu:~$ ifconfig -a
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        инет 172.17.0.1 сетевая маска 255.255.0.0 широковещательная рассылка 172.17.255.255
        inet6 fe80::42:e9ff:fec1:dd1b prefixlen 64 scopeid 0x20<ссылка>
        эфир 02:42:e9:c1:dd:1b txqueuelen 0 (Ethernet)
        RX-пакеты 5140 байт 418818 (418,8 КБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 5475 байт 522703 (522,7 КБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        инет 192.168.0.196 сетевая маска 255.255.255.0 широковещательная рассылка 192.168.0.255
        inet6 fe80::e808:144d:a0dc:60a6 prefixlen 64 scopeid 0x20<ссылка>
        эфир 98:40:bb:3e:f2:1c txqueuelen 1000 (Ethernet)
        RX-пакеты 6332 байта 515688 (515,6 КБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 6684 байт 631167 (631,1 КБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
        инет 10.244.0.0 сетевая маска 255.255.255.255 широковещательный 0.0.0.0
        inet6 fe80::494:d8ff:fe1b:4aab prefixlen 64 scopeid 0x20<ссылка>
        эфир 06:94:d8:1b:4a:ab txqueuelen 0 (Ethernet)
        Пакеты RX 0 байт 0 (0,0 Б)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 0 байт 0 (0,0 Б)
        Ошибки TX 0 отброшено 129 переполнений 0 несущей 0 коллизий 0
Рейтинг:0
флаг vn

После некоторых исследований я обнаружил, что кри-докерд сервису не хватало некоторых аргументов:

Группа CG: /system.slice/cri-docker.service
         ââ1098 /usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=

Я добавил их вручную в /etc/systemd/system/cri-docker.service:

...
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache - -cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=k8s.gcr.io/pause:3.7
...

Сервис перезагрузки:

sudo systemctl демон-перезагрузка
sudo systemctl перезапустить cri-docker.service

на данный момент cri-dockerd настроен правильно, но проблема сохраняется, позже я заметил, что /opt/cni/bin пуст (без сетевых плагинов для контейнеров):

masterzulu@master-zulu:~$ sudo /usr/local/bin/cri-dockerd
INFO[0000] Подключение к докеру на конечной точке unix:///var/run/docker.sock
INFO[0000] Запустить клиент Docker с тайм-аутом запроса 0 с.
INFO[0000] Режим шпильки не установлен
ERRO[0000] Ошибка проверки списка конфигурации CNI ({
  "имя": "cbr0",
  "cniVersion": "0.3.1",
  "плагины": [
    {
      "тип": "фланелевый",
      "делегат": {
        "HairpinMode": правда,
        "isDefaultGateway": правда
      }
    },
    {
      "тип": "карта порта",
      "возможности": {
        "portMappings": правда
      }
    }
  ]
}
): [не удалось найти плагин «portmap» в пути [/opt/cni/bin]]
INFO[0000] Docker cri networking, управляемый сетевым плагином kubernetes.io/no-op
...
INFO[0000] Настройка cgroupDriver cgroupfs
INFO[0000] Docker cri получил конфигурацию времени выполнения &RuntimeConfig{NetworkConfig:&NetworkConfig{PodCidr:,},}
INFO[0000] Запуск бэкенда GRPC для интерфейса Docker CRI.
INFO[0000] Запустить серверную часть cri-dockerd grpc

Я думаю, что удалил /opt/cni/bin по ошибке, поэтому я снова добавил его содержимое (получить Последний релиз):

cd /tmp && mkdir cni-plugins && wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz && cd cni-plugins && tar zxfv ../cni-плагины-linux-amd64-v1.1.1.tgz
sudo cp /tmp/cni-plugins/* /opt/cni/bin/

лс /opt/cni/bin
пропускная способность мост DHCP межсетевой экран flannel host-device host-local ipvlan loopback macvlan portmap ptp sbr static tuning vlan vrf

после перезапуска кри-докер сервис, все начинает работать как положено:

masterzulu@master-zulu:~$ kubectl get pods -Ao широкий
ПРОСТРАНСТВО ИМЕН ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ IP-УЗЕЛ
django-space django-588cb669d4-4zz7f 1/1 Работает 0 11 с 10.244.0.4 мастер-зулу
django-space postgres-deployment-b58d5ff94-scmrx 1/1 Работает 0 12 с 10.244.0.5 мастер-зулу
kube-system coredns-6d4b75cb6d-rnjlm 1/1 Бег 0 73 м 10.244.0.2 мастер-зулу
kube-system coredns-6d4b75cb6d-s6zl7 1/1 Бег 0 73 м 10.244.0.3 мастер-зулу

cni0 вверх:

masterzulu@master-zulu:~$ ifconfig -a
cni0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
        инет 10.244.0.1 сетевая маска 255.255.255.0 широковещательная рассылка 10.244.0.255
        inet6 fe80::8c8:84ff:fe78:d999 prefixlen 64 scopeid 0x20<ссылка>
        эфир 0a:c8:84:78:d9:99 txqueuelen 1000 (Ethernet)
        RX-пакеты 27714 байт 5010722 (5,0 МБ)
        Ошибки RX 0 отброшено 0 переполнение 0 кадр 0
        Пакеты TX 26936 байт 2898949 (2,8 МБ)
        Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0

кри-докер положение дел:

masterzulu@master-zulu:~$ статус sudo systemctl cri-docker
cri-docker.service — интерфейс CRI для Docker Application Container Engine
     Загружено: загружено (/etc/systemd/system/cri-docker.service; включено; предустановка поставщика: включена)
     Активно: активно (работает) с пятницы 27 мая 2022 г., 22:39:06 BST; 1ч 57мин назад
TriggeredBy: cri-docker.socket
       Документы: https://docs.mirantis.com
   Основной PID: 187399 (cri-dockerd)
      Заданий: 11
     Память: 17,1 Мб
     Группа CG: /system.slice/cri-docker.service
             ââ187399 /usr/local/bin/cri-dockerd --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib /cni/cache --cni-conf-dir=/etc/cni/net.d --po>

28 мая 00:36:20 master-zulu cri-dockerd[187399]: time="2022-05-28T00:36:20+01:00" level=info msg="Использование файла конфигурации CNI /etc/cni/net .d/10-flannel.conflist"

мой вывод

отсутствие --network-plugin=cni в кри-докерд аргументы запуска или любая другая проблема в CNI configs может вызвать эту проблему, если кри-докер считает, что CNI отсутствует и использует интерфейс докер0 напрямую, чтобы модули получали свои IP-адреса из этого диапазона 172.17.0.х.

Надеюсь, это поможет любому, у кого есть такая же проблема.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.