我已经在 AWS 上创建了 Cassandra 有状态/无头集群,它在集群内运行良好。唯一的问题是我无法从外部集群访问它。我尝试了 Kubernetes 文档或 StackOverflow 参考资料中的大部分内容,但仍然无法解决它。
我有一个来自 AWS 的工作安全小组。 这是我的服务和有状态集 yaml 文件。
api版本:v1 种类: 服务 元数据: 姓名:卡桑德拉 规格: 外部流量策略:本地 端口: - 节点端口:30000 端口:30000 协议: TCP 目标端口:9042 选择器: 应用程序:卡桑德拉 类型:节点端口
api版本:“apps/v1” 种类:StatefulSet 元数据: 姓名:卡桑德拉 规格: 服务名称:cassandra 副本:2 选择器: 匹配标签: 应用程序:卡桑德拉 模板: 元数据: 标签: 角色:卡桑德拉 应用程序:卡桑德拉 规格: 终止宽限期秒:10 容器: - 环境: - 名称:MAX_HEAP_SIZE 值:1024M - 名称:HEAP_NEWSIZE 值:1024M - 名称:CASSANDRA_SEEDS 值:“cassandra-0.cassandra.default.svc.cluster.local” - 名称:CASSANDRA_CLUSTER_NAME 值:“SetuCassandra” - 名称:CASSANDRA_DC 值:“DC1-SetuCassandra” - 名称:CASSANDRA_RACK 值:“Rack1-SetuCassandra” - 名称:CASSANDRA_SEED_PROVIDER 值:io.k8s.cassandra.KubernetesSeedProvider - 名称:POD_IP 值来自: 字段参考: 字段路径:status.podIP 图片:库/cassandra:3.11 姓名:卡桑德拉 体积安装: - 挂载路径:/cassandra-storage 名称:cassandra-存储 端口: - 集装箱端口:9042 姓名:cql 体积声明模板: - 元数据: 名称:cassandra-存储 规格: 访问模式: - 读写一次 资源: 要求: 存储:320Gi
为有状态集创建的无头服务并不意味着该服务的用户可以访问。据我了解,其主要目的是用于给定 STS 的 Pod 之间进行内部通信(以在它们之间形成集群)。例如,如果您有 3 节点 mongodb 集群(作为 STS),mongodb-0 将希望与 mongodb-1 和 mongodb-2 交换集群信息/数据。
如果您想以用户身份访问此服务,您对 mongodb-0/1/2 不感兴趣(或不关心),而更关心它作为一项服务。典型的方法是创建一个 headful 服务(如果需要,可能带有节点端口)并访问它。
基本上创建两个服务,一个是无头服务(并与 STS 一起使用),另一个是常规服务。两个服务的 Pod 选择器可以相同。