Диагностика пересечения подсетей в кластере

В платформе “Штурвал” при создании кластера (клиентского, управления) по умолчанию выделяются:

  • подсеть подов: 172.16.0.0/16;
  • подсеть сервисов: 10.96.0.0/12.

Подробнее о подсетях кластера см. раздел Сети кластера.

При конфигурировании кластера с вашими подсетями (не дефолтными), проверьте диапазоны IP-адресов на пересечение (например, с помощью онлайн калькулятора). Кластер с конфигурацией, в которой есть пересечение подсетей, успешно не развернется.

Признаки ошибок

Узлы кластера не получают PodCIDR

Пример команды проверки:

kubectl get nodes -o custom-columns=NAME:.metadata.name,PODCIDR:.spec.podCIDR

В ответе в PodCIDR будет пусто.

Ошибка IP-адреса PodCIDR

В логах cilium-agent ошибка IP-адреса PodCIDR, из-за чего он не инициализируется;

Пример команды проверки:

kubectl -n kube-system logs ds/cilium --all-pods --all-containers | grep -i cidr

# Пример вывода лога с ошибкой PodCIDR
level=warning msg="Waiting for k8s node information" error="required IPv4 PodCIDR not available"

Kube-controller-manager не может выделить подсеть

Kube-controller-manager не может выделить подсеть, при этом в логах нет ошибок о конфликте подсетей.

Пример команды проверки:

kubectl -n kube-system get po -l component=kube-controller-manager -o yaml | grep -E "(cluster-cidr|service-cluster-ip-range)"

В ответе будет пусто.

При обнаружении пересечения диапазонов IP-адресов в подсетях подов, сервисов в инициализированном кластере, создайте заново кластер с корректной конфигурацией подсетей.

Примеры конфигурации

Пример конфигурации с пересечением подсетей:

podSubnet: 100.0.0.0/18           # 100.0.0.0 — 100.0.63.255
serviceSubnet: 100.0.64.0/16      # 100.0.0.0 — 100.0.255.255 

Примеры корректной конфигурации подсетей:

# Пример 1
podSubnet: 100.0.0.0/18           # 100.0.0.0 — 100.0.63.255
serviceSubnet: 100.0.64.0/18      # 100.0.64.0 — 100.0.127.255
# Пример 2 
podSubnet: 100.0.0.0/16           # 100.0.0.0 — 100.0.255.255
serviceSubnet: 100.1.0.0/16       # 100.1.0.0 — 100.1.255.255
# Пример 3
podSubnet: 10.244.0.0/16          # 10.244.0.0 — 10.244.255.255
serviceSubnet: 10.96.0.0/16       # 10.96.0.0 — 10.96.255.255

Пример команды получения конфигурации подсетей:

kubectl get cm -n kube-system kubeadm-config -o yaml | grep -i subnet