Docker Swarm 中的负载均衡是如何工作的,与 Kubernetes 有什么区别?

How does load balancing works in Docker Swarm and whats the difference with Kubernetes?

我正在学习Docker并且做了一个简单的练习:

当我向两台机器发送 HTTP 请求时,我得到了正确的回复。

这对我来说很奇怪。我认为只有 Leader 节点应该处理请求,因为 Swarm 中有一些负载平衡。我想如果某个节点失败,Swarm 应该自动将请求重定向到另一个节点,而 Leader 节点就是它发生的地方。但看起来 Swarm 的工作方式不同。

Swarm 集群背后的想法是什么? Kubernetes 有什么不同吗?

在 Docker swarm 中,领导者负责决定如何安排节点中的容器以及如何设置它们以便将流量转发给它们。但是,流量本身并没有流向领导者,而是流向 Docker swarm ingress/network mesh

您可以通过命令行执行此操作:

$ docker service create \
  --name <SERVICE-NAME> \
  --publish published=8080,target=80 \
  <IMAGE>

然后您的所有节点都将在发布的端口上接收流量并将转发到容器。

在上述情况下,从外部负载均衡器,您可以将流量转发到端口 80(容器公开端口)或端口 8080(已发布)

Kubernetes 非常相似但又不完全相同。 Services are exposed externally through a LoadBalancer or NodePort。但是,您无法从外部直接访问 pod IP 地址,因为在外部看不到这些地址,这与上面 Docker swarm 示例中的 192.168.99.100:80 相反。此外,Kubernetes 中的流量不通过主节点(除非您正在调用 kube-apiserver),而是直接到节点。