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