我是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驱动程序的连接问题?
如果你能告诉我就太好了:
- scylla-cluster-client.scylla的原因。SVC不适合我?
kubectl exec -n ...
和Cassandra驱动程序有什么不同?- 我应该使用哪些ip ?我注意到有来自Kubernetes的集群ip,来自Kubernetes的内部ip,以及来自AWS的EC2机器的公共ip。如果需要公共IP,我是否需要在AWS上打开端口(例如9042)?如何使其更安全?
提前感谢。
scylla-cluster-client.scylla.svc
是一个k8s可解析的DNS地址,因此只能从托管在同一集群(和命名空间)上的pod上工作。你不能从外部使用kubectl
exec在一个Scylla pod上运行命令,因此本质上您是在Scylla节点本身上运行命令并连接到该节点上的localhost
。相比之下,scylla-cluster-client.scylla.svc
是远程连接(但在k8s网络中)- 您不需要使用IP -使用
scylla-cluster-client.scylla.svc
DNS名称。如果您想要使用IP地址,您可以手动解析DNS名称或使用k8s API读取Scylla pod的IP地址—但确实没有理由这样做。如果您想从集群外部连接,则需要公共服务或类似的东西—基本上是k8s托管代理。理论上你可以允许公共舱,但这是非常不可取的。