我应该注册Pod或Kubernete服务以在kubernetes集群上担任领事

时间:2018-10-12 07:44:15

标签: asp.net-core kubernetes consul api-gateway ocelot

我已经在kubernetes集群上部署了ocelot和consul。 Ocelot充当将请求分发到内部服务的api网关。领事负责服务发现和健康检查。 (顺便说一句,我按照领事的official document将领事部署到kubernetes集群上。)

我的服务(即asp.net核心webapi)也已部署到具有3个副本的kubernetes集群中。我没有创建kubernete服务对象,因为这些容器只能由同一集群中的豹猫消耗。

架构如下:

            ocelot
              |
            consul
              /\
       webapi1 webapi2 ...
        (pod)   (pod)  ...

此外,IMO,领事可以在Pod失效时注销Pod(webapi)的注册。所以我看不到需要创建kubernete服务对象

现在我的问题:在pod启动时将每个pod(webapi)注册到领事是否正确?还是应该在这些Pod(webapi)的前面创建一个kubernete服务对象,然后将该服务对象注册到领事?

1 个答案:

答案 0 :(得分:2)

  • Headless Service是答案

Kubernetes环境在本质上更具动态性。

  

吊舱失效时注销服务

  

Kubernetes豆荚是凡人。他们出生,死后就是   没有复活。每个Pod都有自己的IP地址,即使是那些IP   随着时间的推移,不能依靠地址来保持稳定。 Kubernetes   服务是一种抽象,定义了Pod和   提供稳定的ip

这就是为什么建议使用基本上适合这种情况的headless service的原因。正如他们在docs

的第一行中提到的
  

有时您不需要或不需要负载平衡和一项服务   IP。在这种情况下,您可以通过指定以下内容来创建“无头”服务   群集IP(.spec.clusterIP)的“无”

无头服务无法获取ClusterIP。如果您对无头服务程序执行nslookup,它将解析处于无头服务状态的Pod的所有IP。 K8将在无头服务下负责添加/管理Pod IP。请了解更多详情。而且我相信,您可以在Cosule中注册/提供此无头服务名称。

  • 请参阅此博客以获取详细的here

UPDATE1:

请参阅此Youtube video。可能会给你一些想法。(即使我必须看它.. !!!)