Day10-网络通信-flannel
entos7.9环境初始化
环境:
centos7.9
通知:CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。建议您切换到Anolis或Alinux。如果您的业务过渡期仍需要使用CentOS 8系统中的一些安装包,请根据下文切换CentOS 8的源。
所以我们这块要切换一下源
# 切换为华为云的源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
yum clean all
yum makecache
# 安装docker依赖包 --后期备注 : 这个下载不了 很多都没有软件包
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-18.03.1.ce-1.e17.centos
# 最后采用二进制安装 20.10.10版本
压缩包和对应文件自备
tar -zxvf
mv docker/* /usr/bin
mv docker.service /usr/lib/systemd/system/
mv daemon.json /etc/docker/
systemctl enable docker
systemctl start docker
安装对应的包和依赖
yum install -y conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
yum -y install wget jq psmisc vim net-tools nfs-utils socat telnet device-mapper-persistent-data lvm2 git network-scripts tar curl -y
yum -y install lrzsz git subversion gpm unzip zip curl wget net-tools vim gcc
yum -y install wget jq psmisc vim net-tools nfs-utils telnet yum-tuils device-mapper-persistent-data lvm2 git tar curl -y
yum -y install conntrack socat ipset ipvsadm ebtables
关闭防火墙\selinux
vim /etc/selinux/config
service firewalld stop
systemctl disable firewalld.service
vim /etc/hosts
192.168.0.51 centos7-jichao-051
192.168.0.52 centos7-jichao-052
vim /etc/sysconfig/network-scripts/ifcfg-ens32
克隆机器 更改ip地址和Hostname
flannel
机器51,52 53 centos7.9 其他的需要去编译 时间较长
cat /etc/hosts
组件:
51 部署etcd,flannel,docker hostname:centos7-jichao-051 主控端 通过etcd
52 部署flannel,docker hostname:centos7-jichao-052
53 部署flannel,docker hostname:centos7-jichao-053
flannel 能够让不通的容器上的docker 容器都拥有唯一的Ip地址,不像之前的docker0分配虚拟地址,这样不同的容器可能会出现同样的ip地址
underlay 物理网络
overlay 虚拟网络
flannel 是一种overlay 网络,表示运行在一个网上的网(应用层网络)并不依靠ip地址传递信息,而是采用映射机制,把ip地址和identifiers做映射来资源定位,即把tcp数据包装在另一种网络包里进行理由转发和通信
flannel使用etcd存储配置数据和子网分配信息
flannel启动之后,后台进程首先检索配置和正在使用的子网列表,选择一个可用的子网,去注册它,etcd也存储每个主机对应的Ip
flannel使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息
并且根据它来维护一个路由表,为提高性能,flannel优化了universal TAP/TUN设备
这属于二层网络,基于下一跳-网关
三层网络宣告
打开中继路由
打开中继路由
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
防火墙
# 防火墙规则
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
机器51部署etcd
机器51部署etcd
yum -y install etcd
vim /etc/etcd/etcd.conf
客户端网络要注入到flannel 地址里面去 下面是访问地址 把路由放到etcd里面去
上面是监听
service etcd start
chkconfig etcd on
ps -ef | grep etcd
这个是单机的etcd
查看端口是否正常
etcdctl -C http://192.168.0.51:4001 cluster-health
etcdctl -C http://192.168.0.51:2379 cluster-health
查看etcd 成员
etcdctl member list
所有机器部署flannel
yum -y install flannel
cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak
vim /etc/sysconfig/flanneld
定义网络
# 注意!!!!!!!!!!!!!!!!!!!!!!!!!!
这里我们出错了 我们这个网段不能和宿主机网段相同 不然会出现flanneld无法启动的情况
我们设置的网段和宿主机是一个网段,所以会报错,flannel无法启动
etcdctl mk /atomic.io/network/config '{"Network:"192.123.0.0/16","SubnetMin": "192.123.1.0","SubnetMax": "192.123.254.0"}'
更改为
etcdctl mk /atomic.io/network/config '{"Network:"172.27.0.0/16","SubnetMin": "172.27.1.0","SubnetMax": "172.27.254.0"}'
启动flanneld
service flanneld start
chkconfig flanneld on
# 注意,docker 也要进行重启
systemctl restart docker
ifconfig
cat /run/flannel/subnet.env
cat /run/flannel/docker
vim /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker.service
机器52、53
systemctl start flanneld
systemctl enable flanneld
ps -ef |grep flannel
52
vim /usr/lib/systemd/system/docker.service
53
vim /usr/lib/systemd/system/docker.service
# 完成之后都进行重启
systemctl daemon-reload
systemctl restart docker
测试是否通信成功?
51 by1
52 by2
53 by3
通信成功!
如果有一台新的机器,要加入 如何操作?
1、 打开中继路由
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
2、# 防火墙规则
iptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -Fiptables -L -n
3、 yum -y install flannel
4、 更改配置文件
vim /etc/sysconfig/flanneld 改为etcd地址
5、启动flannel systemctl start flanneld
systemctl enable flanneld
6、cat /run/flannel/subnet.env
cat /run/flannel/docker
7、vim /usr/lib/systemd/system/docker.service
把启动后加入 /run/flannel/docker 后面的bip
8、重启docker
9、ifconfig
补充
对等网,物理网-underlay network
flannel overlay network 虚拟网络
思考: k8s - 三个网络 :1、物理网络 2、svc网络 3、pod网络
那这三个网络我全弄成物理网络那个Ip 可以嘛? 就不用走那么多规则,是不是更加高效呢?两个集群之间的Pod不就直接可以相互通信了嘛?
答案是:可以
那安全怎么解决? -> 安全加固,低运行时 runc! kata + gvisor + 扫描器
资源限制-> 限制cpu 限制内存
可以一个集群有状态服务 , 一个集群无状态服务