Docker的跨主机通信


跨主机通信的类型应用

1 静态路由: 静态路由是一种手动配置的网络路由方式,管理员明确指定数据包从一个网络跳转到另一个网络的路径。它通常用于小型或相对固定的网络,路由器不需要通过动态路由协议交换信息。虽然静态路由较为简单且易于管理,但当网络拓扑发生变化时,路由需要手动更新,这可能导致维护成本上升。

2 Flannel: Flannel 是一种专为 Kubernetes 提供网络解决方案的工具。它是一个简单的 Overlay 网络实现,用于让 Kubernetes 集群中的各个 Pod 之间实现跨主机通信。Flannel 使用 VXLAN 等机制为每个主机分配子网,并为跨主机通信提供虚拟化的 L3 网络。它是 Kubernetes 最早期的容器网络接口(CNI)之一。

3 Overlay: Overlay 网络是一种将虚拟网络架构层叠在物理网络之上的网络技术。它通过使用隧道(如 VXLAN、GRE 等)将分布在不同物理网络中的主机或容器连接起来,形成一个逻辑上的同一网络。Overlay 网络广泛应用于容器编排系统(如 Kubernetes、Docker),用于解决跨主机容器的通信问题。

4 Macvlan: Macvlan 是 Linux 网络虚拟化的一种技术,允许多个虚拟网络接口在同一物理网络接口上运行。每个 Macvlan 接口都有一个独立的 MAC 地址,从而使每个容器或虚拟机看起来像是一个独立的网络设备。相比 Overlay 网络,Macvlan 性能更高,因为它直接在二层网络上工作,无需额外的封装。

5 Calico: Calico 是一种基于路由的高性能、可扩展的网络和网络安全解决方案,广泛应用于 Kubernetes 和其他容器编排系统。它不使用 Overlay 网络,而是通过 BGP(边界网关协议)直接在 L3 路由层上提供 Pod 之间的网络通信。Calico 还提供丰富的网络安全策略功能,允许管理员精细控制流量规则,并且支持网络隔离和多租户管理。

静态路由的配置

1. 添加一条到达网络192.168.1.0/24的路由,网关为192.168.0.1,距离值为10:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.1 metric 10

2. 添加一条到达主机192.168.1.100的路由,网关为192.168.0.1:
route add -host 192.168.1.100 gw 192.168.0.1

3. 添加一条到达网络192.168.0.0/16的路由,网关为192.168.1.1,距离值为20,经过eth0接口:
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 metric 20 dev eth0

image-20240910174708832

flanne网络模型(实战)

###### 需要 etcd 数据库存储配置
所有需要通信的容器所在的宿主机都需要安装 flanne

image-20240910174845207

实战安装配置flanne

image-20240910175051433

##### 安装配置etcd数据库
1.# 安装
yum install etcd -y

2.# 修改配置文件
[root@harbor ~]# vim /etc/etcd/etcd.conf
# [member]
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://172.16.1.105:2379,http://127.0.0.1:2379"
# [cluster]
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.1.105:2379"

3.#启动etcd并加入开机自启
[root@harbor ~]# systemctl start etcd
[root@harbor ~]# systemctl enable etcd

4.#写入数据
[root@harbor ~]# etcdctl mk /atomic.io/network/config '{"Network":"192.168.0.0/16"}'
{"Network":"192.168.0.0/16"}
#或者
[root@harbor ~]# etcdctl -C http://127.0.0.1:2379 set /atomic.io/network/config '{"Network":"192.168.0.0/16"}'
### etcd基础操作
# 1.检查健康状态
[root@harbor ~]# etcdctl -C http://127.0.0.1:2379 cluster-health
# 2.写入数据
[root@harbor ~]# etcdctl -C http://127.0.0.1:2379 set /testdir/testkey "helloworld"
# 3.查询数据
[root@harbor ~]# etcdctl -C http://127.0.0.1:2379 get /testdir/testkey
hello world
# 1.安装flannel
[root@docker01 ~]# yum install -y flannel

# 2.修改flannel配置
[root@docker01 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://172.16.1.105:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"

# 3.创建flannel数据再etcd中
[root@harbor ~]# etcdctl mk /atomic.io/network/config
'{"Network":"192.168.0.0/16"}'
{"Network":"192.168.0.0/16"}
[root@harbor ~]# etcdctl -C http://127.0.0.1:2379 set /atomic.io/network/config
'{"Network":"192.168.0.0/16"}'

# 4.启动flannel
[root@docker01 ~]# systemctl start flanneld
[root@docker01 ~]# systemctl enable flanneld

# 5.查看flannel0网卡信息
[root@docker01 ~]# ifconfig
flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 192.168.57.0 netmask 255.255.0.0 destination 192.168.57.0
inet6 fe80::c3ea:2880:8b8e:46e0 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500
(UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 144 (144.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0