k8s——flannel网络

2023-05-16

文章目录

  • 一、Flannel简介
  • 二、Flannel网络概述
  • 三、部署


一、Flannel简介

1、当一个k8s集群创建好后一般会存在三种IP,分别是:Pod IP、Node IP、Cluster IP

Cluster IP之下包含多个Node IP,而一个Node IP之下又包含多个Pod IP,同一个Pod包含多个容器(这些容器的网络都在同一个命名空间,因此可以自由的通信),同一个Node包含多个Pod,这些Pod又通过veth pair技术与同一个cni网桥进行连接,通常这个cni网桥就是我们熟知的docker0网卡,这个是在你安装docker后就会创建在宿主机上的一个虚拟网卡,因此相同Node节点下的Pod又可以通过cni网桥进行通信。
但是不同Node节点下的Pod又是如何进行通信的,尤其是在成千上万个容器的情况下进行通信,就这需要用到flannel网络插件来解决这个问题。

2、Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

3、在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

4、Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

二、Flannel网络概述

Overlay Network:
覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来
类似VPN隧道,原理为在物理网络上实现的逻辑网络

VXLAN:
将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层包头进行封装,然后在以太网上传输,到达目的地后由隧道断电解封并将数据发给目标地址

Flannel:
是Overlay网络的一种,也是将源数据包封装在另一种网络包中进行路由转发和通信,目前已支持UDP、VXLAN、AWS VPN和GCE路由等数据转发方式

在这里插入图片描述
flannel原理简介:
容器10.1.15.2/24访问10.0.20.3/24,经过所在主机的docker0,也就相当于这个容器的网关,转发到flannel0虚拟网卡,经过flanneld进行处理,将源容器的ip和目的容器的ip封装成内部ip,将源物理网卡的网关和目的物理网卡的网关封装成外部ip,并同时封装其MAC地址,源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后进入目的节点flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,传递到对应ip的容器

三、部署

首先两个node节点需要先安装docker引擎

安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker-CE
vim /etc/selinux/config
SELINUX=disabled

yum install -y docker-ce

systemctl start docker.service
systemctl enable docker.service

镜像加速

搜索容器镜像服务
在这里插入图片描述

网络优化

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

systemctl restart network
systemctl restart docker

master配置
需要在有证书的目录下使用此命令
写入分配的子网段到ETCD中,供flannel使用

[root@localhost ~]# cd k8s/etcd-cert/

[root@localhost ~]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.111.10:2379,https://192.168.111.30:2379,https://192.168.111.40:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

拷贝到所有node节点(只需要部署在node节点即可)
[root@localhost k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz root@192.168.111.30:/root
[root@localhost k8s]# scp flannel-v0.10.0-linux-amd64.tar.gz root@192.168.111.40:/root

所有node节点操作解压

[root@localhost ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz 

flanneld
mk-docker-opts.sh
README.md
k8s工作目录
[root@localhost ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
[root@localhost ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/
编写flannel启动脚本
[root@localhost ~]# vim flannel.sh
#!/bin/bash

ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"}

cat <<EOF >/opt/kubernetes/cfg/flanneld

FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \
-etcd-cafile=/opt/etcd/ssl/ca.pem \
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem"

EOF

cat <<EOF >/usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure

[Install]
WantedBy=multi-user.target

EOF

systemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld
开启flannel网络功能
[root@localhost ~]# bash flannel.sh https://192.168.111.10:2379,https://192.168.111.30:2379,https://192.168.111.40:2379
配置docker连接flannel
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=/run/flannel/subnet.env
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always


systemctl daemon-reload
systemctl restart docker
验证下docker网络和flannel网络是否在同一个网段
ifconfig

在这里插入图片描述
在这里插入图片描述
拉取镜像然后进入容器去ping另一个不同网段的容器

docker run -it centos:7 /bin/bash
yum -y install net-tools

ping 172.17.39.1

在这里插入图片描述
如果这里ping的时候出现卡住了需要这么解决
所有的node节点按顺序依次重启服务

systemctl restart flanneld.service
systemctl restart network
systemctl restart docker

然后再次进入容器去ping就可以了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s——flannel网络 的相关文章

  • DHorse系列文章之操作手册

    在介绍DHorse的操作之前 我们先来看一下发布一个系统的流程是什么样的 发布系统的流程 我们以一个Springboot系统为例 来说明一下发布流程 1 首先从代码仓库下载代码 比如Gitlab 2 接着是进行打包 比如使用Maven 3
  • k8s job机制初探

    博客作为学习笔记记录 若有理解或表述错误 欢迎指出 k8s的job机制 k8s官网参考 k8s的job是用来执行一次性任务的一类资源 相关的还有cronjob 用于执行以下周期性任务 部署job之后 k8s会起对应pod 当pod的状态为f
  • 二进制部署K8s

    一 环境需求 节点IP 节点名称 所需组件 192 168 248 11 k8s master docker etcd apiserver controller manager scheduler kube proxy flannel 19
  • minikube单机安装nfs服务

    1 安装 nfs server sudo apt get update sudo apt get install y nfs kernel server 2 创建目录 配置 IP 共享目录绑定 vim etc exports 新增 data
  • kubeadm方式部署k8s最新版本V1.26.2

    Kubernetes核心概念 Master主要负责资源调度 控制副本 和提供统一访问集群的入口 核心节点也是管理节点 Node是Kubernetes集群架构中运行Pod的服务节点 Node是Kubernetes集群操作的单元 用来承载被分配
  • k8s中Endpoint是什么

    在Kubernetes K8s 中 Endpoint是一种资源对象 用于表示一个Service所依赖的真实后端节点的Pod信息 它存储了一组IP地址和端口号的列表 这些IP地址和端口号对应着提供相同服务的Pod实例 主要作用 Endpoin
  • k8s之nginx-ingress做tcp或udp的4层网络负载

    检查nginx ingress是否开启tcp udp转发 test test02 ingress kubectl get pod n ingress nginx o yaml grep i configmap configmap POD N
  • 如何解决K8S节点显示NotReady

    文章目录 kubernetes节点断电重启 kubernetes节点断电重启 背景 运行的好好的k8s集群 某天断电 发现一个节点炸了 显示NotReady kubectl get nodes 那么如何查找问题呢 我们用它 journalc
  • kubeadm构建(Calico+Dashboard+Containerd)

    文章目录 前言 一 环境 二 部署容器网络 CNI master操作 1 下载yamll 2 修改yaml 3 部署 三 部署 Dashboard 1 下载yaml 2 修改yaml 3 部署 4 创建管理员 四 切换容器引擎为Contai
  • Kubernetes 集群部署 ------ 二进制部署(二)

    单节点 https blog csdn net Yplayer001 article details 104234807 先具备单master1节点部署环境 三 master02部署 优先关闭防火墙和selinux服务 在master01上
  • k8s基础5——Pod常用命令、资源共享机制、重启策略和健康检查、环境变量、初始化容器、静态pod

    文章目录 一 基本了解 二 管理命令 三 yaml文件参数大全 四 创建pod的工作流程 五 资源共享机制 5 1 共享网络 5 2 共享存储 六 生命周期 重启策略 健康检查 七 环境变量 八 Init Containe初始化容器 九 静
  • 十二. Kubernetes Pod 与 探针

    目录 一 Pod Pod 中的多容器协同 Pod 的组成与paush 重要 Pod 的生命周期 Pod状态与重启策略 静态Pod 二 探针 1 livenessProbe存活探针 2 readinessProbe就绪探针 3 startup
  • k8s学习(五)ReplicaSet的使用

    ReplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合 可确保指定数量的pod在任何设定的时间运行 因此 它通常用来保证给定数量的 完全相同的 Pod 的可用性 示例 1 nginx
  • K8s基础6——应用配置管理方案、调度策略、污点和污点容忍

    文章目录 一 应用配置管理方案 1 1 ConfigMap 1 1 1 注入变量 1 1 2 挂载数据卷 1 2 Secret 1 2 1 数据卷挂载 1 2 2 变量注入 二 调度策略 2 1 nodeSelector定向调度 2 1 1
  • 基于minikube的k8s单机环境部署ThingsBoard

    1 minikube安装k8s单机版 https blog csdn net qq 39879126 article details 121587678 2 安装ThingsBoard 下载 https github com thingsb
  • 从Docker到Kubernetes——Kubernetes设计解读之ReplicationController、Service

    文章目录 Kubernetes的设计解读 replication controller 设计解读 replication controller 使用示例 service的设计解读 service的使用示例 Kubernetes的设计解读 r
  • flannel和calico区别

    k8s网络模式 Flannel数据包在主机间转发是由backend实现的 目前已经支持UDP VxLAN host gw等多种模式 VxLAN 使用内核中的VxLAN模块进行封装报文 也是flannel推荐的方式 host gw虽然VXLA
  • flannel和calico区别

    k8s网络模式 Flannel数据包在主机间转发是由backend实现的 目前已经支持UDP VxLAN host gw等多种模式 VxLAN 使用内核中的VxLAN模块进行封装报文 也是flannel推荐的方式 host gw虽然VXLA
  • 执行 kubeadm Reset 后 Kubernetes 无法为 pod 设置网络

    我用以下命令初始化了 Kuberneteskubeadm init 并且在我使用之后kubeadm reset重置它我发现 pod network cidr错了 更正后我尝试使用kubeadm像这样再次初始化 Kubernetes kube
  • 访问 Kubernetes clusterIP 服务请求超时

    我正在寻求帮助来解决这个无法正常工作的基本场景 安装了三个节点kubeadm on VirtualBox 虚拟机在 MacBook 上运行 sudo kubectl get nodes NAME STATUS ROLES AGE VERSI

随机推荐

  • python 类 文件读写与模块

    初始化类的属性 def init self name self不能省 self name 61 name 注意 xff1a 在定义类方法时 xff0c self不能省 继承 class 子类名 xff08 父类名 xff09 class e
  • python标准库

    time库 python处理时间的标准库 1 获取现在时间 time localtime 本地时间 time gmtime utc世界统一时间 北京时间比世界统一时间早8小时 2 时间戳与计时器 time time 返回自纪元以来的秒数 x
  • python之numpy库的应用

    numpy是由c语言编写的 xff0c 运行速度比python 循环快很多 在数据处理的过程中 xff0c 遇到使用 python for循环实现一些向量化 xff0c 矩阵化操作的时候 xff0c 要优先考虑用numpy numpy数组的
  • 0x00D2DCAC 处(位于 Company.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000024 时发生访问冲突。

    上面的意思就是你吧值付给了不该赋给的变量 xff0c 或者说你把值付给了不能付给的变量 xff08 或者常量 xff09 xff08 1 xff09 最简单也最直接的错误可能就是scanf xff08 xff09 的问题 xff0c 我们都
  • volatile,static,const,extern等关键字

    volatile作用 Volatile关键词的第一个特性 xff1a 易变性 所谓的易变性 xff0c 在汇编层面反映出来 xff0c 就是两条语句 xff0c 下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容 xff
  • cpp基础复习

    不能返回局部变量引用 当函数调用作为左值式 xff0c 函数返回必须是引用 引用的本质是内部实现了一个指针常量 发现是引用 xff0c 转换为 int const ref 61 amp a void func int amp ref ref
  • linux系统中 --dd-- 命令详解

    一 dd命令 dd xff1a 用指定大小的块拷贝一个文件 xff0c 并在拷贝的同时进行指定的转换 注意 xff1a 指定数字的地方若以下列字符结尾 xff0c 则乘以相应的数字 xff1a b 61 512 xff1b c 61 1 x
  • English grammar

    Verb notional verb cancel establish think have meaning cannot delete in the sentences copula be am is are no meaning tra
  • 超详细Altium Designer攻略:如何从新建文件夹到手中的一块电路板

    这篇博客将使用AD17软件 xff0c 以STM32f103C8T6最小系统板为例子来详解如何得到一块属于自己的电路板 一 画原理图 打开AD17新建工程 点击文件 gt 新建 gt Project 然后在弹出的窗口点击 OK 此时已经成功
  • SW四旋翼无人机装配零件(1)

    SW四旋翼无人机装配零件 xff08 1 xff09 零件 xff1a 1 脚垫 2 数据盒 3 飞行手臂 4 上盖 5 电池盒
  • 交换机基本原理和配置

    交换机基本原理与配置 数据链路层功能数据链路层 以太网帧格式以太网工作在数据链路层以太网MAC地址 交换机的工作原理初始状态MAC地址学习广播未知数据帧接收方回应交换机实现单播通信 交换机的命令行配置 数据链路层功能 数据链路层 数据链路层
  • 边界网关协议BGP——距离矢量路由协议

    目录 动态路由的分类 1 按自治系统分为 2 按协议类型分类 BGP概念自治系统AS xff1a BGP路由协议的特点 xff1a BGP分类 xff1a BGP的路由器号 xff08 Router ID xff09 xff1a BGP工作
  • 嵌入式开发学习之硬件基础:学会看懂原理图符号

    PCB PCB xff08 Printed Circuit Board xff09 xff0c 中文名称为印制电路板 xff0c 又称印刷线路板 xff0c 是重要的电子部件 xff0c 是电子元器件的支撑体 xff0c 是电子元器件电气相
  • STM32入门教程课程简介(B站江科大自化协学习记录)

    课程简介 STM32最小系统板 43 面包板硬件平台 硬件设备 STM32面包板入门套件 Windows电脑 万用表 示波器 镊子 剪刀等 软件介绍 Keil MDK 5 24 1 是一款嵌入式软件开发工具 xff0c 它提供了一个完整的开
  • 一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)

    大家好 xff0c 我是烟火 目前BMS软件工程师在职 xff0c 利用自由时间 xff0c 输出一些基础知识合集 xff0c 一方面巩固 xff0c 另一方面写博客作为成长记录 人间清醒 xff1a 明明有能力可以变成更优秀的人 遇见更好
  • 在进行树莓派网络配置、安装dronekit、安装ros时我遇到的一些问题

    写得很乱 xff0c 慎看 xff01 永久改写USB口读写权限的方法 1 运行命令 xff1a lsusb vvv 2 树莓派网络获取和桌面安装 通过网线连接树莓派和电脑 xff0c 随后电脑开启无线连接 xff0c 共享网络 xff0c
  • 第一个简单的SpringBoot实现增删改查(带前端界面,超详细)

    由于网页端无法完成post之类的请求 xff0c 所以增加需要手动增加 这个页面只能进行更改和删除 xff0c 而且将源码中的端口号改为了8082 xff0c 在访问网址的时候请注意一下 点击更改按钮 更改完毕后会继续回到index htm
  • Linux ubuntu普通用户登录默认以root用户登录设置方法

    首先修改 etc lightdm lightdm conf xff0c 设置autologin user 61 root 然后修改 root profile xff0c 注释掉mesg n true xff0c 并且新添加一行 xff1a
  • 使用TortoiseGit图形化工具免Git命令远程控制仓库 - Gitee篇

    Gitee篇 GitHub篇点击这里 一 TortoiseGit提交代码 1 下载Git两个软件 xff0c 按下图顺序下载 Git传送门 xff1a Git Downloads TortoiseGit传送门 xff1a TortoiseG
  • k8s——flannel网络

    文章目录 一 Flannel简介二 Flannel网络概述三 部署 一 Flannel简介 1 当一个k8s集群创建好后一般会存在三种IP xff0c 分别是 xff1a Pod IP Node IP Cluster IP Cluster