我已经在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服务对象,然后将该服务对象注册到领事?
答案 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中注册/提供此无头服务名称。
UPDATE1:
请参阅此Youtube video。可能会给你一些想法。(即使我必须看它.. !!!)