2016-08-23 73 views
0

我有一个组合服务S.c,它使用两个原子服务S.a和S.b,其中所有三个服务都在Kubernetes集群中运行。这将是一个更好的模式kubernetes集群内服务通信

1)创建SA,SB作为一个无头的服务,让钪通过它使用DNS解析程序,以维护更新后端豆荚像NGINX +(外部负载均衡器)

2)建立安全联盟与他们整合,带clusterIP的Sb,并让Sc通过集群DNS(skyDNS插件)访问/解析它们。这将在内部利用基于IP-Table的负载均衡到pod。

注意:我的k8s群集正在定制解决方案(内部部署虚拟机)上运行。 我们有许多组合服务会消耗1到多个原子服务(如上例所示)。

编辑:在少数情况下,我也需要将服务公开到外部网络 像Sb一样需要从Sc和外部访问。 在这种情况下,创建Sb作为无头服务会更有意义,否则DNS解析器将始终只返回群集IP地址,并且所有外部请求也将被路由到群集IP地址。 我的挑战是这两种情况(帧内VS间)是冲突的相互

例如:nginx的服务(其具有clusterIP)和nginx的-无头服务(无头)

/# 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

使用DNS +簇IP是更简单的方法,并且不需要将您的服务暴露给公共互联网。除非你想要nginx的特定的负载平衡功能,否则我建议你用#2。

+0

感谢您的回复。 –

+0

当我们有一个服务需要在集群内部和外部都可用时,您的想法是什么?请参阅编辑。 –

+0

如果您可以解析DNS并将群集IP路由到群集,#2仍然可以工作(这里是[Google云特定的答案](http://stackoverflow.com/questions/32618437/why-cant-i-access-my -kubernetes-service-via-its-ip/32619002#32619002)可能会有所帮助)。如果你的网络设置很难/不可能,nginx提供的无头服务将是一个不错的选择。 –