gke和cloudrun混合部署的情况下,gke中的服务如何走内网调用cloudrun服务,以及cloudrun服务如何走内网调用gke中的服务是需要解决的问题。
gke中的服务如何走内网调用cloudrun服务?
默认cloudrun提供的域名,如果在gke的pod中访问这个域名,会解析成外网,然后Pod调用流量会通过NAT网关出去。
如果想要让gke调用cloudrun服务走内网,就需要配置,让pod解析出一个“内网地址”。这里“内网地址”用双引号是因为,这不是我们部署的cloudrun服务的内网地址,可以理解是cloudrun平台的负载均衡器的内网地址。
使用gke在创建部署k8s集群的时候,我们可以选择使用cloud dns作为集群的coredns(dns服务器)。
这样我们就可以在cloud dns配置clourun的域名(run.app),添加一条子域的A记录,配置A记录解析到cloudrun的负载均衡地址,例如。
将A记录解析到这些IP(具体看cloudrun的文档)。
这样gke中的pod就能访问cloudrun的服务了。
问:这些IP从哪找到的?
答:参考cloud run文档:https://cloud.google.com/run/docs/securing/private-networking?hl=zh-cn
cloudrun服务如何走内网调用gke中的服务?
默认cloudrun与gke网络是不通的,各自在各自的局域网内(VPC)。
要让cloudrun能通过内网调用gke集群中的服务,就需要打通这两个VPC(局域网), 就是我们部署cloudrun服务的时候,在网络模块配置好vpc。
作为网络非专业人士,我们可以这样理解,当在cloudrun服务上配置vpc后,gke的vpc的路由器地址就会广播给cloudrun的路由器。
网络打通后,cloudrun就能直接用gke集群中的虚拟机、或者直接用Pod的IP调用gke集群内部的服务。
但是ClusterIP是调不通的,因为ClusterIP是k8s集群内部的网络。包括使用{servicename}.{namespace}.svc调用也是调不通的,因为这个是k8s内部的dns才能解析的域名。
参考文献: