Как переслать соединение для cqlsh приватно в GKE - PullRequest
0 голосов

Итак, я пытаюсь подключиться к своему экземпляру scylla в GKE с помощью cqlsh, открыв соединение с Kubectl. Я, однако, сталкиваюсь с некоторыми странными проблемами, которые я не могу понять.

Я запускаю scylla на GKE, это, по сути, подделка Кассандры, которая должна бежать намного быстрее, чем сама Кассандра. Чтобы получить доступ к scylla, я хочу иметь возможность подключаться к БД с помощью команды kubectl port-forward, чтобы я мог подключать внешние инструменты, такие как table plus. Когда я запускаю kubectl port-forward pod/scylla-0 -n scylla 9042, я ожидаю, что порт будет доступен с моей локальной машины, однако, когда я пытаюсь соединиться с локальным cqlsh, я получаю следующие сообщения об ошибках:

from clqsh: Connection error: ('Unable to connect to any servers', {'127.0.0.1': ConnectionShutdown('Connection to 127.0.0.1 was closed',)})

from kubectl: E0520 17:12:12.522329      51 portforward.go:400] an error occurred forwarding 9042 -> 9042: error forwarding port 9042 to pod <some id>, uid : exit status 1: 2019/05/20 15:12:12 socat[998972] E connect(5, AF=2 127.0.0.1:9042, 16): Connection refused

Я также пытался перенаправить службу напрямую к аналогичным результатам

Я лично считаю, что самая странная часть этого заключается в том, что когда я открываю scylla с помощью loadbalancer, я могу подключиться к нему совершенно нормально, я также могу использовать JConsole, когда пересылаю порт JMX для scylla, поэтому я у меня столько головной боли по этому поводу.

1 Ответ

2 голосов
/ 22 мая 2019

Причиной сбоя является то, что переадресация порта привязывается только к локальному хосту (127.0.0.1).Если вы войдете внутрь модуля с

kubectl exec -ti pod/scylla-0 -n scylla -- /bin/bash
yum install net-tools -y
netstat -nlup | grep scylla 

Вы заметите, что scylla привязывается к IP-адресу контейнера контейнера, а не 127.0.0.1, поэтому вы получаете отказ в соединении.

Попробуйте: kubectl port-forward --address your_pod_ip pod/mypod 9042:9042

В качестве альтернативы: kubectl port-forward --address your_service_ip service/myservice 9042:9042

Я сам не пробовал, но думаю, что это может сработать.Пожалуйста, дайте мне знать.

...