【问题标题】:Access stateful headless kubernetes externally?从外部访问有状态的无头 Kubernetes?
【发布时间】:2019-02-27 19:05:44
【问题描述】:

我在 AWS 上创建了 Cassandra 有状态/无头集群,它在集群内运行良好。唯一的问题是我无法从集群外部访问它。我尝试了 Kubernetes 文档或 StackOverflow 参考资料中的大部分内容,但仍然无法解决。

我有一个来自 AWS 的工作安全组。 这是我的服务和 statefulset yaml 文件。

api版本:v1 种类:服务 元数据: 名称:卡桑德拉 规格: externalTrafficPolicy:本地 端口: - 节点端口:30000 端口:30000 协议:TCP 目标端口:9042 选择器: 应用程序:卡桑德拉 类型:节点端口 apiVersion:“应用程序/v1” 种类:StatefulSet 元数据: 名称:卡桑德拉 规格: 服务名称:cassandra 复制品:2 选择器: 匹配标签: 应用程序:卡桑德拉 模板: 元数据: 标签: 角色:卡珊德拉 应用程序:卡桑德拉 规格: 终止GracePeriodSeconds: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 图片:图书馆/卡桑德拉:3.11 名称:卡桑德拉 卷装: - 安装路径:/cassandra-storage 名称:cassandra-storage 端口: - 容器端口:9042 名称:cql volumeClaim模板: - 元数据: 名称:cassandra-storage 规格: 访问模式: - 读写一次 资源: 要求: 存储:320Gi

感谢您对此提供的任何帮助。

【问题讨论】:

  • 请提供有关网络的更多详细信息 - 您无法从哪里访问该服务?你能在 Kubernetes 节点上 SSH 并检查你是否可以使用节点的 IP 和来自 NodePort (30000) 的端口访问 cassandra

标签: cassandra kubernetes


【解决方案1】:

为有状态集创建的无头服务并不意味着该服务的用户可以访问。据我了解,它的主要目的是在给定 STS 的 pod 之间进行内部 sts 通信(在它们之间形成集群)。例如,如果您有 3 个节点的 mongodb 集群(作为 STS),mongodb-0 会希望与 mongodb-1 和 mongodb-2 交换集群信息/数据。

如果您想以用户身份访问此服务,则您对 mongodb-0/1/2 不感兴趣(或关心),但作为服务更是如此。典型的方法是创建一个 headful 服务(如果需要,可能使用 nodeport)并访问它。

基本上创建两个服务,一个是无头服务(并与 STS 一起使用),另一个是常规服务。两个服务的 pod 选择器可以相同。

【讨论】:

    【解决方案2】:

    没有足够的关于 AWS 安全组的详细信息。但我的猜测是,您集群中的安全组不允许来自安全组的流量或来自其他集群的 IP 地址。像这样的:

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2014-11-21
      • 1970-01-01
      • 2019-02-09
      • 2021-06-10
      • 2019-09-21
      • 2020-07-02
      • 2020-11-30
      • 1970-01-01
      相关资源
      最近更新 更多