Kubernetes:VPN服务器和DNS问题

MrE*_*MrE 9 dns vpn docker kubernetes

docker-openvpn在我的(本地)Kubernetes集群中旋转了一个容器,以便安全地访问我的服务并在本地调试相关服务.

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

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

  • 我可以通过IP()ping一个Pod subnet 10.2.0.0/16
  • 我可以通过IP ping 服务 (就像在的DNS )subnet 10.3.0.0/1610.3.0.10
  • 我可以curl服务 的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
Run Code Online (Sandbox Code Playgroud)

我仍然缺少从DNS服务器返回的数据,但无法确定我需要做什么.

如何SERVFAILKubernetes DNS中调试此问题?

编辑:

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

  • nslookup 用于解析除openvpn Pod之外的任何窗格中的服务名称
  • 虽然nslookup在其他Pod中工作,ping但没有.
  • 同样traceroute在那些其他Pods导致法兰绒层10.0.2.2然后停在那里.

从这个我想ICMP必须在法兰绒层被阻止,这并没有帮助我找出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"
Run Code Online (Sandbox Code Playgroud)

添加图像中的-p选项docker-openvpn

所以我最终得到了

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" 
Run Code Online (Sandbox Code Playgroud)

现在,nslookup工作,但curl仍然没有

MrE*_*MrE 9

最后我的配置看起来像这样:

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"
Run Code Online (Sandbox Code Playgroud)

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

-n 供所有DNS服务器使用

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

-d 禁用NAT

-p 将选项推送到客户端

-N 启用NAT:对Kubernetes的这种设置似乎至关重要

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

请注意,curl最初没有工作,但似乎在几秒钟后开始工作.所以它确实有效,但curl需要一点时间才能解决.