Kubernetes Pod-建立 OpenVPN 客户端连接后 DNS 无法解析

Kubernetes Pod-建立 OpenVPN 客户端连接后 DNS 无法解析

我有一个 Kubernetes 部署,当将其部署到docker-desktopMac 版 Kubernetes 中时,可以正常工作,但 Azure Kubernetes 中完全相同的配置(配置文件、Docker 映像)却不行。

要求:Pod 必须连接到 VPN 连接,所有出站 Web 流量必须通过 VPN 连接路由,同时保持与“本地” Kubernetes 资源的连接。

在建立 VPN 连接之前,所有网络运行正常。

VPN连接建立前的路由表:

/app # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.244.1.1      0.0.0.0         UG    0      0        0 eth0
10.244.1.0      *               255.255.255.0   U     0      0        0 eth0

VPN连接建立后的路由表:

/app # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.7.1.1        128.0.0.0       UG    0      0        0 tun0
default         10.7.1.1        0.0.0.0         UG    0      0        0 tun0
10.7.1.0        *               255.255.255.0   U     0      0        0 tun0
10.244.1.0      *               255.255.255.0   U     0      0        0 eth0
107.174.17.243  10.244.1.1      255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.7.1.1        128.0.0.0       UG    0      0        0 tun0

基本上,“up”脚本会删除原始网络的默认网关,并用 VPN 网关替换它,“down”脚本会恢复原始默认网关。

主要问题是,一旦建立 VPN 连接,我就无法再获得任何域名解析。kube-dns在两个地方运行,并且 pod 规范具有明确的 DNS 配置:

      dnsConfig:
        nameservers:
          - 8.8.8.8
          - 8.8.4.4

我再次重申在建立 VPN 连接之前,所有网络运行正常。

当我nslookup google.com使用 VPN 连接运行时,它可以正常工作

/app # nslookup google.com
Server:         8.8.8.8
Address:        8.8.8.8:53

Non-authoritative answer:
Name:   google.com
Address: 172.217.11.238

Non-authoritative answer:
Name:   google.com
Address: 2607:f8b0:400f:800::200e

但是当我ping google.com在 VPN 启动时运行时,它会失败

/app # ping google.com
ping: bad address 'google.com'

但是,如果我知道要与之通信的服务器的确切 IP 地址,我就可以让它给我一个响应。例如,针对 Google 先前解析的 IP 地址调用 CURL。

/app # curl "http://172.217.11.238" > output.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   219  100   219    0     0    782      0 --:--:-- --:--:-- --:--:--   782
/app # cat output.txt
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
/app # 

因此,问题似乎仅仅是 VPN 连接启动时 DNS 解析,但我不确定如何解决它。

答案1

所以我设法解决了这个问题,但我并不是很喜欢。

在我的 OpenVPN--up脚本中

ip route add {IP_OF_KUBE_DNS} via $network_net_gateway

这将为内部网络上的 DNS 服务器 IP 地址添加一条显式路由,告诉它通过原始网络网关

相关内容