使用Python驱动程序在EKS上访问Scylla



我是Kubernetes的新手。最近,我被要求在AWS上安装"锡拉"。我按照教程在EKS上部署Scylla (http://operator.docs.scylladb.com/master/eks.html)。一切顺利。

然后,我在另一个相关教程(http://operator.docs.scylladb.com/master/generic.html)中遵循访问数据库一节。

我能够运行前两步的命令:

kubectl exec -n scylla -it scylla-cluster-us-east-1-us-east-1a-0 -- cqlsh
> DESCRIBE KEYSPACES;
kubectl -n scylla describe service scylla-cluster-client

但是,我不知道如何执行最后一步,上面写着:

运行在Kubernetes集群内的pod可以使用此服务连接到Scylla。下面是一个使用Python驱动程序的示例:

from cassandra.cluster import Cluster
cluster = Cluster(['scylla-cluster-client.scylla.svc'])
session = cluster.connect()

脚本解析scylla-cluster-client.scylla.svc失败。因此,我也尝试了不同的ip,但遇到cassandra.cluster.NoHostAvailable错误。

另外,我发现通过

连接到集群后没有安装pip
kubectl exec -n scylla -it scylla-cluster-us-east-1-us-east-1a-0 -- /bin/bash

谁能帮我解决使用Python驱动程序的连接问题?

如果你能告诉我就太好了:

  1. scylla-cluster-client.scylla的原因。SVC不适合我?
  2. kubectl exec -n ...和Cassandra驱动程序有什么不同?
  3. 我应该使用哪些ip ?我注意到有来自Kubernetes的集群ip,来自Kubernetes的内部ip,以及来自AWS的EC2机器的公共ip。如果需要公共IP,我是否需要在AWS上打开端口(例如9042)?如何使其更安全?

提前感谢。

  1. scylla-cluster-client.scylla.svc是一个k8s可解析的DNS地址,因此只能从托管在同一集群(和命名空间)上的pod上工作。你不能从外部使用
  2. kubectlexec在一个Scylla pod上运行命令,因此本质上您是在Scylla节点本身上运行命令并连接到该节点上的localhost。相比之下,scylla-cluster-client.scylla.svc是远程连接(但在k8s网络中)
  3. 您不需要使用IP -使用scylla-cluster-client.scylla.svcDNS名称。如果您想要使用IP地址,您可以手动解析DNS名称或使用k8s API读取Scylla pod的IP地址—但确实没有理由这样做。如果您想从集群外部连接,则需要公共服务或类似的东西—基本上是k8s托管代理。理论上你可以允许公共舱,但这是非常不可取的。

最新更新