GKE-VPN网络的Kube-DNS解析

时间:2018-10-08 19:15:38

标签: google-cloud-platform google-compute-engine google-kubernetes-engine

GCloud和GKE的新手,并且对DNS感到沮丧。

我们在办公室和运行共享VPC的GCloud之间建立了VPN。现有的防火墙规则似乎可以正常工作。我们可以通过两种方式ping通,也可以成功将ssh传送给Google。

因此,现在从GKE内部,我们需要能够使用DNS在整个VPN中解析主机名。应该很简单。

我编辑了kube-dns配置图,并使用指向我们两个DNS服务器的stubDomains添加了我们的内部域名。重新部署了kube-dns吊舱后,我验证了它们在日志中是否获得了新的stubDomain部分。但是,即使从kube-dns容器本身,我仍然无法解析任何主机。

登录到dnsmasq容器时:

/etc/k8s/dns/dnsmasq-nanny # cat stubDomains
{"internal.domain.com": ["10.85.128.5", "10.85.128.6"]}

/ # nslookup google.com
nslookup: can't resolve '(null)': Name does not resolve

Name:      google.com
Address 1: 108.177.9.138 ox-in-f138.1e100.net
Address 2: 108.177.9.101 ox-in-f101.1e100.net
Address 3: 108.177.9.139 ox-in-f139.1e100.net
Address 4: 108.177.9.100 ox-in-f100.1e100.net
Address 5: 108.177.9.102 ox-in-f102.1e100.net
Address 6: 108.177.9.113 ox-in-f113.1e100.net
Address 7: 2607:f8b0:4003:c13::71 ox-in-x71.1e100.net

/etc/k8s/dns/dnsmasq-nanny # cd /
/ # nslookup rancher.internal.domain.com
nslookup: can't resolve '(null)': Name does not resolve

nslookup: can't resolve 'rancher.internal.domain.com': Name does not resolve

nslookup: can't resolve 'rancher.internal.domain.com': Name does not resolve
/ # nslookup rancher.internal.domain.com 10.85.128.5
Server:    10.85.128.5
Address 1: 10.85.128.5

nslookup: can't resolve 'rancher.internal.domain.com': Name does not resolve

据我所知,Egress应该是Google明确允许的。

但是为了以防万一,我添加了一个出口规则,以允许将TCP / UDP 53连接到服务器。也没有运气。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我正在尝试猜测,因为我们没有您的GKE群集配置,但是我已经遇到类似的情况,并且我敢打赌您没有配置IP别名https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips

一点解释:您无法从另一个vpc上载一个vpc上载,这意味着,如果您在VPC中,则无法从共享连接访问另一个项目或办公室的托管服务(通过我想是vpn ipsec隧道)。由于GKE是一项托管服务,因此默认情况下它将驻留在专用网络中,并且为您的项目打开了一条路,因此您无法使用很多东西(用于监视或进行DNS解析的方法是通用的,因为群集不知道如何加入您的其他网络。

IP别名通过在项目的网络内部创建群集来解决此问题,以便您可以在与项目其余部分相同的ip范围内访问群集,并使用vpc提取。

希望它可以解决您的问题。

答案 1 :(得分:0)

在更广泛的公众评论中回顾我们的讨论:

您可以使用kube-DNS configmap来添加stubDomain,您的Pod将使用它们来进行名称解析。更改配置映射后,需要重新创建kube-dns pod才能使更改生效。使用默认dns设置(clusterFirst is the default)的任何广告连播都将使用kube-dns解析。

对dns配置使用“默认”设置的节点(针对节点resolv.conf进行解析)将忽略在configmap中配置的stubDomain。相反,我们需要更新节点resolve.conf文件。

有两件事要注意。 1)每个GCE VM(包括节点)上的resolv.conf文件为overwritten by the metadata server whenever the DHCP lease is renewed。 2)在群集创建过程中无法以编程方式附加dns条目。

要解决此问题,请使用daemonset as a startup script,它将新的其他名称服务器附加到resolv.conf文件中,然后,确保元数据服务器不会将文件还原回make the file immutable