【问题标题】:Kubernetes StatefulSets: External DNSKubernetes StatefulSets:外部 DNS
【发布时间】:2018-08-22 04:17:41
【问题描述】:

Kubernetes StatefulSets 创建具有稳定网络 ID 的内部 DNS 条目。文档在这里对此进行了描述:

StatefulSet 中的每个 Pod 都从 StatefulSet 和 Pod 的序号。该模式为 构造的主机名是 $(statefulset name)-$(ordinal)。这个例子 上面将创建三个名为 web-0、web-1、web-2 的 Pod。有状态集 可以使用 Headless Service 来控制其 Pod 的域。这 由该服务管理的域采用以下形式:$(service name).$(namespace).svc.cluster.local,其中“cluster.local”是 集群域。在创建每个 Pod 时,它会获得一个匹配的 DNS 子域,采用以下形式:$(podname).$(治理服务域), 其中管理服务由上的 serviceName 字段定义 有状态集。

我正在尝试使用无头服务,这对于单个服务之间的通信非常有用,即 web-0.web.default.svc.cluster.local 可以很好地与 web-1.web.default.svc.cluster.local 连接和通信。

我有什么方法可以将它配置为在集群网络之外也能工作,其中“cluster.local”被替换为“clustera.com”之类的东西?

我想给另一个kubernetes集群,我们称之为clusterb.com,访问原集群(clustera.com)的各个服务;我希望它看起来像 clusterb 一样,只是点击 web-1.web.default.svc.clustera.comweb-0.web.default.svc.clustera.com 这样的端点。

这可能吗?我想访问单个服务,而不是负载平衡端点。

【问题讨论】:

    标签: kubernetes google-cloud-platform google-cloud-dns google-kubernetes-engine


    【解决方案1】:

    我建议您测试以下解决方案并检查它们是否可以帮助您在特定情况下实现目标:

    • 第一个肯定是最简单的,我相信您出于某种原因没有实施它,并且您没有在问题中报告原因。

      我说的是 Headless services 对于 ExternalName 类型的服务没有选择器 CNAME 记录。

      ExternalName:通过返回带有其值的 CNAME 记录,将服务映射到 externalName 字段(例如 foo.bar.example.com)的内容。没有设置任何类型的代理。这需要 1.7 或更高版本的 kube-dns

      因此,如果您需要指向其他集群的服务,则需要注册一个指向clusterb相对IP的域名。

    • 我从未测试过的第二种解决方案,但我相信它可以适用于您的情况是使用Federated Cluster,其使用原因是根据文档:

      跨集群发现:联合提供了自动配置 DNS 服务器和负载平衡器以及来自所有集群的后端的能力。例如,您可以确保可以使用全局 VIP 或 DNS 记录来访问来自多个集群的后端。

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2018-02-26
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2018-11-04
      • 2017-10-10
      • 1970-01-01
      相关资源
      最近更新 更多