Это может быть неприменимо к вашему сценарию, но я хотел задокументировать решение, которое нашел. Мои проблемы в конечном итоге были связаны с настройкой наложения фланелевой сети на наших главных узлах.
# kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-qwer 1/1 Running 0 4h54m
coredns-asdf 1/1 Running 0 4h54m
etcd-h1 1/1 Running 0 4h53m
etcd-h2 1/1 Running 0 4h48m
etcd-h3 1/1 Running 0 4h48m
kube-apiserver-h1 1/1 Running 0 4h53m
kube-apiserver-h2 1/1 Running 0 4h48m
kube-apiserver-h3 1/1 Running 0 4h48m
kube-controller-manager-h1 1/1 Running 2 4h53m
kube-controller-manager-h2 1/1 Running 0 4h48m
kube-controller-manager-h3 1/1 Running 0 4h48m
kube-flannel-ds-amd64-asdf 1/1 Running 0 4h48m
kube-flannel-ds-amd64-qwer 1/1 Running 1 4h48m
kube-flannel-ds-amd64-zxcv 1/1 Running 0 3h51m
kube-flannel-ds-amd64-wert 1/1 Running 0 4h54m
kube-flannel-ds-amd64-sdfg 1/1 Running 1 4h41m
kube-flannel-ds-amd64-xcvb 1/1 Running 1 4h42m
kube-proxy-qwer 1/1 Running 0 4h42m
kube-proxy-asdf 1/1 Running 0 4h54m
kube-proxy-zxcv 1/1 Running 0 4h48m
kube-proxy-wert 1/1 Running 0 4h41m
kube-proxy-sdfg 1/1 Running 0 4h48m
kube-proxy-xcvb 1/1 Running 0 4h42m
kube-scheduler-h1 1/1 Running 1 4h53m
kube-scheduler-h2 1/1 Running 1 4h48m
kube-scheduler-h3 1/1 Running 0 4h48m
tiller-deploy-asdf 1/1 Running 0 4h28m
Если я выполняю exec'd в любой контейнер и ping'd google.com из контейнера, я получаю неправильный адрес ответа.
# ping google.com
ping: bad address 'google.com'
# ip route
default via 10.168.3.1 dev eth0
10.168.3.0/24 dev eth0 scope link src 10.168.3.22
10.244.0.0/16 via 10.168.3.1 dev eth0
IP-маршрут варьируется от ip route
запуска от главного узла.
изменение конфигурации развертывания моих модулей для включения hostNetwork: true
позволило мне пропинговать вне моего контейнера.
мой недавно запущенный IP-маршрут для pod
# ip route
default via 172.25.10.1 dev ens192 metric 100
10.168.0.0/24 via 10.168.0.0 dev flannel.1 onlink
10.168.1.0/24 via 10.168.1.0 dev flannel.1 onlink
10.168.2.0/24 via 10.168.2.0 dev flannel.1 onlink
10.168.3.0/24 dev cni0 scope link src 10.168.3.1
10.168.4.0/24 via 10.168.4.0 dev flannel.1 onlink
10.168.5.0/24 via 10.168.5.0 dev flannel.1 onlink
172.17.0.0/16 dev docker0 scope link src 172.17.0.1
172.25.10.0/23 dev ens192 scope link src 172.25.11.35 metric 100
192.168.122.0/24 dev virbr0 scope link src 192.168.122.1
# ping google.com
PING google.com (172.217.6.110): 56 data bytes
64 bytes from 172.217.6.110: seq=0 ttl=55 time=3.488 ms
Обновление 1
Мы с моим партнером нашли несколько разных веб-сайтов, которые не советуют устанавливать hostNetwork: true
. Затем мы нашли эту проблему и в настоящее время исследуем ее как возможное решение, без hostNetwork: true
.
Обычно вы делаете это с флагом «--ip-masq» для фланели, который по умолчанию имеет значение «false» и определяется как «правило IP-маскарада для трафика, предназначенного вне оверлейной сети». Что звучит как то, что вы хотите.
Обновление 2
Оказывается, что наше перекрытие фланелевой сети было неправильно настроено. Нам нужно было убедиться, что наш configmap для фланели имеет net-conf \ .json.network, соответствующий нашему network.podSubnet (kubeadm config view
). Изменение этих сетей для соответствия облегчило наши сетевые проблемы. Затем мы смогли удалить hostNetwork: true
из наших развертываний.