将Kubernetes外部的Datastax连接到Kubernetes中的Cassandra群集

将Kubernetes外部的Datastax连接到Kubernetes中的Cassandra群集,cassandra,kubernetes,datastax-java-driver,Cassandra,Kubernetes,Datastax Java Driver,我在AWS上的Kubernetes中运行了一个Cassandra集群(使用孵化器头盔图表)。当我使用负载平衡器公开节点时,Datastax无法以它想要的方式直接连接到节点,因为它试图使用Kubernetes网络内部的IP。但它仍然可以通过负载平衡器成功读写。所以我正在寻找一个合适的解决方案 有没有办法让datastax与此设置正确连接?是否需要更改容器内的cassandra.yaml(恶心)?您可以创建一个容器来公开部署或状态集中的POD。该服务可以是或端口,以便您具有外部访问权限 您还必须在您

我在AWS上的Kubernetes中运行了一个Cassandra集群(使用孵化器头盔图表)。当我使用负载平衡器公开节点时,Datastax无法以它想要的方式直接连接到节点,因为它试图使用Kubernetes网络内部的IP。但它仍然可以通过负载平衡器成功读写。所以我正在寻找一个合适的解决方案

有没有办法让datastax与此设置正确连接?是否需要更改容器内的
cassandra.yaml
(恶心)?

您可以创建一个容器来公开部署或状态集中的POD。该服务可以是或端口,以便您具有外部访问权限


您还必须在您的服务和部署/状态集上添加一个地址转换器,以便您的服务可以连接到右侧

一个选项是在驱动程序处使用地址转换器:

但是请注意,您将失去驱动端功能,如令牌感知负载平衡等


最好的方法是提供从应用程序到所有C*节点的直接连接,以便它可以建立到每个节点的连接。

首先。您不能将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_NODE_IP:NODEPORT(不是pod IP)。

如果您发布您的卡桑德拉,我也会很有帮助。ymlI刚刚使用了官方头盔报告上的卡桑德拉头盔图表。除了我添加了一个针对Cassandra podsI的负载平衡器之外,我更新了我的问题,以便更清楚地了解我的设置。我已经试过一个负载均衡器,它不是理想的,它需要使用内部IP吗?卡桑德拉可以发布另一个IP吗?如果它可以发布hostIP,那么您可以使用
NodePort
我相信这需要我在pod内修改
cassandra.yaml
,这就减少了在此处使用Kubernetes的一些好处。您需要修改部署或状态集定义,无论helm chart如何部署。Cassandra有侦听和广播地址,因此您的设置需要正确配置它们。我仍然在尝试连接节点时遇到Datastax错误,因为节点不会将自身(或其对等方)视为
K8S\u节点\u IP
s。如果我还修改了
cassandra.yaml
s,听起来这可能会起作用,但我希望避免这种情况。您会遇到什么错误?我自己测试过,效果很好。这是我的密码: