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 <---> ...
随机推荐
- Tortoise svn 基础知识
1 不跟踪文件.文件夹 1.1 文件.文件夹已经被svn跟踪 将本地文件.文件夹删除(windows删除文件的删除,快捷键是shift+delete),然后执行svn update 将服务器同步到 ...
- 5.List链表类型介绍和操作
数据类型List链表 (1)介绍 list类型其实就是一个双向链表.通过push,pop操作从链表的头部或者尾部添加删除元素.这使得list既可以用作栈,也可以用作队列. 该list链表类型应用场景: ...
- hashMap探析
本篇文章包括: 数据结构 各个参数 为什么数组的长度是2的整数次方 为什么要将装载因子定义为0.75 为什么链表转红黑树的阈值为8 hash碰撞 put方法 resize方法 jdk7中数组扩容产生环 ...
- 跟着阿里学JavaDay02——Java编程起步
几乎所有语言的第一个程序都是"HelloWorld" 就像所有单片机初学者一样,点亮第一个LED灯开始 而起初我们编写/学习Java程序,都是通过记事本来编写的,这里推荐一个Edi ...
- tmux简单使用
tmux简单使用 Tmux ("Terminal Multiplexer"的简称), 是一款优秀的终端复用软件,类似 GNU screen,但比screen更出色.tmux来自于O ...
- SpringBoot获取配置文件,就这么简单。
在讲SpringBoot 获取配置文件之前我们需要对SpringBoot 的项目有一个整体的了解,如何创建SpringBoot 项目,项目结构等等知识点,我在这里就不一一讲述了,没有学过的小伙伴可以自 ...
- pix三接口配置
拓扑 R1 R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#int f0/0 R1( ...
- Jupyternotebook添加c++核心支持的配置过程
一.环境:虚拟机:(1)系统:centos7.5_1804(64bit)版本(2)软件环境:git.python3.5.3.Jupyter4.4.0二.下载安装脚本:资源及安装说明:https://g ...
- 使用PRTG和panabit结合定位网络阻塞的来源
一.背景 在网络管理工作中,有时会出现网络阻塞,需要定位阻塞来源以采取措施解决问题.二.以一个网络阻塞案例说明定位方法 案例:某企业日常使用多条网络线路,某一段时间发现某条线路传输速率下降,对 ...
- [精华帖]Java接口怎么定义?如何使用?【实例讲解】
[精华帖?]滑稽之谈||| 题目: 模拟电脑USB功能设备使用 1.定义USB接口,具备最基本的开启功能和关闭功能 2.定义电脑类,具有开机.关机以及使用usb设备功能 3.鼠标类.具有usb功能,并 ...