Docker Swarm實現跨宿主機容器間訪問

使用Docker Swarm實現跨宿主機容器間訪問

背景:

在SerA服務器,運行了一個任務調度系統xxl容器ConA。
在SerB服務器,運行了一個SpringBoot服務ConB,註冊到任務調度系統中。

在任務調度系統中,看到的調度器節點IP是SerB服務器分配給ConB容器的IP地址。 導致任務調度系統調度失敗,提示ConB地址鏈接不上。

分析下來,是由於ConA和ConB是跨宿主機的容器,無法通信。

網上看到了很多方案,包括Overlay網絡、OpenvSwitch、consul方案等,最終使用Docker Swarm解決了,發現很簡單,過程如下。

1. 初始化swarm

在主節點運行docker swarm init,初始化swarm。

docker swarm init
# Swarm initialized: current node (0r4xjgtu4nd9txrsbfn1lo5gu) is now a manager.
# 
# To add a worker to this swarm, run the following command:
# 
#     docker swarm join \
#     --token SWMTKN-1-0q35cj5j0va82a0t3mhkbesirqb6lqgqlkmznbwx1ojbou4u75-ejrors77ezcw25nmy9g90u9a0 \
#     172.16.0.226:2377
# 
# To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

2. 創建Overlay網絡

在主節點,創建overlay模式網絡。

docker network create --driver=overlay --gateway 192.168.1.1 --subnet 192.168.1.0/24 --attachable my_network
# m3k69pn88gtre361upi

可以通過docker network ls命令,查看網絡列表。

docker network ls
# NETWORK ID          NAME                DRIVER              SCOPE
# acaeb6e14a1e        bridge              bridge              local
# a8e5fdd055b9        docker_gwbridge     bridge              local
# b50eb414bcb4        host                host                local
# om6lst4j52go        ingress             overlay             swarm
# m3k69pn88gtr        my_network          overlay             swarm
# 0c76adacfcfc        none                null                local

3. 子節點加入集羣

複製上面初始化swarm命令結果中的語句,在子節點運行即可。

docker swarm join \
    --token SWMTKN-1-va82a0t3mhkbesirqb6lqgqlkmznbwxu4u75-ejrors790u9a0 \
     172.16.0.226:2377
# This node joined a swarm as a worker.

可以在主節點,通過docker node ls命令,查看節點列表。

docker node ls
# ID                         HOSTNAME          STATUS  AVAILABILITY  MANAGER STATUS
# 0r4xjgtu4nd9tsbfn1lo5gu *  ecs-01            Ready   Active        Leader
# s67afk1e9nx0174yeqff6g2    ecs.h02           Ready   Active        

4. 運行容器加入網絡

在容器運行命令中,加入--network my_network --ip 192.168.1.123即可。

docker run -it -d --network my_network --ip 192.168.1.123 ubuntu
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章