Кажется, что-то ловит TCP-трафик на стручки
Я пытаюсь развернуть Kubernetes с помощью Calico (IPIP) с Kubeadm. После завершения развертывания я развертываю Calico, используя эти манифесты
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
Прежде чем применить его, я редактирую CALICO_IPV4POOL_CIDR и устанавливаю его на 10.250.0.0/17, а также использую команду kubeadm init --pod-cidr 10.250.0.0/17
,
Через несколько секунд модули CoreDNS (например, получение addr 10.250.2.2) начинают перезапускаться с ошибкой 10.250.2.2:8080, соединение отказано.
Теперь немного покопаться:
из любого узла в кластере ping 10.250.2.2
работает и достигает pod (это показывает tcpdump в пространстве имен pod net).
из другого модуля (в другом узле) curl 10.250.2.2:8080
работает хорошо
из любого узла в curl 10.250.2.2:8080
не удается с соединением отказано
Так как это cornns pod, он слушает 53 и udp, и tcp, поэтому я попробовал netcat с узлов
nc 10.250.2.2 53
- В соединении отказаноnc -u 10.250.2.2 55
- работает
Теперь у меня есть tcpdump для каждого интерфейса на исходном узле для порта 8080 и прокрутка к модулю CoreDNS, кажется, даже не покидает узел... ооочень iptables?
Я также пробовал плести, канал и фланель, похоже, у всех одна и та же проблема.
У меня уже закончились идеи... какие-нибудь указатели, пожалуйста?
1 ответ
Кажется, проблема с реализацией Calico, модули CoreDNS чувствительны к успешному функционированию модулей сети CNI. Для правильной реализации сетевого плагина CNI вы должны включить --pod-network-cidr
флаг для kubeadm init
команда, а затем применить то же значение к CALICO_IPV4POOL_CIDR
параметр внутри calico.yml
,
Более того, для успешной установки Pod-сети вы должны применить некоторые правила RBAC, чтобы получить достаточные разрешения в соответствии с общими ограничениями безопасности кластера, как описано в официальной документации Kubernetes:
Чтобы Calico работал правильно, вам нужно передать --pod-network-cidr=192.168.0.0/16 в kubeadm init или обновить файл calico.yml, чтобы он соответствовал вашей сети Pod. Обратите внимание, что Calico работает только на amd64.
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
В вашем случае я бы перешел на последние версии Calico хотя бы с v3.3
как указано в примере.
Если вы заметили, что вы правильно установили сетевой модуль Pod, воспользуйтесь возможностью и обновите вопрос, указав текущую настройку среды и версии компонентов Kubernetes со статусами работоспособности.