Openshift: невозможно получить доступ к службе по имени хоста кластера

Я устанавливаю среду OpenShift на своем Mac со следующими версиями:

Mac OS Sierra, Version:10.12.2 (16C67)
oc v1.5.0-alpha.2+e4b43ee
kubernetes v1.5.2+43a9be4
features: Basic-Auth

Я смог запустить версию для разработчиков, выполнив oc cluster up и предоставив пользователю developer права администратора. Затем я добавил контейнер postgres, выполнив следующую команду:

oc new-app https://github.com/MojoJojo/authenticated-payments.git --name="postgres-keycloak" -l name="postgres-keycloak" --context-dir=postgres-keycloak

Команда сработала, как ожидалось, и создала службу с адресами Cluster Hostname и Cluster IP. «Имя хоста кластера» в консоли администратора отображается как:

~ ❯❯❯ oc describe service/postgres-keycloak
Name:           postgres-keycloak
Namespace:      authenticated-collections
Labels:         app=postgres-keycloak
                name=postgres-keycloak
Selector:       app=postgres-keycloak,deploymentconfig=postgres-keycloak,name=postgres-keycloak
Type:           ClusterIP
IP:             172.30.123.160
Port:           5432-tcp    5432/TCP
Endpoints:
Session Affinity:   None
No events.


~ ❯❯❯ oc describe pods/postgres-keycloak-2-8r9n5                                                                                                                                                                       ⏎
Name:           postgres-keycloak-2-8r9n5
Namespace:      authenticated-collections
Security Policy:    restricted
Node:           192.168.65.2/192.168.65.2
Start Time:     Mon, 23 Jan 2017 03:24:41 +0200
Labels:         app=postgres-keycloak
                deployment=postgres-keycloak-2
                deploymentconfig=postgres-keycloak
                name=postgres-keycloak
Status:         Running

Затем я создал еще один контейнер, как показано ниже:

oc new-app https://github.com/MojoJojo/authenticated-payments.git --name="jboss-keycloak" -l name="jboss-keycloak" --context-dir=jboss-keycloak

В указанном выше репозитории Git есть Dockerfile, который объявляет следующие переменные среды:

POSTGRES_PORT_5432_TCP_ADDR=postgres-keycloak.authenticatedcollections.svc.cluster.local 

POSTGRES_PORT_5432_TCP_PORT=5432

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

После дальнейшего расследования я обнаружил, что, хотя я могу пинговать POD, IP-адрес кластера и имена хостов кластера, клиент psql может подключиться только в том случае, если я использую IP-адрес модуля напрямую. На данный момент я пришел к выводу, что разрешение DNS работает нормально - это просто конфигурация службы, которая кажется немного испорченной. Похоже, что прокси-сервер службы не пересылает запрос контейнерам. Кроме того, я не уверен, является ли счетчик Endpoint (ноль) в приведенном выше фрагменте причиной проблемы? Насколько я понимаю, Endpoints используются только тогда, когда доступ к службам осуществляется извне кластера.

Я пробовал установить для тестирования другие службы, например веб-сервер, но похоже, что ни один из Cluster Hostnames или IP-адресов не работает.

Я был бы очень признателен за любые советы, подсказки и указатели, которые помогут найти и исправить эту проблему.

Спасибо за помощь.


person MojoJojo    schedule 23.01.2017    source источник


Ответы (1)


В вашем случае я вижу, что пространство имен authenticated-collections, но в переменной env вы использовали authenticatedcollections.

Думаю должно быть примерно так:

POSTGRES_PORT_5432_TCP_ADDR=postgres-keycloak.authenticated-collections.svc.cluster.local 

Это просто опечатка или неправильная конфигурация? Кроме того, я предполагаю, что оба модуля работают в одном проекте.

person Bartosz Bierkowski    schedule 30.01.2017