【问题标题】:kubernetes intra cluster service communicationkubernetes 集群内服务通信
【发布时间】:2016-08-23 19:58:56
【问题描述】:

我有一个复合服务 S.c,它使用 2 个原子服务 S.a 和 S.b,其中所有三个服务都在 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

【问题讨论】:

    标签: load-balancing kubernetes iptables kube-dns


    【解决方案1】:

    使用 DNS + 集群 IP 是一种更简单的方法,并且不需要将您的服务公开到公共互联网。除非您想从 nginx 获得特定的负载平衡功能,否则我建议您使用 #2。

    【讨论】:

    • 感谢您的回复。
    • 当我们的服务需要在集群内部和外部都可用时,您有什么想法。请参阅编辑。
    • 如果您可以解析 DNS 并将集群 IP 路由到集群,#2 仍然可以工作(这里有一个 Google Cloud specific answer 可能会有所帮助)。如果您的网络设置很难/不可能做到这一点,那么由 nginx 提供前端的无头服务将是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2018-12-17
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多