3.kubernetes的CNI网络插件-Flannel
目录
1.1.K8S的CNI网络插件-Flannel
集群规划
| 主机名 | 角色 | ip |
| HDSS7-21.host.com | flannel | 10.4.7.21 |
| HDSS7-22.host.com | flannel | 10.4.7.22 |
下载软件、解压、软链接
官网下载地址:https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
HDSS7-21.host.com上:
[root@hdss7- ~]# cd /opt/src/
[root@hdss7- ~]# wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
[root@hdss7- ~]# mkdir /opt/flannel-v0.11.0
[root@hdss7- ~]# tar zxvf flannel-v0.11.0-linux-amd64.tar.gz -C /opt/flannel-v0.11.0/
[root@hdss7- ~]# ln -s /opt/flannel-v0.11.0 /opt/flannel
[root@hdss7- ~]# ll /opt/|grep flannel
lrwxrwxrwx root root Jun : flannel -> flannel-v0.11.0/
drwxr-xr-x root root Jun : flannel-v0.11.0
最终目录结构
[root@hdss7- opt]# tree -L
.
├── containerd
│ ├── bin
│ └── lib
├── etcd -> etcd-v3.1.20
├── etcd-v3.1.20
│ ├── certs
│ ├── Documentation
│ ├── etcd
│ ├── etcdctl
│ ├── etcd-server-startup.sh
│ ├── README-etcdctl.md
│ ├── README.md
│ └── READMEv2-etcdctl.md
├── flannel -> flannel-v0.11.0/
├── flannel-v0.11.0
│ ├── certs
│ ├── flanneld
│ ├── mk-docker-opts.sh
│ └── README.md
├── kubernetes -> kubernetes-v1.15.2/
├── kubernetes-v1.15.2
│ ├── addons
│ ├── LICENSES
│ └── server
└── src
├── etcd-v3.1.20-linux-amd64.tar.gz
├── flannel-v0.11.0-linux-amd64.tar.gz
└── kubernetes-server-linux-amd64-v1.15.2.tar.gz
拷贝证书
各运算节点上:
/opt/flannel/certs
[root@hdss7- certs]# scp hdss7-:/opt/certs/ca.pem .
[root@hdss7- certs]# scp hdss7-:/opt/certs/client.pem .
[root@hdss7- certs]# scp hdss7-:/opt/certs/client-key.pem .
注:其他运算节点也需要ca.pem client.pem client-key.pem
创建配置
[root@hdss7- flannel]# vi subnet.env
FLANNEL_NETWORK=172.7.0.0/
FLANNEL_SUBNET=172.7.21.1/24
FLANNEL_MTU=
FLANNEL_IPMASQ=false
注:其他运算节点需将FLANNEL_SUBNET改成对应的网段,比如:10.4.7.22配置FLANNEL_SUBNET=172.7.22.1/24
创建启动脚本
[root@hdss7- flannel]# vim flanneld.sh
#!/bin/sh
./flanneld \
--public-ip=10.4.7.21 \
--etcd-endpoints=https://10.4.7.12:2379,https://10.4.7.21:2379,https://10.4.7.22:2379 \
--etcd-keyfile=./certs/client-key.pem \
--etcd-certfile=./certs/client.pem \
--etcd-cafile=./certs/ca.pem \
--iface=eth0 \
--subnet-file=./subnet.env \
--healthz-port=
注:flannel集群各主机的启动脚本略有不同,部署其他节点注意修改,比如10.4.7.22 --public-ip=10.4.7.22
检查配置、权限、创建日志目录
[root@hdss7- flannel]# chmod +x /opt/flannel/flanneld.sh
[root@hdss7- flannel]# mkdir -p /data/logs/flanneld
操作etcd,增加host-gw(适用于运算节点在同一个二层模型,三选一)
HDSS7-21.host.com上:
[root@hdss7- etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}'
{"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}
[root@hdss7- etcd]# ./etcdctl get /coreos.com/network/config
{"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}
创建supervisor配置
HDSS7-21.host.com上:
[root@hdss7- ~]# vi /etc/supervisord.d/flannel.ini
[program:flanneld-7-21]
command=/opt/flannel/flanneld.sh ; the program (relative uses PATH, can take args)
numprocs= ; number of processes copies to start (def )
directory=/opt/flannel ; directory to cwd to before exec (def no cwd)
autostart=true ; start at supervisord start (default: true)
autorestart=true ; retstart at unexpected quit (default: true)
startsecs= ; number of secs prog must stay running (def. )
startretries= ; max # of serial start failures (default )
exitcodes=, ; 'expected' exit codes for process (default ,)
stopsignal=QUIT ; signal used to kill process (default TERM)
stopwaitsecs= ; max num secs to wait b4 SIGKILL (default )
user=root ; setuid to this UNIX account to run the program
redirect_stderr=true ; redirect proc stderr to stdout (default false)
stdout_logfile=/data/logs/flanneld/flanneld.stdout.log ; stderr log path, NONE for none; default AUTO
stdout_logfile_maxbytes=64MB ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups= ; # of stdout logfile backups (default )
stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default )
stdout_events_enabled=false ; emit events on stdout writes (default false)
注:hdss7-22.host.com需要修改成[program:flanneld-7-22]
启动服务并检查
[root@hdss7- flannel]# supervisorctl update
[root@hdss7- flannel]# supervisorctl status
再次验证集群,pod之间网络互通
[root@hdss7- ~]# ping 172.7.22.2
PING 172.7.22.2 (172.7.22.2) () bytes of data.
bytes from 172.7.22.2: icmp_seq= ttl= time=8.50 ms
bytes from 172.7.22.2: icmp_seq= ttl= time=2.58 ms
bytes from 172.7.22.2: icmp_seq= ttl= time=4.40 ms
bytes from 172.7.22.2: icmp_seq= ttl= time=0.353 ms
bytes from 172.7.22.2: icmp_seq= ttl= time=0.420 ms
flannel vxlan模型(适用于运算节点不在同一个二层,三选一)
.停掉flanneld服务
[root@hdss7- ~]# supervisor stop flanneld--
[root@hdss7- ~]# supervisor stop flanneld--
.删除host-gw模型创建的路由
[root@hdss7- ~]# route del -net 172.7.21.0/ gw 10.4.7.21
[root@hdss7- ~]# route del -net 172.7.22.0/ gw 10.4.7.22
.修改etcd
[root@hdss7- ~]# cd /opt/etcd
[root@hdss7- etcd]# ./etcdctl get /coreos.com/network/config
[root@hdss7- etcd]# ./etcdctl rm /coreos.com/network/config
[root@hdss7- etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN"}}'
[root@hdss7- etcd]# supervisor start flanneld--
[root@hdss7- ~]# supervisor start flanneld--
flannel 直接路由模型(自动识别是否在同一个二层模型,如果是同一个二层模型走host-gw,如果在同一个二层模型走vxlan模型,三选一)
.停掉flanneld服务
[root@hdss7- ~]# supervisor stop flanneld--
[root@hdss7- ~]# supervisor stop flanneld--
.修改etcd
[root@hdss7- ~]# cd /opt/etcd
[root@hdss7- etcd]# ./etcdctl get /coreos.com/network/config
[root@hdss7- etcd]# ./etcdctl rm /coreos.com/network/config
[root@hdss7- etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN","Directrouting": true}}'
[root@hdss7- etcd]# supervisor start flanneld--
[root@hdss7- ~]# supervisor start flanneld--
在各运算节点上优化iptables规则
- 优化SNAT规则,各运算节点之间的各POD之间的网络通信不再出网
[root@hdss7- ~]# iptables -t nat -D POSTROUTING -s 172.7.21.0/ ! -o docker0 -j MASQUERADE
[root@hdss7- ~]# iptables -t nat -I POSTROUTING -s 172.7.21.0/ ! -d 172.7.0.0/ ! -o docker0 -j MASQUERADE
10.4.7.21主机上的,来源是172.7.21.0/24段的docker的ip,目标ip不是172.7.0.0/16段,网络发包不从docker0桥设备出站的,才进行SNAT转换
各运算节点保存iptables规则
[root@hdss7- ~]# iptables-save > /etc/sysconfig/iptables
、
返回顶部
3.kubernetes的CNI网络插件-Flannel的更多相关文章
- 第十章 Kubernetes的CNI网络插件--flannel
1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...
- Kubernetes CNI网络插件
CNI 容器网络接口,就是在网络解决方案由网络插件提供,这些插件配置容器网络则通过CNI定义的接口来完成,也就是CNI定义的是容器运行环境与网络插件之间的接口规范.这个接口只关心容器的网络连接,在创建 ...
- kubernetes进阶(二)核心网络插件Flannel
网络插件Flannel介绍:https://www.kubernetes.org.cn/3682.html 首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置, ...
- 安装cni网络插件-非必须
安装cni网络插件 安装cni # 安装 cni # 百度云链接:https://pan.baidu.com/s/1-PputObLs5jouXLnuBCI6Q 密码:tzqm cd /server/ ...
- kubernetes 配置网络插件 flannel
概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...
- Kubernetes 学习18配置网络插件flannel
一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...
- Kubernetes网络插件Flannel的三种工作模式
跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw 一.UDP模式(性能差) 核心就是通过TUN设备flannel0实现(TUN设备是工作在 ...
- k8s之网络插件flannel及基于Calico的网络策略
1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...
- k8s系列---网络插件flannel
跨节点通讯,需要通过NAT,即需要做源地址转换. k8s网络通信: 1) 容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现: 2) pod之间的通信,pod ip <---> ...
随机推荐
- UIAutomator2安装及连接
记录一下自己的偿试过程,内容来自:https://github.com/openatx/uiautomator2 d.service("uiautomator").stop()是因 ...
- Kivy主窗体大小的控制
1. 引入依赖模块 主窗体大小的控制,需要使用到kivy.core.window中的Window模块 from kivy.app import App from kivy.core.window im ...
- mysql页面查询
<?php $link = mysql_connect('127.0.0.1', 'root', 'root'); if (!$link) { die('Could not connect: ' ...
- [256个管理学理论]001.蝴蝶效应(Butterfly Effect)
蝴蝶效应(Butterfly Effect) 来自于大洋彼岸的让你看不懂的解释: 蝴蝶效应是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨大的连锁反应,是一种混沌的现象.“蝴蝶效应” ...
- [Objective-C] 016_UI篇_UIView(上)
在我们使用app时屏幕上能看到的UI元素(按钮,列表,图片...),我们称之为视图,都是继承与UIView,它们通常有着位置,大小,背景颜色等属性,在appl中视图和窗口展示了应用的用户界面,同时负责 ...
- Python每日一练(1)
这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...
- 2020年,为什么我们应该使用abapGit代替SAPLink
SAPLink是一个帮助人们分享开发内容的工具.通过它,人们可以将ABAP开发对象从一个系统打包下载.再上传到另一个系统中.对于各种类型的开发者,它都可以起到作用: 有的开发者喜欢在不同的项目中复制相 ...
- php砍价算法、随机红包金额算法
/** * 砍价算法-生成砍价金额 * * @param int $people 砍价人数或次数 * @param int $amount 砍价总额 单位元 * @param int $min 最低砍 ...
- Parrot os安装docker及docker-compose
一.安装docker 1.添加Docker pgp key curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key ...
- Python机器学习笔记:SVM(1)——SVM概述
前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...