Подключение Datastax за пределами Kubernetes к кластеру Cassandra в Kubernetes - PullRequest
0 голосов
/ 06 октября 2018

У меня есть кластер Cassandra, работающий в Kubernetes на AWS (с использованием диаграммы инкубатора Helm).Когда я выставляю узлы с помощью балансировщика нагрузки, Datastax не может напрямую подключаться к узлам так, как ему хочется, потому что он пытается использовать внутренние IP-адреса в сети Kubernetes.Но он все еще может успешно читать и писать через loadbalancer. Однако это не рекомендуется , поэтому я ищу правильное решение.

Есть ли способ правильно установить соединение datastax с этой настройкой?Нужно ли менять cassandra.yaml внутри контейнера (гадость)?

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Один из вариантов - использовать транслятор адресов в драйвере:

https://docs.datastax.com/en/developer/java-driver/3.5/manual/address_resolution/

Однако учтите, что вы потеряете такие функции на стороне водителя, как балансировка нагрузки с поддержкой токенов и т. Д.

Лучший подход - обеспечить прямое подключение вашего приложения ко всем узлам C *, чтобы оно могло устанавливать соединения с каждым узлом.

0 голосов
/ 07 октября 2018

Прежде всего.Вы не можете использовать LoadBalancer для этой цели.

Настройте службу следующим образом:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: cassandra
  name: cassandra
spec:
  type: NodePort
  ports:
  - port: 9042
    nodePort: 30042
  selector:
    app: cassandra

Узел portPort будет доступен за пределами кластера Kubernetes.Порт узла должен быть между 30000-32767.

Из драйвера datastax подключитесь к K8S_NODE_IP: NODEPORT (не ip pod).

0 голосов
/ 06 октября 2018

Вы можете создать службу Kubernetes для предоставления модулей в вашем Deployment или StatefulSet.Служба может быть либо NodePort, либо LoadBalancer портом, чтобы иметь внешний доступ.

Вы также должны будете добавить Selector как на вашем сервисе, так и на вашем Deployment / StatefulSet, чтобы ваш сервис мог прикрепить правильный Endpoints

...