Kubernetes:*** 服务器和 DNS 问题

Posted

技术标签:

【中文标题】Kubernetes:*** 服务器和 DNS 问题【英文标题】:Kubernetes: *** server and DNS issues 【发布时间】:2016-04-22 23:41:42 【问题描述】:

我在我的(本地)Kubernetes 集群中创建了一个docker-open*** 容器,以安全地访问我的服务并在本地调试依赖服务

我可以通过 open*** 服务器连接到集群。但是我无法通过 DNS 解析我的 服务

在 *** 服务器上设置路由后,我设法达到了这一点:

我可以 ping Pod 通过 IP (subnet 10.2.0.0/16) 我可以通过 IP ping 服务 subnet 10.3.0.0/16 就像位于 10.3.0.10 的 DNS) 我可以 curlServices 通过 IP 获取我需要的数据。

但是当我nslookup kubernetes 或任何服务时,我得到:

nslookup kubernetes
;; Got recursion not available from 10.3.0.10, trying next server
;; Got SERVFAIL reply from 10.3.0.10, trying next server

我仍然缺少从 DNS 服务器返回的数据,但不知道我需要做什么。

如何在 Kubernetes DNS 中调试 SERVFAIL 问题?

编辑:

我注意到并希望了解的事情:

nslookup 用于解析除 open*** Pod 之外的任何 pod 中的服务名称 虽然 nslookup 在其他 Pod 中有效,但 ping 却不能。 类似地,其他 Pod 中的 traceroute 通向法兰绒层 10.0.2.2,然后停在那里。

据此,我猜 ICMP 必须在 flannel 层被阻止,这并不能帮助我确定 DNS 被阻止的位置。

EDIT2:

我终于想出了如何让 nslookup 工作:我必须使用

将 DNS 搜索域推送到客户端
push "dhcp-option DOMAIN-SEARCH cluster.local"
push "dhcp-option DOMAIN-SEARCH svc.cluster.local"
push "dhcp-option DOMAIN-SEARCH default.svc.cluster.local"

docker-open*** 图像中添加-p 选项

所以我结束了

docker run -v /etc/open***:/etc/open*** --rm kylemanna/open*** o***_genconfig \
-u udp://192.168.10.152:1194 \
-n 10.3.0.10 \
-n 192.168.10.1 \
-n 8.8.8.8 \
-n 75.75.75.75 \
-n 75.75.75.76 \
-s 10.8.0.0/24 \
-d \
-p "route 10.2.0.0 255.255.0.0" \
-p "route 10.3.0.0 255.255.0.0" \
-p "dhcp-option DOMAIN cluster.local" \
-p "dhcp-option DOMAIN-SEARCH svc.cluster.local" \
-p "dhcp-option DOMAIN-SEARCH default.svc.cluster.local" 

现在,nslookup 有效,但 curl 仍然无效

【问题讨论】:

github.com/kylemanna/docker-open*** 描述了在 docker-volume 中创建配置文件和证书。您是如何创建对在 k8s 集群中运行的 open*** 服务器有效的配置文件和证书的?那么你是如何将这些文件挂载到 k8s-container 中的呢?使用秘密? 抱歉,我从未回复此评论:我为 k8s github.com/kylemanna/docker-open***/pull/98 开了一个 PR 来为您提供所需的一切。这是旧的,现在有其他选项,如github.com/redspread/kube-open*** 【参考方案1】:

最后我的配置是这样的:

docker run -v /etc/open***:/etc/open*** --rm kylemanna/open*** o***_genconfig \
-u udp://192.168.10.152:1194 \
-n 10.3.0.10 \
-n 192.168.10.1 \
-n 8.8.8.8 \
-n 75.75.75.75 \
-n 75.75.75.76 \
-s 10.8.0.0/24 \
-N \
-p "route 10.2.0.0 255.255.0.0" \
-p "route 10.3.0.0 255.255.0.0" \
-p "dhcp-option DOMAIN-SEARCH cluster.local" \
-p "dhcp-option DOMAIN-SEARCH svc.cluster.local" \
-p "dhcp-option DOMAIN-SEARCH default.svc.cluster.local"

-u 用于 *** 服务器地址和端口

-n 供所有 DNS 服务器使用

-s 定义 *** 子网(因为它默认为 Kubernetes 已经使用的 10.2.0.0)

-d 禁用 NAT

-p 将选项推送给客户端

-N 启用 NAT:在 Kubernetes 上进行此设置似乎很关键

最后一部分,将搜索域推送到客户端,是让nslookup 等工作的关键。

请注意,curl 起初不起作用,但似乎在几秒钟后开始起作用。所以它确实有效,但 curl 需要一些时间才能解决。

【讨论】:

在 Ubuntu 15.10 上测试过 Open*** 2.3.12:将配置从“DOMAIN-SEARCH”更改为“DOMAIN”(参考:open***.net/index.php/open-source/documentation/manuals/…)同时使用 linux 客户端中的 up 脚本在 linux 上运行客户端。 (沿着这条线:“open*** --script-security 2 --up update-resolv-conf --config user.o***”) 我使用这个脚本在 k8s 集群中添加 open***。非常感谢【参考方案2】:

试试 curl -4。即使 A 存在,它也可能解析为 AAAA。

【讨论】:

不确定延迟的问题是什么,但是 curl 在连接 5-10 秒后实际上可以正常工作,使用原始配置。

以上是关于Kubernetes:*** 服务器和 DNS 问题的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes DNS 记录

09-kubernetes中的域名解析流程

如何使多个DNS指向Kubernetes中的一个服务

Kubernetes DNS服务配置

Kubernetes DNS支持

Kubernetes addons 之 coredns部署