Consul DNS 和 Kubernetes

Consul DNS and Kubernetes

我是 运行 正在向 Consul 注册的服务器,在我的 Kubernetes 1.8.x 集群外部。 Consul 在我的 Kube 集群中 运行(由 Helm 配置),并与外部 Consul 集群对等。 Kube-dns 配置为使用内部 Consul pods 作为 "stubDomains" 和以下 ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
    {
      "consul": [
        "10.244.0.xxx:8600",
        "10.244.1.xxx:8600",
        "10.244.2.xxx:8600"
      ]
    }

当一切都按预期工作时,kube-dns 解析了外部 consul 域名。问题是当 Consul pod 崩溃并使用新的 IP 地址重新启动时。

有没有一种方法可以从 Consul pod 崩溃中恢复,而无需手动更改 kube-dns ConfigMap 中列出的 IP 地址?

我最终修改了 "consul-ui" 服务(具有 IP 地址的服务)以公开 Consul DNS 端口。我将以下内容从 "consul" 服务(没有集群 IP 的服务)复制到 "consul-ui" 服务,在 ["spec"]["port"] 部分:

  {
    "name": "consuldns-tcp",
    "protocol": "TCP",
    "port": 8600,
    "targetPort": 8600,
    "nodePort": 30766
  },
  {
    "name": "consuldns-udp",
    "protocol": "UDP",
    "port": 8600,
    "targetPort": 8600,
    "nodePort": 32559
  }

然后在 kube-dns ConfigMap 中使用服务 IP 地址而不是 Pod IP 地址。