Kubernetes:VPN服务器和DNS问题

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

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

我设法达到了在VPN服务器上设置路由之后:

  • 我可以通过IP来ping Podsubnet 10.2.0.0/16
  • 我可以ping一个服务 的IPsubnet 10.3.0.0/1610.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即使存在。