Разоблачение CockroachDB в Куберне публичной ИС
У меня есть экземпляр CockroachDB, работающий в кластере Kubernetes на Google Kubernetes Engine. Я пытаюсь открыть порт 26257, чтобы я мог подключиться к нему с локального компьютера.
Как указано в этом ответе, переадресация портов на модуль не будет работать.
У меня есть контроллер nginx-ingress, который используется для сопоставления путей моего доменного имени к сервисам, поэтому я попытался использовать это:
Я изменил свой сервис db-cockroachdb-public с ClusterIP на NodePort:
type: NodePort
Я добавил эти строки в мой nginx-контроллер YAML:
-name: postgresql
nodePort: 30472
port: 26257
protocol: TCP
targetPort: 26257
и эти строки для моего входа в YAML:
- host: db.mydomain.com
http:
paths:
- path: /
backend:
serviceName: db-cockroachdb-public
servicePort: 26257
Тем не менее, я не могу подключиться к базе данных - отказано в соединении. Я также попытался отключить перенаправления SSL в контроллере nginx, но он все еще не работает.
Я также попробовал ConfigMap, но он ничего не сделал:
https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md
2 ответа
Есть несколько способов исправить это. Большинство из них связаны с изменением вашей входной конфигурации или с тем, как вы подключаетесь к сервису, но я не буду вдаваться в подробности. Другой вариант - сделать так, чтобы экспедирование работало, чтобы исключить необходимость в оборудовании для входа.
Вы можете настроить переадресацию портов, слегка изменив конфигурационный файл CockroachDB. Изменить имя --host
флаг в вызове двоичного файла Таракана, чтобы быть --advertise-host
вместо. Таким образом, процесс будет прослушивать localhost в дополнение к его имени хоста, что заставит работать переадресацию портов.
редактировать: чтобы продолжить, я переключил конфигурацию по умолчанию в репозитории CockroachDB, чтобы использовать --advertise-host
вместо --host
, так что переадресация портов теперь работает по умолчанию.
Я не знаю, должен ли он работать для прокси-сервера CockroachDB через экземпляр nginx, но ваша установка не удалась по другой причине. Указывая servicePort в разделе правил, вы указываете k8s, какой порт открыт для службы. Само сопоставление по умолчанию происходит с портом 80/443, а не с желаемым портом. Так что вы должны попытаться просто спросить порт 80 в вашем случае.