Kubernetes(K8s)_15_CNI
Kubernetes(K8s)_15_CNI
- CNI
- 网络模型
- Underlay
- MAC VLAN
- IP VLAN
- Direct Route
- Overlay
- VXLAN
- CNI插件
- Flannel
- Calico
- CNI配置
- 内置实现
CNI
CNI(Container Network Interface): 实现容器网络连接的规范
- Kubernetes将网络通信可分为: Pod内容器、Pod、Pod与Service、外部与Service
- CNI解决跨节点的网络通信方式分为:
SDN
、Static Route
、Dynamic Route
、Overlay
// https://github1s.com/containernetworking/cni/blob/main/libcni/api.go#L100// CNI CNI插件规范
type CNI interface {AddNetworkList(ctx context.Context, net *NetworkConfigList, rt *RuntimeConf) (types.Result, error)CheckNetworkList(ctx context.Context, net *NetworkConfigList, rt *RuntimeConf) errorDelNetworkList(ctx context.Context, net *NetworkConfigList, rt *RuntimeConf) errorGetNetworkListCachedResult(net *NetworkConfigList, rt *RuntimeConf) (types.Result, error)GetNetworkListCachedConfig(net *NetworkConfigList, rt *RuntimeConf) ([]byte, *RuntimeConf, error)AddNetwork(ctx context.Context, net *NetworkConfig, rt *RuntimeConf) (types.Result, error)CheckNetwork(ctx context.Context, net *NetworkConfig, rt *RuntimeConf) errorDelNetwork(ctx context.Context, net *NetworkConfig, rt *RuntimeConf) errorGetNetworkCachedResult(net *NetworkConfig, rt *RuntimeConf) (types.Result, error)GetNetworkCachedConfig(net *NetworkConfig, rt *RuntimeConf) ([]byte, *RuntimeConf, error)ValidateNetworkList(ctx context.Context, net *NetworkConfigList) ([]string, error)ValidateNetwork(ctx context.Context, net *NetworkConfig) ([]string, error)GCNetworkList(ctx context.Context, net *NetworkConfigList, args *GCArgs) errorGetCachedAttachments(containerID string) ([]*NetworkAttachment, error)
}
kubelet调用CNI插件实现Pod网络配置
- kubelet在
/etc/cni/net.d
目录查找CNI插件的配置文件(JSON格式) - 基于配置文件中各插件的
type
属性到/opt/cni/bin
目录查找可执行二进制文件 - 配合Pod元数据调用各插件的二进制文件执行操作, 实现Pod网络配置
网络模型
网络模型: 容器编排平台的网络拓扑设计
- Kubernetes的网络模型: Underlay、Overlay
- 网络模型决定集群的网络安全、网络性能、可扩展性和网络策略等
- Kubernetes中的网络模型与传统容器模型不同(以Pod为基础单位设计)
如: 传统的容器网络模型
- 每个节点都需具有个虚拟网桥
Bridge
- 每个容器都独占个
Network
命名空间, 且需配置两个接口 - 容器与主机之外通信时需通过
SNAT
/DNAT
实现(较高的网络复杂度)
如: Kubernetes中Pod通信网络模型
- Pod都处于同一平面网络
- 每个Pod都有个虚拟网络接口和全局唯一的IP
- Pod内所有容器共享
Network
命名空间(pause
容器创建) - Pod内容器通过
lo
接口实现容器间通信(类似本地进程通信) - Pod跨节点通信是基于
Veth Pair
实现(节点的虚拟接口通过ARP Proxy
实现代理)
// Veth Pair(Virtual Ethernet Pair): 对称虚拟网络接口连接实现跨命名空间通信(Linux内核实现)
Underlay
Underlay(Underlay Network): 基于交换机和路由器等设备构建的物理网络模型
- 适用于网络性能敏感场景(无需额外的报文开销)
- 容器可通过驱动程序直接使用宿主节点的网络接口
- Underlay的常见实现: Bridge、MAC VLAN、IP VLAN、Direct Route
MAC VLAN
MAC VLAN: 以太网接口上虚拟多个网络接口
- 每个虚拟接口都有个唯一MAC, 并按需配置IP
- MAC VALN要求物理接口处于混杂模式(适用于本地网络环境)
- 由于唯一MAC特性需注意以下场景: 交换机校验MAC、网卡限制MAC数量
如: Bridge与MAC VALN对比
MAC VLAN的工作模式:
模式 | 说明 |
---|---|
Private | 禁止同一物理接口上多个MAC VLAN通信 |
VPEA | 允许同一物理接口上多个MAC VALN通信 (需外部交换机弃用发夹模式, 或存在报文转发的路由器) |
Bridge | 物理接口配置为网桥 (多个MAC VALN可通过网桥直接通信) |
Passthru | 允许一个MAC VALN直接连接物理接口 |
IP VLAN
IP VLAN: 以太网接口上虚拟多个网络接口
- 每个虚拟接口都有个唯一IP, 但共享物理接口的MAC
- MAN VLAN和IP VLAN不可同时在一个物理接口上使用
- Linux 4.2内除支持IP VLAN网络驱动(可通过
ip link
命令验证)
IP VLAN工作模式分为: IP VLAN L2、IP VLAN L3
- IP VLAN L2和MAC VLAN Bridge都支持ARP协议和广播流量
- IP VLAN L3时网络栈将在容器内处理(类似路由器的报文处理机制)
如: L2和L3模型对比
Direct Route
DR(Direct Routing): 虚拟对称网络接口实现请求在L3时直接路由
- 本质: 维护每个节点的路由表信息(保证容器请求顺利到达)
如: Calico实现的DR
DR成为Underlay实现的主流原因:
- 更易于集成到数据中心的基础设施之上
- 报文过滤和隔离的扩展性更高
- 控制模型更精细
Overlay
Overlay(Overlay Network): 基于多个已存在的物理/逻辑网络构建的逻辑网络模型
- 节点需支持VXLAN、UDP、IPIP或GRE等隧道协议(对底层网络无要求)
- 需额外的性能开销, 不适用于网络性能敏感场景(额外的隧道报文封装)
- 可实现跨越多个L2/L3的逻辑网络子网(适用于混合云场景)
- Overlay的底层是由Underlay负责(底层通信)
如: Overlay网络架构
- 节点间通信必须通过OS上对外通信的网络接口进行
- 网络隧道本质: 将容器的通信报文封装成各自宿主节点之间的报文
网络隧道(Tunnelling): 基于种网络协议传输其他网络协议
- 功能: 基于物理/逻辑网络之上构建出新的逻辑网络
- 本质: 在原始数据包的外部或内部添加额外的封装头部信息
VXLAN
VXLAN(Virtual eXtensible Local Area Network): 可构建高扩展虚拟局域网的网络虚拟化技术
- 本质: 通过
L2 over L4
的报文封装模式将L2报文用L3协议封装(MAC-in-UDP) - VXLAN中IP报文不可分片, 且底层网络需配置足够大的
MTU
值 - VXLAN的网关和路由信息都分为: 集中式、分布式
Bridge-Domain(BD): VXLAN的虚拟网络构建单元
- VNI: BD的全局唯一标识(类似
VLAN
的VLAN ID
) - 功能: 连接不同的VXLAN终端设备, 以实现逻辑隔离和跨子网通信(构建大二层网络)
- 相同VNI在不同VTEP之间通信需借助L2网关, 不同VNI或与VXLAN之间通信则需借助L3网关
VTEP(VXLAN Tunnel Endpoints): VXLAN的物理网络边缘设备以传输数据(网络隧道的出入口)
- 功能: 虚拟网络中数据包的封包/解包, 以实现虚拟网络的扩展和互联
- VXLAN通过添加额外设备构建虚拟逻辑网络, 可避免对底层网络的侵入
- 支持VXLAN协议的交换机/主机都可模拟为VTEP(Linux 3.7内核模块支持)
CNI插件
CNI插件: 遵循CNI规范实现的可执行二进制文件
- 功能: 维护
CRI
提供的Pod网络命名空间 - CNI插件实现分为两部分API: NetPlugin、IPAM
- CNI插件选择因素: 底层网络架构、容器网络功能、网络性能
如: CNI插件配置Pod网络流程
- NetPlugin(网络管理插件): 创建/删除网络以及向网络添加/删除容器
- IPAM(IP Address Management): 创建/删除地址池以及分配/回收容器IP
- kubelet通过在每个Pod中创建
pause
容器完成响应操作(CRI中称为Sandbox
)
// IPAM可分为: host-local
(静态分配)、dhcp
(续订租约)
Flannel
Flannel: 基于L3简单易配置CNI插件
- Flannel实现跨节点常用通信方式: VXLAN、host-gw、UDP
- Flannel会在每个节点运行个
flanneld
守护进程以完成各节点网络配置 flanneld
会从Etcd加载JSON
格式的网络配置等信息, 同时维护各节点的路由信息
VXLAN通信: VXLAN
协议封装IP报文创建Overlay网络
- VXLAN通信需借助Linux内核的vxlan模块封装网络隧道报文
flanneld
启动时会将VTEP设备IP和节点MAC映射信息存储于Etcd依此生成解析记录- FDB(Forwarding Database): 存储VTEP设备路由转发信息(虚拟网络接口所在节点IP)
- 直接路由:
flanneld
在节点添加必要路由信息, 以实现Pod间IP报文可在L2直接通信
如: VXLAN协议封装报文
- VXLAN协议使用
UDP
报文封装网络隧道内层数据帧(MAC会直接使用节点MAC)
VXLAN通信流程(未开启直接路由):
- Pod发送送数据经由
flannel1.1
接口封装成数据帧 flanneld
将数据帧封装成UDP
报文(目标地址为Pod所在节点IP), 并发送给目标flanneld
- 目标
flanneld
按照上述反向流程解析报文以将数据转发给目标Pod
如: VXLAN通信流程(直接路由功能需配置开启)
flanneld
在节点创建名为flannel1.1
的虚拟网络接口作为网络隧道的VTEP设备- Flannel基于分布式网关模型, 将每个节点都视为到达该节点Pod子网的L2网关
- 仅位于同一个L2之下的节点可使用直接路由(混合模式处理不同请求)
host-gw通信: 通过添加必要路由信息实现Pod在L2直接通信
- host-gw通信要求所有节点都必须位于一个L2之下(不再有网络隧道)
如: host-gw通信流程
Flannel分配IP流程:
- 预留个专用网络(默认为: 10.244.0.0/16)
- 根据
flanneld
申请将专用网络划分为多个子网分配给每个节点作为Pod CIDR
- 节点通过IPAM插件以
host-local
形式从Pod CIDR
中分配IP flanneld
将子网和IP分配等信息存储于Etcd
Calico
Calico: 高性能容器通信和网络安全CNI插件
- Calico基于L3解决网络通信, 并使节点通过BGP协议交换路由信息生成路由规则
- Calico将每个节点上Pod组成的网络都视为个自治系统管理(虚拟网络)
BGP(Border Gateway Protocol): 基于路径矢量的路由协议
- 限制: 所有设备都需位于同一个L2
- 本质: 通过维护路由表/前缀表实现自治系统之间的可达性
- BGP可实现去中心化的自治路由, 使多个自治系统之间相互协作
如: Calico通过BGP路由
- 将每个节点视为虚拟路由器(vRouter), 并基于BGP协议生成路由规则
- 将节点上的Pod都视为vRouter后的终端设备, 并分配个IP
- 不同子网下的vRouter仍需基于
VXLAN
/IPIP
通信
Calico基础构成组件
组件 | 说明 |
---|---|
Felix | 网络接口管理、路由规划、ACL规划和状态报告等核心功能 (各节点的守护进程) |
BIRD (BGP Internet Routing Daemon) | BGP客户端 (节点守护进程将Felix生成的路由信息载入内核并广播) |
Etcd | 存储Calico状态数据 (Etcd也是Calico各组件的通信总线) |
BGP Reflector | 汇总/分发路由信息 (BGP由点对点变为与中心点单路通信模型) |
编排系统插件 | 将Calico整合进所在的编排系统 (API转换) |
如: Calico架构
IPIP: 基于IP报文的高性能网络隧道
- 本质: IP包的二次封装以实现IP层虚拟网桥
- IPIP封装后报文头非常小, 所以相较于VXLAN性能更好(安全性降低)
- IPIP能需依靠BGP维护各节点间的可达性(生成到达各节点的路由信息)
如: IPIP网络隧道
如: Calico运行流程
CNI配置
CNI配置: 以插件组合形式实现CNI功能配置
- CNI配置插件类别分为: main、ipam、meta
- CNI配置需提供网络接口功能: ADD、DEL、CHECK、VERSION
- kubelet以
JSON
格式解析调用CNI配置(可从磁盘读取或其他源动态生成)
常用CNI配置:
cniVersion: <String> # CNI配置的语义版本
name: <String> # CNI网络名称, 当前节点唯一
type: <String> # CNI插件名称(kubelet在配置目录下查找并调用该可执行文件)
delegate: <Object> # 委派其他插件
args: <Map[String]String> # 附加参数
ipMasq: <Boolean> # 是否启用IP伪装
ipam: <Object> # IPAM插件type: <String> # IPAM插件名称(kubelet在配置目录下查找并调用该可执行文件)subnet: <String> # 分配所基于的子网地址routes: <String> # 路由信息dst: <String> # 目标主机/网络gw: <String> # 网关地址
dns: <Object> # 容器的DNS属性nameservers: <[]String> # DNS服务器列表domain: <[]String> # 用于短格式主机查找的本地域search: <[]String> # 用于短格式主机查找的优先级排序的搜索域列表options: <[]String> # 传递给解析程序的选项列表
- 可通过
plugins
字段定义多个CNI插件协作(按定义顺序调用) - CNI配置文件必须是
conf
、conflist
、json
后缀, 否则无法加载 - 目录下存在多个CNI配置文件时, 则会根据文件名升序排序以加载排序后首个文件
内置实现
内置实现: Kubernetes内置实现部分CNI插件
- 内置实现可参考源码:
https://github.com/containernetworking/plugins
main: 维护容器网络接口
插件 | 说明 |
---|---|
bridge | 虚拟网桥 (将节点和其Pod接入网桥) |
ipvlan | 容器中添加个IP VLAN接口 |
macvlan | 容器中添加个MAV VLAN接口 (创建个新MAC地址, 基于该MAC向容器转发报文) |
loopback | 配置容器lo 接口状态 |
ptp | veth pair 接口 |
vlan | 分配个VLAN设备 |
host-device | 将节点的网络接口分配给Pod |
ipam: 分配给容器IP
插件 | 说明 |
---|---|
dhcp | 动态申请IP, 并需以租约续订 (每个节点需运行个dhcp守护进程以作为dhcp客户端) |
host-local | 基于本地IP地址数据库分配IP |
static | 分配静态IP |
meta: 网络功能扩展(调用其他插件)
插件 | 说明 |
---|---|
tuning | 调正现存某接口的sysctl 参数值 |
portmap | 通过iptables 将节点的端口映射至容器(实现 hostPort 功能) |
bandwidth | 通过流量控制工具tbf 实现带宽限制 |
sbr | 配置基于源IP地址的路由 |
firewall | 防火墙 (基于 iptables /firewalld 管理进出流量) |
相关文章:

Kubernetes(K8s)_15_CNI
Kubernetes(K8s)_15_CNI CNI网络模型UnderlayMAC VLANIP VLANDirect Route OverlayVXLAN CNI插件FlannelCalico CNI配置内置实现 CNI CNI(Container Network Interface): 实现容器网络连接的规范 Kubernetes将网络通信可分为: Pod内容器、Pod、Pod与Se…...

python 生成器的作用
1. 生成器 参考: https://www.cainiaojc.com/python/python-generator.html 1.1. 什么是生成器? 在 python 中,一边循环一边计算的机制,称为生成器:generator. 1.2. 生成器有什么优点? 1、节约内存。p…...

第十五届蓝桥杯(Web 应用开发)模拟赛 2 期-大学组(详细分析解答)
目录 1.相不相等 1.1 题目要求 1.2 题目分析 1.3 源代码 2.三行情书 2.1 题目要求 2.2 题目分析 2.3 源代码 3.电影院在线订票 3.1 题目要求 3.2 题目分析 3.3 源代码 4.老虎坤(不然违规发不出来) 4.1 题目要求 4.2 题目分析 4.3 源代码 …...

图解系列--HTTPS,认证
确保 Web 安全的HTTPS 1.HTTP 的缺点 1.1.通信使用明文可能会被窃听 加密处理防止被窃听 加密的对象可以有这么几个。 (1).通信的加密 HTTP 协议中没有加密机制,但可以通过和 SSL(Secure Socket Layer,安全套接层)或TLSÿ…...

element plus中表格的合计属性和例子
在 element plus 表格中,您可以使用 summary-method 属性来指定一个函数,计算表格中列的合计或平均值等。该函数应该返回一个对象,其中包含每个列的合计值。例如,如果您的表格数据是这样的: [{ name: John, age: 20, …...

计网Lesson1笔记
文章目录 几个简单概念计网的发展史阿帕网和RFCTCP/IP 协议互联网协议计网设计OSI 的七层架构TCP/IP 协议簇 几个简单概念 主机(host):指单个计算机,比如PC,或者其他电子设备。端系统(end system):指一块区域内的多个主机&#x…...

指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)
文章目录 🚀前言🚀两段有趣的代码✈️typedef关键字 🚀指针数组🚀简易计算器的实现 🚀前言 基于阿辉前两篇博客指针的基础篇和进阶篇对于指针的了解,那么今天阿辉将为大家介绍C语言的指针剩下的部分&#…...

josef JZ-7Y-33静态中间继电器 电压DC220V 板前接线
系列型号: JZ-7Y-201X静态中间继电器;JZ-7J-201X静态中间继电器; JZ-7L-201X静态中间继电器;JZ-7D-201X静态中间继电器; JZ-7Y-201静态中间继电器;JZ-7J-201静态中间继电器; JZ-7L-201静态中…...

Java第二十章 ——多线程
本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 在这之前,首先让我们来了解下在操作系统中进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文…...

【超强笔记软件】Obsidian实现免费无限流量无套路云同步
【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步? 目录 一、简介 软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…...

【Linux小项目】实现自己的bash
0. bash原理介绍 bash实际上就是一个负责解析输入字符串工具. 我们需要做的事是这些: 手动分割出输入的字符串判断哪些变量是内建命令(自己执行),哪些命令是普通命令(创建子进程执行)实现的功能有: echo export cd 常规指令 输入、输出流重定向 #include<stdio.h> #i…...

客户案例:EDLP助力金融行业打造高效数据防泄露体系
客户背景 某金融机构是一家以金融科技为核心,致力于为客户提供全方位、智能化、便捷化金融服务的综合性企业。公司总部位于南京,业务范围覆盖全国,拥有强大的技术研发团队和优秀的业务精英,为客户提供全方位的金融服务解决方案。 …...

【JavaFX漏扫开发基础】stage窗口/模式/模态
文章目录 stage一、stage窗口二、stage窗口,模式,模态stage模式(5种样式)模态化窗口stage stage其实就是一个窗口,它啥也不是,打开所有windows的程序都会有一个窗口,这个窗口就是javafx里的stage。里面的内容不属于stage,stage就是一个窗口,就这么简单。 Stage is a…...

MySQL进阶知识:锁
目录 前言 全局锁 表级锁 表锁 元数据锁(MDL) 意向锁 行级锁 行锁 行锁演示 间隙锁/临界锁 演示 前言 MySQL中的锁,按照锁的粒度分,分为以下三类 全局锁:锁定数据库中的所有表。表级锁:每次操…...

linux下的工具---gdb
一、gdb简介 GDB,是The GNU Project Debugger 的缩写,是 Linux 下功能全面的调试工具。 GDB支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序&am…...

ESP32-Web-Server编程-JS 基础 2
ESP32-Web-Server编程-JS 基础 2 概述 上节介绍了 JS 编程的基础。如前所述,在 HTML 中,可以通过下述 两种方式使用 JS 程序: 直接在 HTML 文件中通过 script 标签中嵌入 JavaScript 代码。通过 src 元素引入外部的 JavaScript 文件。 在…...

Java Web基础教程
Java Web基础教程 1. Servlet基础 1.1 什么是Servlet Servlet是JavaEE中的标准组件之一,专门用于处理客户端的HTTP请求。并且它必须依赖于Servlet容器(Tomcat就是一个标准的Servlet容器)才能运行。因为Servlet实例的创建和销毁都是由容器负…...

BUUCTF john-in-the-middle 1
BUUCTF:https://buuoj.cn/challenges 题目描述: 注意:得到的 flag 请包上 flag{} 提交 密文: 下载附件,解压得到john-in-the-middle.pcap文件。 解题思路: 1、双击文件,打开wireshark。 看到很多http流…...

HashMap的死循环及数据覆盖问题
目录 一,HashMap 线程不安全的原因 二,HashMap 死循环问题 死循环发生的条件 死循环的具体过程 死循环执行步骤1 死循环执行步骤2 死循环执行步骤3 三,HashMap 数据覆盖问题 数据覆盖执行流程1 数据覆盖执行流程2 数据覆盖执行流…...

数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例
MongoDB数据库数据恢复环境: 一台Windows Server操作系统的虚拟机,虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测: 在未关闭MongoDB服务的情况下,工作人员将MongoDB数据库文件拷贝到其他分区,然后将原数…...

2023年11月个人工作生活总结
本文为 2023 年 11 月工作生活总结。 研发编码 GIS 模仿了一些有名的地图服务商的网站,将离线地图页面做成全屏,对于大屏幕更加好友。再美化一下全区的边界和区内地域的边界。不过主要工作量还是绘制路线,而绘线作为内部工作,还…...

Spark-06:Spark 共享变量
目录 1.广播变量(broadcast variables) 2.累加器(accumulators) 在分布式计算中,当在集群的多个节点上并行运行函数时,默认情况下,每个任务都会获得函数中使用到的变量的一个副本。如果变量很…...

Spring整合web环境
目录 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 Spring的web开发组件spring-web MVC框架思想及其设计思路 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 package com.xfy.listener;import com.xfy.config.SpringConfig; import org.springfra…...

分享从零开始学习网络设备配置--任务4.3 使用动态路由RIPng实现网络连通
任务描述 某公司使用IPv6技术搭建企业网络,由于静态路由需要管理员手工配置,在网络拓扑发生变化时,也不会自动生成新的路由,因此采用IPv6动态路由协议RIPng实现网络连通,实现任意两个节点之间的通信,并降低…...

vue2.0+elementui集成file-loader之后图标失效问题
背景 跑vue2elementUI项目时,由于前端这边需要在本地存放xlsx模板文件,供用户下载模板文件,所以需要在webpack构建的时候增加file-loader进行解析xlsx文件打包。 vue版本2.x element-ui 版本 2.13.x 注意 npm i -D file-loader版本号给vue项…...

C# 文件帮助类(FileHelper)
引言 在研究程序反射的时候我们往往需要获取当前运行程序所引用的dll文件,按照传统的方式我们可以维护一个这样的列表,但是这样维护成本实在是太高,而且不利于团队合作开发,在高版本的.net 4.6.2之后官方出了专门的dll帮我们做这个事情Microsoft.Extensions.DependencyMod…...

WordPress 外链跳转插件
WordPress 外链跳转插件是本站开发的一款WordPress插件,能对文中外链添加一层过滤,有效防止追踪,以及提醒用户。 类似于知乎、CSDN打开其他链接的提示。 后台可以设置白名单 学习资料源代码:百度网盘 密码:123...

算法的10大排序
10大排序算法--python 一颗星--选择排序一颗星--冒泡排序一颗星--插入排序两颗星--归并排序(递归-难)三颗星--桶排序三颗星--计数排序四颗星--基数排序四颗星--快速排序,寻找标志位(递归-难)四颗星--又是比较难的希尔排…...

“十道机器学习问题,帮助你了解基础知识和常见算法“
目录 简介: 1. 什么是机器学习?它与传统编程有什么不同之处?2. 请解释监督学习和无监督学习的区别。3. 什么是过拟合和欠拟合?如何解决这些问题?4. 请解释交叉验证在机器学习中的作用。5. 什么是特征选择?为…...

部署WAF安全应用防火墙(openresty部署)
使用NGINX+Openresty实现WAF功能 一、了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用 防火墙 是通过执行一系列针对HTTP/HTTPS的 安全策略 来专门为Web应用提供保…...