负载均衡在Docker Swarm中如何工作?与Kubernetes有何不同?

时间:2018-12-17 18:58:23

标签: docker kubernetes docker-swarm

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

  • 准备了2台机器
  • 为其设置领导者和工人
  • 使用堆栈命令部署2个简单的Web应用程序实例

当我向两台计算机发送HTTP请求时,都会得到正确的答复。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

swarm

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

Kubernetes非常相似,但不完全相同。 Services通过LoadBalancerNodePort在外部暴露。但是,您无法从外部直接访问Pod IP地址,因为这些地址在外部看不到,这与上面的Docker swarm示例中的192.168.99.100:80相反。另外,Kubernetes中的流量不会通过主服务器(除非您正在调用kube-apiserver),而是直接到节点。