目录

1.1.K8S的CNI网络插件-Flannel

1.1.1.集群规划

1.1.2.下载软件、解压、软链接

1.1.3.最终目录结构

1.1.4.拷贝证书

1.1.5.创建配置

1.1.6.创建启动脚本

1.1.7.检查配置、权限、创建日志目录

1.1.8.操作etcd、增加host-gw

1.1.9.创建supervisor配置

1.1.10.启动服务并检查

1.1.11.再次验证集群,pod之间网络互通

1.1.12.在各运算节点上优化iptables规则

1.1.13.在各运算节点保存iptables规则

集群规划

主机名 角色 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的更多相关文章

  1. 第十章 Kubernetes的CNI网络插件--flannel

    1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...

  2. Kubernetes CNI网络插件

    CNI 容器网络接口,就是在网络解决方案由网络插件提供,这些插件配置容器网络则通过CNI定义的接口来完成,也就是CNI定义的是容器运行环境与网络插件之间的接口规范.这个接口只关心容器的网络连接,在创建 ...

  3. kubernetes进阶(二)核心网络插件Flannel

    网络插件Flannel介绍:https://www.kubernetes.org.cn/3682.html 首先,flannel利用Kubernetes API或者etcd用于存储整个集群的网络配置, ...

  4. 安装cni网络插件-非必须

    安装cni网络插件 安装cni # 安装 cni # 百度云链接:https://pan.baidu.com/s/1-PputObLs5jouXLnuBCI6Q 密码:tzqm cd /server/ ...

  5. kubernetes 配置网络插件 flannel

    概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...

  6. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  7. Kubernetes网络插件Flannel的三种工作模式

    跨主机通信的一个解决方案是Flannel,由CoreOS推出,支持3种实现:UDP.VXLAN.host-gw 一.UDP模式(性能差) 核心就是通过TUN设备flannel0实现(TUN设备是工作在 ...

  8. k8s之网络插件flannel及基于Calico的网络策略

    1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...

  9. k8s系列---网络插件flannel

    跨节点通讯,需要通过NAT,即需要做源地址转换. k8s网络通信: 1) 容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现: 2) pod之间的通信,pod ip <---> ...

随机推荐

  1. json数据写入hbase

    package main.scala.com.web.zhangyong168.cn.spark.java; import org.apache.hadoop.hbase.HBaseConfigura ...

  2. ASP.NET Core WebAPI实现本地化(单资源文件)

    在Startup ConfigureServices 注册本地化所需要的服务AddLocalization和 Configure<RequestLocalizationOptions> p ...

  3. Beta冲刺 —— 总结随笔

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.项目预期计划: 1.对于初版小程序的现 ...

  4. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

  5. [统计信息系列7] Oracle 11g的自动统计信息收集

    (一)统计信息收集概述 在Oracle 11g中,默认有3个自动任务,分别是:自动统计信息收集.SQL调优顾问.段空间调整顾问,查看方法如下: SQL> SELECT CLIENT_NAME,T ...

  6. Shell脚本 (一) 概述、解析器、脚本入门

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一. Shell 脚本概述 1. Shell 的 含义: Shell 是一个用C语言编写的程序,它是用户 ...

  7. Java实现 LeetCode 834 树中距离之和(DFS+分析)

    834. 树中距离之和 给定一个无向.连通的树.树中有 N 个标记为 0-N-1 的节点以及 N-1 条边 . 第 i 条边连接节点 edges[i][0] 和 edges[i][1] . 返回一个表 ...

  8. Java实现 蓝桥杯VIP 算法训练 寂寞的数

    问题描述 道德经曰:一生二,二生三,三生万物. 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和.例如,d(23)=23+2+3=28, d(1481)=1481+1+4+8+1= ...

  9. Java实现 LeetCode 105 从前序与中序遍历序列构造二叉树

    105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中 ...

  10. Java实现 LeetCode 26 删除排序数组中的重复项

    26. 删除排序数组中的重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) ...