【发布时间】:2016-04-22 23:41:42
【问题描述】:
我在我的(本地)Kubernetes 集群中创建了一个docker-openvpn 容器,以安全地访问我的服务并在本地调试依赖服务。
我可以通过 openVPN 服务器连接到集群。但是我无法通过 DNS 解析我的 服务。
在 VPN 服务器上设置路由后,我设法达到了这一点:
- 我可以 ping Pod 通过 IP (
subnet 10.2.0.0/16) - 我可以通过 IP ping 服务 (
subnet 10.3.0.0/16就像位于10.3.0.10的 DNS) - 我可以
curl到 Services 通过 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 中调试 SERVFAIL 问题?
编辑:
我注意到并希望了解的事情:
-
nslookup用于解析除 openvpn Pod 之外的任何 pod 中的服务名称 - 虽然
nslookup在其他 Pod 中有效,但ping却不能。 - 类似地,其他 Pod 中的
traceroute通向法兰绒层10.0.2.2,然后停在那里。
据此,我猜 ICMP 必须在 flannel 层被阻止,这并不能帮助我确定 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"
在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 仍然无效
【问题讨论】:
-
github.com/kylemanna/docker-openvpn 描述了在 docker-volume 中创建配置文件和证书。您是如何创建对在 k8s 集群中运行的 openvpn 服务器有效的配置文件和证书的?那么你是如何将这些文件挂载到 k8s-container 中的呢?使用秘密?
-
抱歉,我从未回复此评论:我为 k8s github.com/kylemanna/docker-openvpn/pull/98 开了一个 PR 来为您提供所需的一切。这是旧的,现在有其他选项,如github.com/redspread/kube-openvpn
标签: dns docker vpn kubernetes