Day10-网络通信-calico、flannel

1、centos7.9环境初始化

  1. 环境:
  2. centos7.9
  3. 通知:CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。建议您切换到Anolis或Alinux。如果您的业务过渡期仍需要使用CentOS 8系统中的一些安装包,请根据下文切换CentOS 8的源。
  4. 所以我们这块要切换一下源
  • 1.
  • 2.
  • 3.
  • 4.
  1. # 切换为华为云的源
  2. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  3. curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
  4. yum clean all
  5. yum makecache
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Day10-网络通信-calico、flannel_centos

  1. # 安装docker依赖包 --后期备注 : 这个下载不了 很多都没有软件包
  2. yum -y install yum-utils device-mapper-persistent-data lvm2
  3. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. yum list docker-ce --showduplicates | sort -r
  5. yum install -y docker-ce-18.03.1.ce-1.e17.centos
  6. # 最后采用二进制安装 20.10.10版本
  7. 压缩包和对应文件自备
  8. tar -zxvf
  9. mv docker/* /usr/bin
  10. mv docker.service /usr/lib/systemd/system/
  11. mv daemon.json /etc/docker/
  12. systemctl enable docker
  13. systemctl start docker
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  1. 安装对应的包和依赖
  2. yum install -y conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
  3. yum -y install wget jq psmisc vim net-tools nfs-utils socat telnet device-mapper-persistent-data lvm2 git network-scripts tar curl -y
  4. yum -y install lrzsz git subversion gpm unzip zip curl wget net-tools vim gcc
  5. yum -y install wget jq psmisc vim net-tools nfs-utils telnet yum-tuils device-mapper-persistent-data lvm2 git tar curl -y
  6. yum -y install conntrack socat ipset ipvsadm ebtables
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  1. 关闭防火墙\selinux
  2. vim /etc/selinux/config
  3. service firewalld stop
  4. systemctl disable firewalld.service
  • 1.
  • 2.
  • 3.
  • 4.

Day10-网络通信-calico、flannel_flannel_02
Day10-网络通信-calico、flannel_docker_03

  1. vim /etc/hosts
  2. 192.168.0.51 centos7-jichao-051
  3. 192.168.0.52 centos7-jichao-052
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_docker_04

vim /etc/sysconfig/network-scripts/ifcfg-ens32
  • 1.

Day10-网络通信-calico、flannel_centos_05

克隆机器 更改ip地址和Hostname

Day10-网络通信-calico、flannel_calico_06

flannel

  1. 机器51,52 53 centos7.9 其他的需要去编译 时间较长
  2. cat /etc/hosts
  3. 组件:
  4. 51 部署etcd,flannel,docker hostname:centos7-jichao-051 主控端 通过etcd
  5. 52 部署flannel,docker hostname:centos7-jichao-052
  6. 53 部署flannel,docker hostname:centos7-jichao-053
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  1. flannel 能够让不通的容器上的docker 容器都拥有唯一的Ip地址,不像之前的docker0分配虚拟地址,这样不同的容器可能会出现同样的ip地址
  2. underlay 物理网络
  3. overlay 虚拟网络
  4. flannel 是一种overlay 网络,表示运行在一个网上的网(应用层网络)并不依靠ip地址传递信息,而是采用映射机制,把ip地址和identifiers做映射来资源定位,即把tcp数据包装在另一种网络包里进行理由转发和通信
  5. flannel使用etcd存储配置数据和子网分配信息
  6. flannel启动之后,后台进程首先检索配置和正在使用的子网列表,选择一个可用的子网,去注册它,etcd也存储每个主机对应的Ip
  7. flannel使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息
  8. 并且根据它来维护一个路由表,为提高性能,flannel优化了universal TAP/TUN设备
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

Day10-网络通信-calico、flannel_calico_07

  1. 这属于二层网络,基于下一跳-网关
  2. 三层网络宣告
  • 1.
  • 2.
打开中继路由
  1. 打开中继路由
  2. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  • 1.
  • 2.

Day10-网络通信-calico、flannel_calico_08

防火墙
  1. # 防火墙规则
  2. iptables -P INPUT ACCEPT
  3. iptables -P FORWARD ACCEPT
  4. iptables -F
  5. iptables -L -n
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

Day10-网络通信-calico、flannel_vim_09
Day10-网络通信-calico、flannel_docker_10

机器51部署etcd
  1. 机器51部署etcd
  2. yum -y install etcd
  3. vim /etc/etcd/etcd.conf
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_flannel_11
Day10-网络通信-calico、flannel_docker_12

  1. 客户端网络要注入到flannel 地址里面去 下面是访问地址 把路由放到etcd里面去
  2. 上面是监听
  3. service etcd start
  4. chkconfig etcd on
  5. ps -ef | grep etcd
  6. 这个是单机的etcd
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

Day10-网络通信-calico、flannel_docker_13

  1. 查看端口是否正常
  2. etcdctl -C http://192.168.0.51:4001 cluster-health
  3. etcdctl -C http://192.168.0.51:2379 cluster-health
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_flannel_14

  1. 查看etcd 成员
  2. etcdctl member list
  • 1.
  • 2.

Day10-网络通信-calico、flannel_docker_15

所有机器部署flannel
yum -y install flannel
  • 1.

Day10-网络通信-calico、flannel_flannel_16

  1. cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak
  2. vim /etc/sysconfig/flanneld
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_17

定义网络
  1. # 注意!!!!!!!!!!!!!!!!!!!!!!!!!!
  2. 这里我们出错了 我们这个网段不能和宿主机网段相同 不然会出现flanneld无法启动的情况
  3. 我们设置的网段和宿主机是一个网段,所以会报错,flannel无法启动
  4. etcdctl mk /atomic.io/network/config '{"Network:"192.123.0.0/16","SubnetMin": "192.123.1.0","SubnetMax": "192.123.254.0"}'
  5. 更改为
  6. etcdctl mk /atomic.io/network/config '{"Network:"172.27.0.0/16","SubnetMin": "172.27.1.0","SubnetMax": "172.27.254.0"}'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  1. 启动flanneld
  2. service flanneld start
  3. chkconfig flanneld on
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_docker_18
Day10-网络通信-calico、flannel_centos_19

  1. # 注意,docker 也要进行重启
  2. systemctl restart docker
  3. ifconfig
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19

  1. cat /run/flannel/subnet.env
  2. cat /run/flannel/docker
  3. vim /usr/lib/systemd/system/docker.service
  4. systemctl daemon-reload
  5. systemctl restart docker.service
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

Day10-网络通信-calico、flannel_calico_21
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

机器52、53
  1. systemctl start flanneld
  2. systemctl enable flanneld
  3. ps -ef |grep flannel
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

52

Day10-网络通信-calico、flannel_centos_19

vim /usr/lib/systemd/system/docker.service
  • 1.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

53

Day10-网络通信-calico、flannel_centos_19

vim /usr/lib/systemd/system/docker.service
  • 1.
  1. # 完成之后都进行重启
  2. systemctl daemon-reload
  3. systemctl restart docker
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

测试是否通信成功?

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

51   by1
  • 1.

Day10-网络通信-calico、flannel_centos_19

52 by2
  • 1.

Day10-网络通信-calico、flannel_centos_19

53 by3
  • 1.

Day10-网络通信-calico、flannel_centos_19

 通信成功!
  • 1.

Day10-网络通信-calico、flannel_centos_19

如果有一台新的机器,要加入 如何操作?

  1. 1、 打开中继路由
  2. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  3. 2、# 防火墙规则
  4. iptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -Fiptables -L -n
  5. 3、 yum -y install flannel
  6. 4、 更改配置文件
  7. vim /etc/sysconfig/flanneld 改为etcd地址
  8. 5、启动flannel systemctl start flanneld
  9. systemctl enable flanneld
  10. 6、cat /run/flannel/subnet.env
  11. cat /run/flannel/docker
  12. 7、vim /usr/lib/systemd/system/docker.service
  13. 把启动后加入 /run/flannel/docker 后面的bip
  14. 8、重启docker
  15. 9、ifconfig
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

补充

  1. 对等网,物理网-underlay network
  2. flannel overlay network 虚拟网络
  3. 思考: k8s - 三个网络 :1、物理网络 2、svc网络 3、pod网络
  4. 那这三个网络我全弄成物理网络那个Ip 可以嘛? 就不用走那么多规则,是不是更加高效呢?两个集群之间的Pod不就直接可以相互通信了嘛?
  5. 答案是:可以
  6. 那安全怎么解决? -> 安全加固,低运行时 runc! kata + gvisor + 扫描器
  7. 资源限制-> 限制cpu 限制内存
  8. 可以一个集群有状态服务 , 一个集群无状态服务
  9. # 扩展
  10. daocloud https://docs.daocloud.io/network/intro/what/#cilium-macvlansr-iovipvlan-spiderpool-multus
  11. kubesphere https://kubesphere.io/zh/docs/v3.4/release/release-v341/
  12. rancher https://www.rancher.cn/products/
  13. rainbond https://www.rainbond.com/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

calico

  1. calico的原理理解起来,不是那么容易,我们可以先进行搭建,在进行理解
  2. 下图是calico的跨主机通信
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

  1. 系统 centos7.9
  2. # 这边复习下初始化,操作就不列举了
  3. 主机
  4. 51 centos-jichao-101 安装dockder+etcd(集成) + calicoctl
  5. 52 centos-jichao-102 安装dockder+etcd(集成) + calicoctl
  6. 53 centos-jichao-103 安装dockder+etcd(集成) + calicoctl
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
开启中继路由、转发
  1. vim /etc/sysctl.conf
  2. net.ipv4.conf.all.rp_filter=1
  3. net.ipv4.ip_forward=1
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19

防火墙
  1. iptables -P INPUT ACCEPT
  2. iptables -P FORWARD ACCEPT
  3. iptables -F
  4. iptables -L -n
  • 1.
  • 2.
  • 3.
  • 4.

Day10-网络通信-calico、flannel_centos_19

  1. scp /etc/sysctl.conf root@192.168.0.102:/etc/
  2. scp /etc/sysctl.conf root@192.168.0.103:/etc/
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

部署etcd集群
yum -y install etcd
  • 1.

Day10-网络通信-calico、flannel_centos_19

  1. # 备份etcd.conf + 置空etcd.conf
  2. cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak
  3. > /etc/etcd/etcd.conf
  4. cat > /etc/etcd/etcd.conf << EOF
  5. #[Member]
  6. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  7. ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
  8. ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
  9. ETCD_NAME="centos-jichao-101"
  10. #[Clustering]
  11. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.101:2380"
  12. ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.101:2379"
  13. ETCD_INITIAL_CLUSTER="centos-jichao-101=http://192.168.0.101:2380,centos-jichao-102=http://192.168.0.102:2380,centos-jichao-103=http://192.168.0.103:2380"
  14. EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

Day10-网络通信-calico、flannel_centos_19

  1. scp /etc/etcd/etcd.conf root@192.168.0.102:/etc/etcd/etcd.conf
  2. scp /etc/etcd/etcd.conf root@192.168.0.103:/etc/etcd/etcd.conf
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

  1. 102,103 机器
  2. vim /etc/etcd/etcd.conf 改一下主机名 ETCD_NAME="centos-jichao-102\103"
  3. 更改ip地址
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19

  1. 这三台机器就组成了etcd集群
  2. cat /etc/hosts文件是要注意要写的
  • 1.
  • 2.
  1. # 启动etcd
  2. systemctl start etcd
  3. systemctl enable etcd
  4. #三个节点同时启动
  • 1.
  • 2.
  • 3.
  • 4.

Day10-网络通信-calico、flannel_centos_19

  1. 查看成员
  2. etcdctl memebet list
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

  1. ps -ef | grep etcd
  2. netstat -nultp | grep 2379
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

  1. # 查看健康
  2. etcdctl cluster-health
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

集成docker 和 etcd
  1. 在三台机器的docker.service中添加 --cluster-store=etcd://机器ip:2379
  2. vim /usr/lib/systemd/system/docker.service
  3. # 如下图所示,都是一样的更改
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19

  1. systemctl daemon-reload
  2. systemctl restart docker.service
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

# 我们这里重启报错了,所以我们把原来docker除了我们添加的部分删除,即可重启成功
  • 1.

Day10-网络通信-calico、flannel_centos_19

ps -ef | grep docker
  • 1.

Day10-网络通信-calico、flannel_centos_19

下载calicoctl
  1. # 下载calicoctl
  2. https://github.com/projectcalico/calicoctl/releases
  3. 下载3.16的
  • 1.
  • 2.
  • 3.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

  1. chmod +x calicoctl
  2. mv calicoctl /usr/local/bin
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

calicoctl version
  • 1.

Day10-网络通信-calico、flannel_centos_19

docker pull quay.io/calico/node:v2.6.10
  • 1.

Day10-网络通信-calico、flannel_centos_19

启动容器

启动容器

  1. docker run --net=host --privileged --name=calico-node -d --restart=always -e NODENAME=centos-jichao-101 -e CALICO_NETWORKING_BACKEND=bird -e CALICO_LIBNETWORK_ENABLED=true -e IP=192.168.0.101 -e ETCD_ENDPOINTS=http://127.0.0.1:2379 -v /var/log/calico:/var/log/calico -v /var/run/calico:/var/run/calico -v /lib/modules:/lib/modules -v /run:/run -v /run/docker/plugins:/run/docker/plugins -v /var/run/docker.sock:/var/run/docker.sock quay.io/calico/node:v2.6.10
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19

docker exec -it calico-node env
  • 1.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

查看集群状态
  1. # 查看calico集群状态
  2. calicoctl node status
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

添加calico子网
  1. ipPool.yaml
  2. apiVersion: v1
  3. kind: ipPool
  4. metedate:
  5. cidr: 10.244.10.0/24
  6. spec:
  7. ipip:
  8. enabled: true
  9. nat-outgoing: true
  10. disabled: false
  11. # 再把scp给102 103机器
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

  1. calicoctl create -f ipPool.yaml
  2. calicoctl get ipPool -o wide
  • 1.
  • 2.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

创建ip池子网
  1. 在创建的ipPool中创建子网络
  2. docker network create --driver calico --ipam-driver calico-ipam --subnet 10.244.10.0/24 calico-net1
  3. docker network create --driver calico --ipam-driver calico-ipam --subnet 10.244.20.0/24 calico-net2
  4. docker network create --driver calico --ipam-driver calico-ipam --subnet 10.244.30.0/24 calico-net3
  • 1.
  • 2.
  • 3.
  • 4.

Day10-网络通信-calico、flannel_centos_19

  1. --driver calico 网络使用calico驱动
  2. --ipam-driver calico-ipam : 指定calico 的ipam 驱动管理ip
  3. -subnet:指定calico-net1、calico-net2、calico-net3
  4. 这三个网段是global网段,etcd会将它们三个同步到所有的机器
  • 1.
  • 2.
  • 3.
  • 4.
  1. # 开启ipv6转发
  2. echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6
  3. echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
  4. 101
  5. docker run -itd --net calico-net1 --name docker-test1 busybox
  6. docker run -itd --net calico-net2 --name docker-test11 busybox
  7. docker run -itd --net calico-net3 --name docker-test111 busybox
  8. 102
  9. docker run -itd --net calico-net1 --name docker-test2 busybox
  10. docker run -itd --net calico-net2 --name docker-test22 busybox
  11. docker run -itd --net calico-net3 --name docker-test222 busybox
  12. 103
  13. docker run -itd --net calico-net1 --name docker-test3 busybox
  14. docker run -itd --net calico-net2 --name docker-test33 busybox
  15. docker run -itd --net calico-net3 --name docker-test333 busybox
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

Day10-网络通信-calico、flannel_centos_19

查看节点Ip
  1. 101
  2. docker exec -it docker-test1 ifconfig |grep inet
  3. docker exec -it docker-test11 ifconfig |grep inet
  4. docker exec -it docker-test111 ifconfig |grep inet
  5. 102
  6. docker exec -it docker-test2 ifconfig |grep inet
  7. docker exec -it docker-test22 ifconfig |grep inet
  8. docker exec -it docker-test222 ifconfig |grep inet
  9. 103
  10. docker exec -it docker-test3 ifconfig |grep inet
  11. docker exec -it docker-test33 ifconfig |grep inet
  12. docker exec -it docker-test333 ifconfig |grep inet
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

测试联通
  1. docker exec -it docker-test1 ping -c 2 docker-test2.calico-net1
  2. docker exec -it docker-test1 ping -c 2 docker-test3.calico-net1
  3. docker exec -it docker-test11 ping -c 2 docker-test22.calico-net2
  4. docker exec -it docker-test11 ping -c 2 docker-test33.calico-net2
  5. docker exec -it docker-test111 ping -c 2 docker-test222.calico-net3
  6. docker exec -it docker-test111 ping -c 2 docker-test333.calico-net3
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19
Day10-网络通信-calico、flannel_centos_19

 route -n
  • 1.

Day10-网络通信-calico、flannel_centos_19

总结:
  1. 1、同一网段里面容器互相Ping的通(即使不在同一个节点上,只要创建容器时使用的是同一个子网段)
  2. 2、不在同一个子网段的容器是Ping不通的
  3. 3、宿主机能Ping通他自身的所有容器ip,但不能ping通其他节点上的容器Ip
  4. 4、所有节点的容器都能Ping通其他节点的宿主机ip
  5. 即-在calico默认设置下,只允许位于同一网络中的容器之间通信,这样就实现了容器的跨主机互连,也可以更好实现网络隔离效果,位于不通网络下的容器想要通信,就要依赖calico的policy策略来实现了
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.