2016-09-08 5 views
0

Я запускаю kube-proxy на каждом из моих узлов кубернетов. Я вижу, что он устанавливает правила iptables для создания виртуальных хостов. Я использую flannel overlay networking, чтобы соединять докеревые сети моих узлов. Это прекрасно работает со встроенными контейнерами для докеров. Таким образом, я могу напрямую подключаться к контейнерам, а также к услугам изнутри контейнера докеров.Не удается подключиться к службам с узла-узла

Но из-за некоторых требований мне нужно получить доступ к службам с узла узла так же, как изнутри контейнера докеров. Проблема в том, что это возможно только для узла, работает служебный блок.

Смотрите следующий пример iptables-save на узле, который не хостинг kubernetes-инструментальную панель стручка как осветления (стручок работает на Кубэ-узле-2):

[[email protected] ~]# iptables-save | grep dashboard 
-A KUBE-SEP-CAT6SKLXJIMXS63T -s 172.16.99.5/32 -m comment --comment "kube-system/kubernetes-dashboard:" -j KUBE-MARK-MASQ 
-A KUBE-SEP-CAT6SKLXJIMXS63T -p tcp -m comment --comment "kube- system/kubernetes-dashboard:" -m tcp -j DNAT --to-destination 172.16.99.5:9090 
-A KUBE-SERVICES -d 10.254.242.220/32 -p tcp -m comment --comment "kube-system/kubernetes-dashboard: cluster IP" -m tcp --dport 80 -j KUBE-SVC-XGLOHA7QRQ3V22RZ 
-A KUBE-SVC-XGLOHA7QRQ3V22RZ -m comment --comment "kube-system/kubernetes-dashboard:" -j KUBE-SEP-CAT6SKLXJIMXS63T 

Я теперь в состоянии до curl http://172.16.99.5:9090, но я не могу curl http://10.254.242.220 (на kube-node-2 эта команда успешно завершена). С другой стороны, с того же хоста docker run -it --rm centos /usr/bin/curl http://10.254.242.220 действительно работает.

У меня есть интуиция, что что-то с правилами iptables и NATing отсутствует, так что все пакеты прыгают в цепочку KUBE-SERVICES. Возможно, кто-то может помочь мне понять, что происходит и обеспечить решение.

+0

С какой помощью вы используете Flannel? Может быть, целевой хост блокирует трафик, исходящий из IP-адреса исходного хоста, используя брандмауэр? –

+0

Я хочу использовать бэкэнд VXLAN. –

ответ

0

Если вы хотите получить доступ к услугам со стороны кластера kubernetes, вам необходимо использовать тип сервиса NodePort, см. http://kubernetes.io/docs/user-guide/services/#publishing-services---service-types. Если вы хотите использовать порты за пределами диапазона портов по умолчанию (30000-32767), вы можете дополнительно разрешить новый диапазон с опцией --service-node-port-range на сервере api, см. http://kubernetes.io/docs/admin/kube-apiserver/.

Greetings, Marc

+0

Благодарим вас за ответ. Я хорошо осведомлен о официальных документальных методах публикации сервисов. Но, к сожалению, это не то, что я хочу для развития. Там я хочу развить одну услугу изолированно на моей машине разработки. Эта служба должна иметь доступ к службам кластера, поскольку она запускалась внутри. –

+0

ОК, я понимаю. Тогда, вероятно, нужно добавить маршрут. Я не эксперт в этой теме, но мы так и хотели получить доступ к контейнерам в хост-кластере AWS с наших локальных машин разработки. Должен также работать и на сервисы: 'sudo route -n add -net ' –

+0

Вы попробовали это? Мне не удалось с помощью всего лишь маршрута, так как много NAT и переписывание адресов. –

Смежные вопросы