Я попытался запустить пример гостевой книги в репозитории Kubernetes Github, но не могу получить доступ к этой службе с моего локального хоста. Моя тестовая среда состоит из двух виртуальных машин (с CentOS7), предоставленных CloudStack, с установленным на них OpenShift Origin. Вот список услуг:
[root@openshift-master amd64]# ./oc get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
docker-registry 172.30.39.251 <none> 5000/TCP 1d
guestbook 172.30.55.125 nodes 3000/TCP 56m
kubernetes 172.30.0.1 <none> 443/TCP,53/UDP,53/TCP 1d
redis-master 172.30.24.94 <none> 6379/TCP 1h
redis-slave 172.30.132.250 <none> 6379/TCP 1h
router 172.30.33.117 <none> 80/TCP,443/TCP,1936/TCP 1d
Предлагаемая услуга - это гостевая книга. Вот описание сервиса в гостевой книге:
[root@openshift-master amd64]# ./oc describe svc guestbook
Name: guestbook
Namespace: default
Labels: app=guestbook
Selector: app=guestbook
Type: NodePort
IP: 172.30.55.125
Port: <unset> 3000/TCP
NodePort: <unset> 30642/TCP
Endpoints: 172.17.0.6:3000,172.17.0.7:3000,172.17.0.8:3000
Session Affinity: None
No events.
Если я сделаю:
curl 172.30.55.125:3000
Он работает только с узла, на котором размещен модуль гостевой книги, с другого узла в кластере и на моем хост-компьютере (192.168.1.2). Это не работает.
Я открыл все порты в CloudStack, иначе я не могу использовать ssh для узлов, и в узле я установил это правило брандмауэра:
firewall-cmd --permanent --zone=public --add-port=30642/tcp
30642 - это NodePort, который необходим для доступа к нему вне кластера. У вас есть идеи, как решить? Заранее спасибо.
curl 172.17.0.6:3000
(т.е. каждый из Endpoints
адреса) должны использоваться непосредственно с каждого узла кластера. Если не работает, значит сеть кластера настроена неправильно. Сюда может входить любой брандмауэр или SDN, которые фильтруют пакеты, отправляемые с одного узла на другой.
172.30.55.125:3000
должна иметь запись в iptables
список на каждом узле кластера, поддерживаемый локальным kube-proxy
демон на каждом узле кластера. Если скручивание удаленной конечной точки работает, но не удается использовать виртуальный IP-адрес службы и порт, возможно, что kube-proxy
не работает. Проверьте записи iptables, статус процесса и файл журнала.
Наконец, возможно, что приложение гостевой книги действительно получает соединение, но затем оно прерывается или блокируется, пытаясь выполнить обреченный обратный поиск DNS.