【问题标题】:Kubernetes: VPN server and DNS issuesKubernetes:VPN 服务器和 DNS 问题
【发布时间】:2016-04-22 23:41:42
【问题描述】:

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

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

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

  • 我可以 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 用于解析除 openvpn 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-openvpn 图像中添加-p 选项

所以我结束了

docker run -v /etc/openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_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 仍然无效

【问题讨论】:

标签: dns docker vpn kubernetes


【解决方案1】:

最后我的配置是这样的:

docker run -v /etc/openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_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 用于 VPN 服务器地址和端口

-n 供所有 DNS 服务器使用

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

-d 禁用 NAT

-p 将选项推送给客户端

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

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

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

【讨论】:

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

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

【讨论】:

  • 不确定延迟的问题是什么,但是 curl 在连接 5-10 秒后实际上可以正常工作,使用原始配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2013-09-05
相关资源
最近更新 更多