Kubernetes不同namespace下的backend与frontend如何通信
Kubernetes 跨Namespace服务通信实现方案
Kubernetes 集群默认的CoreDNS服务已经内置跨Namespace的服务解析能力,无需额外安装组件即可实现互访,常用方案如下:
使用服务全限定域名(FQDN)直接访问(最常用)
Kubernetes中Service的默认DNS解析规则为:<服务名>.<命名空间名>.svc.<集群域名后缀>,集群默认域名后缀为cluster.local。
实际使用示例:假设backend服务部署在backend命名空间下,Service名称为backend-svc,暴露端口为8080,那么frontend命名空间下的Pod可以直接通过地址http://backend-svc.backend.svc.cluster.local:8080调用后端接口。
该方式无需额外配置,只要集群DNS服务运行正常、无相关网络策略拦截即可正常通信。创建ExternalName类型Service做短名称映射
如果不想在frontend配置中编写长串FQDN,可以在frontend所在命名空间中创建一个ExternalName类型的Service,作为backend服务的本地别名,配置示例如下:apiVersion: v1 kind: Service metadata: name: backend namespace: frontend # 配置在frontend所在的命名空间 spec: type: ExternalName externalName: backend-svc.backend.svc.cluster.local # 指向backend服务的完整FQDN配置完成后,frontend下的Pod直接访问
http://backend:8080即可请求到后端服务,和同Namespace下的服务访问体验完全一致。注意网络策略限制
如果你的集群开启了NetworkPolicy能力,需要额外配置两条规则保障通信:- backend命名空间下的NetworkPolicy要允许来自frontend命名空间Pod的入站请求,放开对应服务端口
- frontend命名空间下的NetworkPolicy要允许到backend命名空间的出站请求
内容的提问来源于stack exchange,提问作者Mohit Bhatt
相关产品推荐
相关产品推荐

