目录

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. vue 下拉列表动画

    点击可以收起,这里注意先给需要收起展开的的容器设置高度,通过样式v-enter和v-leave-to设置结束和开始前的就可以了

  2. 如何下载xshell家庭版

    xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议,加上友好炫酷的操作界面,深受广大码农的喜爱,是后端开发程序猿操 ...

  3. NodeJS——模块全局安装路径配置以及关于supervisor的问题解释

    下载安装NodeJS后,在自己选择的路径下会有如下的文件: 默认情况下NodeJS安装会同时安装npm(模块管理器:用于管理用户require的模块,有全局和本地两种). 注:全局:执行npm  in ...

  4. java的Interger自动包装带来的问题

    1 首先看一下以下代码: Integer b=7; Integer c=7; Integer r=234; Integer d=234; System.out.println(b==c); Syste ...

  5. 跟着阿里学JavaDay04——Java基础语法(二)

    一.Java运算符 运算符的简介 所有的程序开发,都是对数字的进行处理.而对数字的处理,一定会存在所谓的操作模式,而这些操作模式就被称为运算符. 算术运算符 对于算术运算符,我们主要掌握++,--的运 ...

  6. ERROR: ...hbase.PleaseHoldException: Master is initializing

    同学升级HBase后遇到这个问题,hbase shell,status就可以看到 ERROR: -hbase.PleaseHoldException: Master is initializing 解 ...

  7. Physic Design:Floorplan算法概览

    仅用于学习交流,转载请联系本人. 1 floorplan是什么 floorplan常被翻译成布图规划,是指在芯片级别上对模块进行布局,也就是哪个单元放在什么地方,但是单元内部的具体布局并不关心.该步骤 ...

  8. SchedTune

    本文仅是对kernel中的document进行翻译,便于理解.后续再添加代码分析. 1. 为何引入schedtune? schedutil是一个基于利用率驱动的cpu频率governor.它允许调度器 ...

  9. Java实现 蓝桥杯VIP 算法训练 P0504

    算法训练 P0504 时间限制:1.0s 内存限制:256.0MB Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,Uncl ...

  10. Java实现 LeetCode 134 加油站

    134. 加油站 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升 ...