macvlan

在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动启用,Docker macvlan 只支持 bridge 模式

macvlan 需要一块独立的网卡来进行使用,所以我们需要新添加一块网卡

1
docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1  -o parent=ens224  mtacvlan-1

-o parent=网卡名称 指定用来给 macvlan 网络使用的物理网卡

注意,要在所有需要运行 macvlan 的主机上执行这条命令,但是要记得更改网关的地址,避免造成IP冲突

1
docker run -itd --network macvlan-1 centos /bin/bash

overlay

在 Docker 中,overlay 是众多 Docker 网络模型中的一种,并且是一种跨主机的全局网络模型,有一个数据库专门的来存储网络分配信息,避免 IP 冲突,同时内部还有一个小型的 DNS 我们可以直接通过主机名进行访问

consul 服务端:

1
docker run -itd -h consul --name consul --restart=always -p 8500:8500 progrium/consul -server -bootstrap

-h 主机名
–name 容器名
–restart=always 重启策略
progrium/consul 镜像名称
-server 以服务节点启动
-bootstrap 预期的启动节点数:自举

在浏览器内输入 IP地址+端口号 可以看到 web 页面

在所有主机上编辑 daemon.json 文件:
{
“hosts”: [“tcp://0.0.0.0:2375”,”unix:///var/run/docker.sock”], 监听相关端口
“cluster-store”:”consul://192.168.1.150:8500”, 集群的主机地址
“cluster-advertise”:”192.168.1.150:2375” 宣告自己的地址
}

重启 docker 服务

创建 overlay 网络(全局网络):一台主机上创建自动同步

1
docker network create -d overlay overlay-1

启动容器测试:

1
2
docker run -it --name docker-1 --network=overlay-1 centos /bin/bash
docker run -it --name docker-2 --network=overlay-1 centos /bin/bash

验证:

1
ping docker-1

常见故障

如发现各容器内分配的ip之间相互ping不通

原因:可能由于防火墙问题引起的,默认forward链是drop状态,需要打开才可以

解决方案:
执行下面操作,保证INPUT FORWARD链都是ACCEPT状态
清除其他规则

1
2
3
4
5
6
7
8
9
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n