Диагностика пересечения подсетей в кластере
В платформе “Штурвал” при создании кластера (клиентского, управления) по умолчанию выделяются:
- подсеть подов: 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 будет пусто.
- В логах 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 не может выделить подсеть, при этом в логах нет ошибок о конфликте подсетей.
Пример команды проверки
kubectl -n kube-system logs -l component=kube-controller-manager --all-pods --all-containers | grep -i cidr
В ответе будет пусто.
При обнаружении пересечения диапазонов 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