1 Docker网络
1.1 bridge模式(默认)
所有容器连接到桥,通过使用NAT让容器可以访问外网(和VMware的NAT网络类似)
查看桥
查看主机在docker0网段的地址(docker的默认网段都是172.17.0.0/16)
个人理解docker的整个网络结构 主机:172.17.0.1 容器:172.17.0.2 容器......:172.17.0.x
1.2 host
所有容器都与docker主机在同一个网络,共用同主机的IP地址,非常方便访问外界网络,也会导致争抢端口的问题。
1.3 none
容器仅与lo网卡,不能和外部界连接,在高级应用中。(k8s会有另外的技术工具来连接,所以反而需要简单的模式即可)
1.4 容器网络或联盟网络
容器间共享同一个网络命名空间,实现容器间数据传输
2 跨主机通信
2.1 跨主机容器间通信的工具
Pipework
Flannel(k8s早期使用)
Weave
Open V Switch OVS
Calico (适合k8s复杂的功能)
2.2 Flannel工作原理
- 是Overlay网络,覆盖型网络(类似于VPN的构建网络之间的隧道)
- 通过etcd保存子网信息及网络分配信息(一个分布式键值存储系统)
- 给每台Docker Host分配置一个网段
- 通过UDP传输数据包(类似隧道信息流)
2.3 配置flannel
步骤1 克隆两台安装有docker的VMware的CentOS7主机
两台主机之间项目ping通
步骤2 主机配置名称和本地DNS
主机192.168.255.132
hostnamectl set-hostname node1
主机192.168.255.131
hostnamectl set-hostname node2
两台主机都设置如下
vim /etc/hosts
添加如下
192.168.255.132 node1
192.168.255.132 etcd
192.168.255.131 node2
两台主机都关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
步骤3 安装etcd和flannel
node1
yum -y install etcd flannel
node2
yum -y install flannel
步骤4 配置etcd和flannel
node1 etcd配置与验证
vim /etc/hosts
systemctl enable etcd
systemctl start etcd
检查进程
ss -anput | grep ":2379"
修改配置如下
通过命令对etcd数据库进行set get操作
etcdctl set testdir/testkey0 1000
etcdctl get testdir/testkey0
flannel配置(node1主机和node2主机都要操作)
vim /etc/sysconfig/flanneld
启动flannel
systemctl enable flanneld
systemctl start flanneld
配置如下
步骤5 配置flannel与docker结合
nod1和node2都操作
1 查询subnet信息(子网信息)
cat /run/flannel/subnet.env
2 修改docker daemon配置文件
cat /etc/docker/daemon.json
{
"insecure-registries": ["http://192.168.122.33"],
"bip": "172.20.13.1/24",
"mtu": 1472
}
3 重启docker
{
"insecure-registries": ["http://192.168.122.33"],
"bip": "172.20.13.1/24",
"mtu": 1472
}
结果:最后进入容器后即可ping通另外主机的容器
最后 如发现各容器内分配的ip之间相互ping不通,可能由于防火墙问题引起的,执行下面操作即可: