kubernetes内部集群服务通信

时间:2016-08-23 19:58:57

标签: load-balancing kubernetes iptables kube-dns

我有一个复合服务S.c,它消耗2个原子服务S.a和S.b,其中所有三个服务都在Kubernetes集群中运行。什么是更好的模式

1)创建Sa,Sb作为无头服务,让Sc通过NGINX +等外部Loadbalancer与它们集成(使用DNS解析器来维护更新的后端pod)

2)使用clusterIP创建Sa,Sb并让Sc通过集群DNS(skyDNS插件)访问/解析它们。其中将内部利用基于IP表的负载均衡到pod。

注意:我的k8s群集正在自定义解决方案(内部部署VM)上运行 我们有许多复合服务,它们使用1到多个原子服务(如上例所示)。

编辑:在少数情况下,我还需要将服务公开给外部网络 像Sb需要从Sc和外部访问。 在这种情况下,将Sb创建为无头服务会更有意义,否则DNS解析器将始终仅返回clusterIP地址,并且所有外部请求也将路由到clusterIP地址。 我的挑战是两个场景(内部与内部)相互冲突

示例:nginx-service(具有clusterIP)和nginx-headless-service(无头)

 / # nslookup nginx-service
 Server:    172.16.48.11
 Address 1: 172.16.48.11 kube-dns.kube-system.svc.cluster.local

 Name:      nginx-service
 Address 1: 172.16.50.29 nginx-service.default.svc.cluster.local

 / # nslookup nginx-headless-service
 Server:    172.16.48.11
 Address 1: 172.16.48.11 kube-dns.kube-system.svc.cluster.local

 Name:      nginx-headless-service
 Address 1: 11.11.1.13 wrkfai1asby2.my-company.com
 Address 2: 11.11.1.15 imptpi1asby.my-company.com
 Address 3: 11.11.1.4 osei623a-sby.my-company.com
 Address 4: 11.11.1.6 osei511a-sby.my-company.com
 Address 5: 11.11.1.7 erpdbi02a-sbyold.my-company.com

1 个答案:

答案 0 :(得分:1)

使用DNS +群集IP是一种更简单的方法,并不需要将您的服务暴露给公共互联网。除非您需要来自nginx的特定负载均衡功能,否则我建议使用#2。