我有一个复合服务 Sc,它消耗 2 个原子服务 Sa 和 Sb,其中所有三个服务都在 Kubernetes 集群中运行。什么是更好的模式
1) 将 Sa,Sb 创建为无头服务,并让 Sc 通过外部负载均衡器(如 NGINX+)与它们集成(使用 DNS 解析器来维护更新的后端 pod)
2)用clusterIP创建Sa,Sb,让Sc通过集群DNS(skyDNS插件)访问/解析它们。这将在内部利用基于 IP 表的负载平衡到 pod。
注意:我的 k8s 集群在自定义解决方案(本地虚拟机)上运行我们有许多复合服务,它们消耗 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