1

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

而我的服务(即asp.net core webapi)也部署到了kubernetes集群,有3个副本。我没有创建 kubernete 服务对象,因为这些 pod 只会被同一集群中的 ocelot 消耗。

架构如下所示:

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

此外,IMO,consul 可以在 pod 死亡时取消注册 pod(webapi)。所以我认为不需要创建 kubernete 服务对象

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

4

1 回答 1

2
  • Headless Service是答案

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

当 pod 死机时取消注册服务

是的

Kubernetes Pod 是致命的。他们出生,当他们死去时,他们并没有复活。虽然每个 Pod 都有自己的 IP 地址,但即使是这些 IP 地址也不能随着时间的推移而保持稳定。Kubernetes Service 是一种抽象,它定义了一组逻辑 Pod 并提供稳定的 ip

这就是为什么建议使用headless service基本上适合这种情况的原因。正如他们在文档的第一行中提到的

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

无头服务没有得到ClusterIP. 如果您nslookup在无头服务上执行此操作,它将解析处于无头服务下的 pod 的所有 IP。K8s 将负责在 headless 服务下添加/管理 pod IP。请了解更多详情。而且我相信,您可以在 Cosule 中注册/提供这个无头服务名称。

更新1:

请参考这个Youtube 视频。可能会给你一些想法。(即使我必须看它..!!)

于 2018-10-12T08:18:09.863 回答