将kubernetes外部的datastax连接到kubernetes中的cassandra集群

djp7away  于 2021-06-15  发布在  Cassandra
关注(0)|答案(3)|浏览(434)

我有一个cassandra集群在aws上的kubernetes中运行(使用孵化器helm图表)。当我用负载均衡器公开节点时,datastax无法以它想要的方式直接连接到节点,因为它试图使用kubernetes网络内部的ip。但它仍然可以通过负载均衡器成功地读写。这是不建议,但是,所以我正在寻找一个适当的解决办法。
有没有办法让datastax与此设置正确连接?是否需要更改 cassandra.yaml 集装箱里面(恶心)?

31moq8wy

31moq8wy1#

您可以创建一个kubernetes服务来公开部署或statefulset中的pod。服务可以是 NodePort 或者 LoadBalancer 端口,以便您可以从外部访问。
您还必须添加 Selector 在您的服务和部署/状态集上,以便您的服务可以附加正确的 Endpoints

laawzig2

laawzig22#

一种选择是在驱动程序处使用地址转换器:
https://docs.datastax.com/en/developer/java-driver/3.5/manual/address_resolution/
但是请注意,您将失去驱动程序端的功能,如令牌感知负载平衡等。
最好的方法是提供从应用程序到所有c*节点的直接连接,这样它就可以建立到每个节点的连接。

6l7fqoea

6l7fqoea3#

首先。不能将loadbalancer用于此目的。
将服务设置为:

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

节点端口将在kubernetes集群之外可用。节点端口必须在30000-32767之间。
从datastax驱动程序,连接到k8s\u node\u ip:nodeport(不是pod ip)。

相关问题