Kubernetes:VPN服务器和DNS问题
我在我的(本地) Kubernetes集群中启动了一个docker docker-openvpn
容器,以安全地访问我的服务并在本地debugging依赖的服务 。
我可以通过openVPN服务器连接到集群。 但是我无法通过DNS解决我的服务 。
我设法达到了在VPN服务器上设置路由之后:
- 我可以通过IP来ping Pod (
subnet 10.2.0.0/16
) - 我可以ping一个服务 的IP (
subnet 10.3.0.0/16
如10.3.0.10
的DNS) - 我可以用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中debugging此SERVFAIL
问题?
编辑:
我已经注意到,并希望了解的事情:
-
nslookup
可以parsing除openvpn Pod以外的任何pod中的服务名称 - 而
nslookup
在那些其他Pod中工作,ping
不会。 - 类似的在其他
10.0.2.2
traceroute
导致法兰绒层10.0.2.2
,然后停在那里。
从这我猜ICMP必须被阻止在法兰绒层,这并没有帮助我确定DNS被阻止。
EDIT2:
我终于想出了如何让nslookup工作:我不得不推动DNSsearch域与客户端
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
仍然没有
最后我的configuration看起来像这样:
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上这个设置似乎很关键
最后一部分,将search域推向客户端,是获取nslookup
等工作的关键。
注意curl起初不起作用,但似乎在几秒钟后开始工作。 所以它确实有效,但是curl需要一些时间来解决。
尝试curl-4。 也许这是解决AAAA即使存在。