K8s集群中Pod如何向其他服务发起HTTP请求
K8s集群内跨服务HTTP请求主机地址确定方案
- 同命名空间下通信直接使用目标服务的
Service名称作为主机名
如果两个服务部署在同一个K8s命名空间下,直接填写目标服务的Service名称即可。比如目标服务名为goods-service,暴露的端口是8080,请求地址可写为http://goods-service:8080/你的接口路径。该能力依托K8s集群内置的CoreDNS域名解析能力实现,无需额外配置。 - 跨命名空间下通信使用「Service名称+命名空间后缀」格式
如果两个服务不在同一个命名空间,需要在Service名称后补充目标服务所属的命名空间。比如目标服务名为pay-service,部署在production命名空间下,暴露端口为80,请求地址可写为http://pay-service.production:80/你的接口路径。
也可以使用集群标准全域名格式,兼容性更强,规则为<服务名>.<命名空间>.svc.cluster.local,上述例子也可以写为http://pay-service.production.svc.cluster.local:80/你的接口路径。 - Headless Service场景下访问指定Pod的地址规则
如果目标服务用的是无头Service(即配置中spec.clusterIP设为None的Service),需要访问指定Pod实例时,地址格式为<Pod名称>.<无头服务名>.<命名空间>.svc.cluster.local。
注意:集群内部通信仅需要目标服务为默认的ClusterIP类型即可,无需将服务暴露为NodePort、LoadBalancer类型;也可以将目标服务地址通过环境变量注入到当前服务的Pod中,代码直接读取环境变量取值,避免硬编码适配不同部署环境。
内容的提问来源于stack exchange,提问作者John Wu
相关产品推荐
相关产品推荐

