首页 > 解决方案 > GKE - 到 VPN 网络的 Kube-DNS 解析

问题描述

刚接触 GCloud 和 GKE,对 DNS 感到沮丧。

我们的办公室和运行共享 VPC 的 GCloud 之间有一个 VPN。现有的防火墙规则似乎工作正常。我们可以双向 ping 通,我们可以成功 ssh 到 Google。

所以现在在 GKE 中,我们需要能够使用 DNS 跨 VPN 解析主机名。应该很简单。

我编辑了 kube-dns 配置映射,并使用指向我们两个 DNS 服务器的 stubDomains 添加了我们的内部域名。重新部署 kube-dns pod 后,我在日志中验证了它们正在获取新的 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 到服务器。也没有运气。

有什么想法吗?

标签: google-cloud-platformgoogle-compute-enginegoogle-kubernetes-engine

解决方案


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

一点解释:你不能从另一个 vpc pearing 访问一个 vpc pearing,这意味着如果你在一个 VPC 中,你不能从一个共享连接到另一个项目或你的办公室访问托管服务(通过一个 vpn ipsec我想是隧道)。由于 GKE 是一项托管服务,默认情况下它会存在于一个私有网络中并打开一个与您的项目的连接,因此您不能使用很多东西(prometheus 用于监控或进行 DNS 解析,因为集群不知道如何加入您的其他网络)。

IP Aliasing 通过在项目网络中创建集群来解决这个问题,这样您就可以访问与项目其余部分相同的 ip 范围内的集群并使用 vpc pearing。

希望它能解决你的问题。


推荐阅读