设置可访问多个GKE k8s Pod和服务集群的VPN

时间:2020-03-05 12:52:36

标签: networking kubernetes google-kubernetes-engine

我想建立一个WireGuard(但与Wireguard无关)VPN,以使GKE pods和服务可以通过该VPN访问。我们有几个群集,我们希望可以通过同一VPN连接对其进行访问。例如:

  • *.cluster1.local解析为GKE cluster-1*.cluster.local
  • *.cluster2.local解析为GKE cluster-2*.cluster.local

在那种情况下,我将不得不创建将重写主机的DNS,但是我还没有。

我目前陷入困境,因为由于超时而无法访问那些集群的服务和Pod的IP(我用Ubuntu 16创建了一个实例并执行curl http://<some-k8s-service-ip>:<port of that service>/)。

看来,每个群集都是隔离的,即使GCE VPN实例与群集在同一网络中,我基本上也无法通过内部IP对其进行访问。例如,我可以从集群内部执行curl http://10.0.26.219:4000/(此地址解析为特定的k8s服务),但是我不能从我创建的随机GCE实例(与GKE处于同一网络中)进行操作集群)。

我已经设置了防火墙规则,允许所有进入和流出流量进入任何端口,但是并不能解决问题。

为澄清起见,所有内容都位于同一网络(eu-north-4)和VPC中。

也许有人曾经设置过这样的VPN?请让我知道是否有我可以提供的信息,因为要考虑的事情太多了。很快,除私有集群外,它都是所有默认值。

1 个答案:

答案 0 :(得分:3)

群集IP永远无法从群集外部访问。这是因为clusterIP通常仅存在于各个GKE节点的iptables中。

您将需要使用NodePort或LoadBalancer服务(LB将使用内部IP地址)来将您的工作负载暴露在群集之外。

您也可以直接访问Pod IP,尽管不建议这样做,因为Pod IP不是静态的,并且如果出于任何原因重新安排了Pod的时间,IP都会改变。

不幸的是,这不会像您提到的那样使用cluster.local来利用内置的群集DNS。相反,您可以配置DNS以将特定的工作负载解析为静态的特定内部LoadBalancer IP。