cloudrun和gke中服务互相调用如何走内网

原创 吴就业 83 0 2024-08-19

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/1031aef136a941f0a895eff0f9706aec

作者:吴就业
链接:https://wujiuye.com/article/1031aef136a941f0a895eff0f9706aec
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

gke和cloudrun混合部署的情况下,gke中的服务如何走内网调用cloudrun服务,以及cloudrun服务如何走内网调用gke中的服务是需要解决的问题。

gke中的服务如何走内网调用cloudrun服务?

默认cloudrun提供的域名,如果在gke的pod中访问这个域名,会解析成外网,然后Pod调用流量会通过NAT网关出去。

如果想要让gke调用cloudrun服务走内网,就需要配置,让pod解析出一个“内网地址”。这里“内网地址”用双引号是因为,这不是我们部署的cloudrun服务的内网地址,可以理解是cloudrun平台的负载均衡器的内网地址。

使用gke在创建部署k8s集群的时候,我们可以选择使用cloud dns作为集群的coredns(dns服务器)。

截屏2024-08-19 16.52.09

这样我们就可以在cloud dns配置clourun的域名(run.app),添加一条子域的A记录,配置A记录解析到cloudrun的负载均衡地址,例如。

截屏2024-08-19 16.52.48

将A记录解析到这些IP(具体看cloudrun的文档)。

截屏2024-08-19 17.02.22

这样gke中的pod就能访问cloudrun的服务了。

问:这些IP从哪找到的?

答:参考cloud run文档:https://cloud.google.com/run/docs/securing/private-networking?hl=zh-cn

截屏2024-08-19 19.48.31

cloudrun服务如何走内网调用gke中的服务?

默认cloudrun与gke网络是不通的,各自在各自的局域网内(VPC)。

要让cloudrun能通过内网调用gke集群中的服务,就需要打通这两个VPC(局域网), 就是我们部署cloudrun服务的时候,在网络模块配置好vpc。

截屏2024-08-19 16.53.37

作为网络非专业人士,我们可以这样理解,当在cloudrun服务上配置vpc后,gke的vpc的路由器地址就会广播给cloudrun的路由器。

网络打通后,cloudrun就能直接用gke集群中的虚拟机、或者直接用Pod的IP调用gke集群内部的服务。

但是ClusterIP是调不通的,因为ClusterIP是k8s集群内部的网络。包括使用{servicename}.{namespace}.svc调用也是调不通的,因为这个是k8s内部的dns才能解析的域名。


参考文献:

#云原生

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

实验:在一个demoset pod中,是否能使用tc拦截同node上其它pod的流量

在k8s集群中,验证在一个demoset的pod中,是否能使用tc来拦截部署在同node上的其它pod的流量?

通过实验理解csi卷创建、挂载、卸载、删除的全流程

基于自定义的csi驱动,通过实验串联理解真个csi的工作流程。

如何编写一个CSI驱动项目,k8s csi驱动开发

CSI驱动必不可少的几个组件:csi-provisioner、controller组件、csi-node-driver-registrar、node组件,controller组件和node组件就是需要我们开发的,其实就是实现几个gRPC接口。

Kubernetes CSI插件中持久卷的挂载和映射机制

持久卷是什么时候创建的,是什么时候挂载的,是怎么创建怎么挂载的?

gcp平台google api的授权,与autoscaler部署配置授权

我们在自己部署autoscaler到gke集群中的时候遇到了403的问题,这个问题后来我们自己部署gcp-filestore-csi-driver的时候也遇到了。

在gcp平台上创建一个gke集群,怎么获取gke集群的证书

在gcp平台上,使用gke服务,创建一个k8s集群,若想在本地能够通过kubectl命令或者可视化工具访问到集群,需要通过gcloud命令获取访问集群的证书。