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

Access Scylla on EKS with Python Driver

我是 Kubernetes 的新手。最近,我被要求在 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

但是,我不知道如何执行最后一步,它说:

Pods running inside the Kubernetes cluster can use this Service to connect to Scylla. Here’s an example using the Python Driver:

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 机器的 public IP。如果需要 public IP,我需要在 AWS 上打开端口(例如 9042)吗?如何让它更安全?

提前致谢。

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