Как я могу подключиться к 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"

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

1 ответ

Решение

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

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/

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

Другие вопросы по тегам