docker 网络下篇

我们同主机容器实现了通信 那么跨主机怎么实现通信~

macvlan内核模块实现跨主机通信

判断Linux内核是否支持macvlan模块

lsmod | grep macvlan
modprobe macvlan
lsmod | grep macvlan

两个主机节点创建同网段的自定义网络类型

docker network create -d macvlan –subnet 172.29.0.0/16 –gateway 172.29.0.254 -o parent=eth0 custom-macvlan

手动分配IP地址

10.0.0.101节点基于自定义网络启动容器

docker container run –rm -it –name c1 –network custom-macvlan –ip 172.29.0.101 alpine ifconfig

10.0.0.102节点基于自定义网络启动容器
docker container run –rm -it –name c2 –network custom-macvlan –ip 172.29.0.102 alpine ifconfig

两个可以节点之间的容器

ping 172.29.0.102 -c 3

ping baidu.com -c 3 # 无法访问外网

#我们需要手动分配IP地址,无法联网的问题,只需要使用”docker network connect”重新分配一块网卡即可解决

macvlan的优缺点

优点

– docker原生支持,无需安装额外插件,配置起来相对简单。
– 适合小规模docker环境,例如只有1-3台,如果服务器过多,手动分配IP地址可能会无形之间增加工作量;

缺点

– 需要手动分配IP地址,如果让其自动分配IP地址可能会存在多个主机自动分配的IP地址冲突的情况,到时候还需要人工介入维护;
– 本机相同网络(本案例为”custom-macvlan”)的容器之间相互通信没问题,跨主机之间的容器进行通信也没问题,但容器无法与宿主机之间进行通信,也无法连接到外网
–  macvlan需要绑定一块物理网卡,若网卡已经被绑定,则无法创建;

overlay实现容器跨主机网络互联 (主节点10.0.0.101)

搭建一个consul将两个节点容器加入集群 它会更新配置到集群中的所以节点

先在两个主机节点里创建两个consul容器

#部署consul服务,如果你的网卡名称不是ens33,需要修改,比如eth0 相当于网卡绑定

docker run -d –network host –restart always –name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul:1.12.3

查看服务端的端口

ss -ntl | grep 8500

如果想要搭建集群就执行下面3个命令  可选操作

# docker run -d -e CONSUL_BIND_INTERFACE=eth0 consul:1.12.3 –restart always agent -dev -join=10.0.0.101
# docker run -d -e CONSUL_BIND_INTERFACE=eth0 consul:1.12.3 –restart always agent -dev -join=10.0.0.101
# docker exec -t dev-consul consul members

修改配置文件(102子节点)

vim /etc/docker/daemon.json

{

#这个选项指定了一个外部的服务注册中心或配置存储系统的位置
“cluster-store”: “consul://10.0.0.101:8500”,

这个选项用于指定当前节点对外通告自己的地址,即其他成员如何通过网络与这个节点进行通信
“cluster-advertise”: “10.0.0.102:9999”
}

修改配置文件(103子节点)

vim /etc/docker/daemon.json

{
“cluster-store”: “consul://10.0.0.101:8500”,
“cluster-advertise”: “10.0.0.103:9969”
}

访问服务端节点webui地址

http://10.0.0.101:8500/ui/dc1/kv/docker/nodes/

任意客户端节点创建网络,其他客户端会通过consul来实时同步配置哟 如102 创建网络

docker network create -d overlay –subnet 172.30.0.0/16 –gateway 172.30.0.254 custom-overlay

#其他节点将同步创建自定义网络

节点间通信测试

#节点1

docker container run –rm -it –name cc1 –network custom-overlay alpine

#节点2

docker container run –rm -it –name cc2 –network custom-overlay alpine

#节点3

docker container run –rm -it –name cc3 –network custom-overlay alpine

#进入任意容器 ping 发现 节点间都可互相通信

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇