我是库伯奈特斯的新手。最近,我被要求在AWS上设置Scylla。我按照教程在EKS (http://operator.docs.scylladb.com/master/eks.html)上部署Scylla。一切都很顺利。
然后,我在另一个相关教程(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集群中运行的
Pods可以使用此服务连接到Scylla。下面是一个使用Python驱动程序的示例:
从cassandra.cluster导入集群=群集(‘scylla-cluster-client.scylla.svc’)会话= cluster.connect()
脚本无法解析scylla-cluster-client.scylla.svc。因此,我也尝试了不同的is,但遇到了cassandra.cluster.NoHostAvailable错误。
此外,我发现在通过
kubectl exec -n scylla -it scylla-cluster-us-east-1-us-east-1a-0 -- /bin/bash有人能帮我解决使用Python驱动程序的连接问题吗?
如果你能告诉我:
为什么scylla集群-client.scylla.svc对我不起作用? drivers?
kubectl exec -n ...和Cassandra的IP之间有什么不同?我注意到有来自Kubernetes的集群IP、来自Kubernetes的内部IP和来自AWS的EC2机器的公共IP。如果需要公共IP,是否需要在AWS上打开端口(例如9042)?如何使其更安全?提前谢谢。
发布于 2021-02-22 20:12:44
scylla-cluster-client.scylla.svc是一个k8s可解析的DNS地址,因此只能从托管在同一个集群(和命名空间)的pods中工作。您不能从outsidekubectl exec中使用它,因为它在其中一个Scylla上运行命令,因此本质上是在Scylla节点本身上运行该命令,并在该节点上连接到localhost。相反,scylla-cluster-client.scylla.svc正在远程连接(但在k8s网络中)scylla-cluster-client.scylla.svc DNS名称。如果您想使用IP地址,可以使用k8s API手动解析DNS名称或读取Scylla的IP地址--但实际上没有理由这样做。如果您想要从集群之外进行连接,您将需要一个公共服务或类似的东西--基本上是一个k8s托管代理。理论上,你可以允许公共舱,但这是高度inadvisable.https://stackoverflow.com/questions/66319670
复制相似问题