Kubernetes:VPN 服务器和 DNS 问题

Kubernetes: VPN server and DNS issues

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

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

解析我的 Services

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

但是当我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 服务器到 return 的数据,但不知道我需要做什么。

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

编辑:

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

  • nslookup 用于解析除 openvpn Pod 之外的任何 pod 中的服务名称
  • 虽然 nslookup 在其他 Pods 中有效,但 ping 无效。
  • 类似地 traceroute 在其他 Pods 中通向法兰绒层 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 仍然无效

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

最后我的配置如下所示:

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 子网(因为它默认为 10.2.0.0,Kubernetes 已经使用)

-d 禁用 NAT

-p 将选项推送给客户端

-N 启用 NAT:这对于 Kubernetes 上的此设置似乎很重要

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

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