使用Docker Swarm模式路由網格

hahadelphi發表於2021-09-09

版本說明資訊

  • 文件來源:

  • 文件由garyond翻譯和整理

目錄

  1. 概述

  2. 釋出服務埠

  3. 僅釋出TCP埠或僅釋出UDP埠

  4. 配置外部負載均衡

1. 概述

Docker引擎Swarm叢集模式使得可以輕鬆地釋出服務埠,使其可用於叢集外的資源。所有節點都參與進入路由網。路由網格使得Swam叢集中的每個節點能夠接受在Swarm叢集中執行的任何服務中已釋出埠上的連線,即使節點上沒有任何任務正在執行。 路由網路將所有接入請求路由到可用節點上的已釋出埠到活動容器中。

為了在Swarm叢集中使用接入網路,在啟用Swarm叢集模式之前, 你需要在Swarm叢集節點之間開啟以下埠:

  • 7946埠, 主要用於容器網路發現;

  • 4789埠, 主要用於容器接入釋出網路。

你還需要在Swarm叢集節點和任意外部資源之間開啟發布埠,例如外部負載均衡應用,以便於它們能夠訪問所需要的埠。

2. 釋出服務埠

當你建立一個服務時, 你可以使用--publish引數來發布埠。

# docker service create 
  --name <Service-Name> 
  --publish <Publish-Port>:<Target-Port> 
  <Docker Image>

<目標埠>為Docker容器中所監聽的埠,<釋出埠>為Swarm叢集中使得服務可以訪問的埠。

例如, 在Swarm叢集中釋出Nginx應用服務, 將容器中的80埠對映為Swarm叢集的8080埠。

$ docker service create 
  --name my-web 
  --publish 8080:80 
  --replicas 2 
  nginx

當你在任何節點上訪問8080埠時,Swarm叢集的負載均衡會將您的請求路由至活動容器中。

Swarm叢集的路由網路在釋出的埠上監聽分配給該節點的任何IP地址。對於外部可路由的IP地址,埠可從主機外部獲得。對於其他的IP地址,只能從主機中訪問。

圖片描述

Ingress Network

使用以下命令可以為已經發布的服務釋出埠:

$ docker service update 
  --publish-add <PUBLISHED-PORT>:<TARGET-PORT> 
  <SERVICE>

使用docker service inspect檢視服務埠。

# docker service inspect --format="" nginx-service

3. 僅釋出TCP埠或僅釋出UDP埠

預設情況下, 所釋出的埠一般為TCP埠。你可以專門指定釋出UDP埠,而不是TCP或之外的埠。當釋出TCP和UDP埠時,Docker 1.12.2版本和早前版本需要為TCP埠指定字尾/tcp。字尾為可選的引數。

僅釋出TCP埠

# docker service create --name dns-cache -p 53:53 dns-cache或# docker service create --name dns-cache -p 53:53/tcp dns-cache

釋出TCP和UDP埠

# docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache

僅釋出UDP埠

# docker service create --name dns-cahce -p 53:53/udp dns-cache

4. 配置外部負載均衡

可透過配置外部負載均衡實現Swarm叢集的服務路由。例如, 使用HAProxy實現已釋出埠8080的Nginx服務的負載均衡。

圖片描述

Load Balance

在這種情況下, 必須在Swarm叢集節點和HAProxy之間開啟8080埠,Swarm叢集節點可以駐留在代理伺服器可以訪問的專用網路上,但不能公開訪問。

我們可以將負載均衡配置為Swarm叢集中的每個節點之間的請求平衡,即使該 節點上沒有計劃任務。例如, 我們可以在/etc/haproxy/haproxy.cfg中配置HAProxy的負載均衡。

global        log /dev/log    local0        log /dev/log    local1 notice
...snip...# Configure HAProxy to listen on port 80frontend http_front   bind *:80
   stats uri /haproxy?stats
   default_backend http_back# Configure HAProxy to route requests to swarm nodes on port 8080backend http_back
   balance roundrobin
   server node1 192.168.99.100:8080 check
   server node2 192.168.99.101:8080 check
   server node3 192.168.99.102:8080 check

當您在埠80上訪問HAProxy負載均衡服務時,它會將請求轉發到Swarm叢集中的節點。Swarm叢集路由網路將請求路由到活動任務中。如果由於任何原因swarm排程程式將任務分派給不同的節點,則不需要重新配置負載均衡。



作者:garyond
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2471/viewspace-2821345/,如需轉載,請註明出處,否則將追究法律責任。

相關文章