Как я могу подключиться к CockroachDB из-за пределов кластера Kubernetes?

Я настроил и развернул набор Kubernetes с отслеживанием состояния, содержащий три модуля CockroachDB, как по документам. Моя конечная цель — запросить базу данных без использования kubectl. Моя промежуточная цель — запросить базу данных без фактического обстрела модуля базы данных.

Я перенаправил порт из модуля на свою локальную машину и попытался подключиться:

$ kubectl port-forward cockroachdb-0 26257
Forwarding from 127.0.0.1:26257 -> 26257
Forwarding from [::1]:26257 -> 26257

# later, after attempting to connect:
Handling connection for 26257
E0607 16:32:20.047098   80112 portforward.go:329] an error occurred forwarding 26257 -> 26257: error forwarding port 26257 to pod cockroachdb-0_mc-red, uid : exit status 1: 2017/06/07 04:32:19 socat[40115] E connect(5, AF=2 127.0.0.1:26257, 16): Connection refused


$ cockroach node ls --insecure --host localhost --port 26257
Error: unable to connect or connection lost.

Please check the address and credentials such as certificates (if attempting to
communicate with a secure cluster).

rpc error: code = Internal desc = transport is closing
Failed running "node"

Кому-нибудь удается это осуществить?


person Plato    schedule 07.06.2017    source источник


Ответы (1)


Изнутри кластера Kubernetes вы можете обращаться к базе данных, подключив DNS-имя cockroachdb-public. В документы, соответствующие примеру команды:

kubectl run cockroachdb -it --image=cockroachdb/cockroach --rm --restart=Never -- sql --insecure --host=cockroachdb-public

Пока эта команда использует образ CockroachDB, любой драйвер клиента Postgres, который вы используете, должен иметь возможность подключаться к cockroachdb-public при работе с кластером Kubernetes.

Для подключения к базе данных из-за пределов кластера Kubernetes потребуется открыть службу cockroachdb-public. Детали будут в некоторой степени зависеть от того, как был развернут ваш кластер Kubernetes, поэтому я рекомендую ознакомиться с их документацией по этому вопросу: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#exposed-the-service

И, если вам интересно, причина, по которой переадресация порта 26257 не работает для вас, заключается в том, что переадресация портов из модуля работает только в том случае, если процесс в модуле прослушивает локальный хост, но настроен процесс CockroachDB в конфигурации statefulset. для прослушивания имени хоста пода (как настроено с помощью флага --host).

person Alex Robinson    schedule 07.06.2017
comment
Спасибо! Теперь это работает, указав ExternalIPs службы cockroachdb-public на главный узел со статическим IP-адресом. - person Plato; 08.06.2017
comment
не могли бы вы рассказать подробнее и опубликовать свои файлы конфигурации? Используете ли вы входной контроллер? - person skunkwerk; 31.12.2017
comment
Файл конфигурации — это тот, который использовался в ранее связанной документации — raw.githubusercontent.com/cockroachdb/cockroach/master/cloud/ . Предположительно, вы можете использовать входной контроллер, но в любом крупном облачном провайдере вы также можете просто изменить свой сервис на тип NodePort или тип LoadBalancer, как описано в документах Kubernetes, на которые я ссылался в своем ответе. - person Alex Robinson; 02.01.2018