MrE*_*MrE 5 dns openvpn kubernetes
我有一个运行应用程序的Kubernetes集群(目前在本地服务器上的一组 Vagrant CoreOS 虚拟机上)
我希望能够在我的笔记本电脑本地调试一个特定的应用程序,所以我的工作VPN建立到集群:一个客户机/服务器VPN基础上kylemanna/docker-openvpn
,部署为一个普通波德
我创建了证书/密钥对、客户端证书等......我可以很好地连接到 VPN。
现在,如果我无法访问服务,连接到 VPN 服务器对我没有多大帮助。我有 DNS 插件在集群中运行 skyDNS。我可以nslookup
从集群中的其他 pod 获取我的服务,所以一切正常,但我无法在 VPN 客户端上按名称解析服务。我可以从 VPN 客户端(在子网中10.2.0.0/16
)通过 IP ping Pod,但我无法使用 DNS 解析
一个nslookup
来自客户的回报:
nslookup myservice 10.3.0.10
Server: 10.3.0.10
Address: 10.3.0.10#53
** server can't find myservice: SERVFAIL
Run Code Online (Sandbox Code Playgroud)
故障排除的问题之一是,DNS IP(来自任何 pod)既不工作ping
也不traceroute
工作,但它解析服务,所以nslookup
我知道检查的方式,但这不是很有用。
Pod 绑定到的 VPN 主机 IP 是192.168.10.152
Kubernetes 子网是10.2.0.0/16
SkyDNS 服务器位于10.3.0.10
VPN 服务器子网10.8.0.0/24
在 VPN 服务器上 ifconfig 给出:
eth0 Link encap:Ethernet HWaddr 02:42:0A:02:16:45
inet addr:10.2.22.69 Bcast:0.0.0.0 Mask:255.255.255.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
Run Code Online (Sandbox Code Playgroud)
所以10.2.22.69
是波德IP和VPN服务器IP是10.8.0.1
与网关是10.8.0.2
我猜。
在 VPN 服务器 pod 上,路由表如下所示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.2.22.1 0.0.0.0 UG 0 0 0 eth0
10.2.22.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.254.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
Run Code Online (Sandbox Code Playgroud)
我可以通过 IP 访问我的应用程序(并获取数据),但在使用服务 IP(位于 10.3.0.0 子网上的代理 IP)时不能
我将路由添加route add -net 10.3.0.0/16 gw 10.8.0.2
到 VPN 服务器,然后我可以使用服务 IP 来获取数据,但nslookup
只是超时。
我猜流量可能不会从 DNS 返回。DNS 本身是 Kubernetes 中的代理服务,因此增加了一定程度的复杂性。不知道如何解决这个问题。
最后我的配置如下所示:
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 子网(默认为 10.2.0.0,Kubernetes 已使用该子网)
-d
禁用 NAT
-p
将选项推送给客户端
-N
启用 NAT:对于 Kubernetes 上的此设置似乎至关重要
最后一部分,将搜索域推送给客户端,是让nslookup
等等工作的关键。
请注意,curl 一开始不起作用,但似乎在几秒钟后开始起作用。所以它确实有效,但卷曲需要一些时间才能解决。
归档时间: |
|
查看次数: |
5388 次 |
最近记录: |