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



我有一个在 AWS 上的 Kubernetes 中运行的 Cassandra 集群(使用 incubator Helm chart(。当我使用负载均衡器公开节点时,Datastax 无法以它想要的方式直接连接到节点,因为它尝试使用 Kubernetes 网络内部的 IP。但它仍然可以通过负载均衡器成功读取和写入。但是不建议这样做,所以我正在寻找适当的解决方案。

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

首先。不能将负载均衡器用于此目的。

按如下方式设置服务:

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

nodePort 将在 Kubernetes 集群之外可用。节点端口必须介于 30000-32767 之间。

从datastax驱动程序,连接到K8S_NODE_IP:NODEPORT(不是pod ip(。

一种选择是在驱动程序中使用地址转换器:

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

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

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

您可以创建一个 Kubernetes 服务来公开部署或 StatefulSet 中的 Pod。 该服务可以是NodePort端口,也可以是LoadBalancer端口,以便您具有外部访问权限。

您还必须在服务和部署/状态集上添加一个Selector,以便您的服务可以附加正确的Endpoints

最新更新