F-Stack KNI配置注意事项
F-Stack KNI配置注意事项
KNI介绍
KNI(Kernel NIC Interface)内核网卡接口,是DPDK中用于与内核通信的模块,在主要的业务流程中可能并不需要,但在部分场景下,如服务器所有网卡都被F-Stack接管用于业务(或服务器本身只有单网卡),其他如SSH登录管理等数据等就必须开启KNI来与内核进行数据交互。
KNI配置
因为开启KNI将对收到所有的数据包按转发策略进行检查,会对性能造成一定的影响,所以在F-Stack中默认配置关闭了KNI选项,如有需要可以在控制文件config.ini
中修改配置开启KNI并设置转发规则。
[kni]
enable=1
method=reject
tcp_port=80
udp_port=53
参数说明:
- enable
参数配置是否开启KNI,设置为1表示开启,设置为0表示关闭,默认值为0
- method
本参数和tcp_port/udp_port参数配合使用,method参数可选accept或reject
当method参数设置为accept时,默认所有数据包都交由F-Stack处理,只将tcp_port/udp_port参数指定的端口的数据包通过KNI转发至系统内核。
当method参数设置为reject时,默认素有的数据包都通过KNI转发至系统内核,只将tcp_port/udp_port参数指定的端口号的数据包交由F-Stack处理。
- tcp_port/udp_port
指定KNI处理的端口号,如有多个端口号用逗号","分隔,多个相连端口号也可以同时设置,如80-90
系统配置
当开启了KNI配置的F-Stack应用程序启动后,需在系统中设置虚拟网络接口并设置IP地址、掩码、MAC地址、路由表等信息才能正常完成F-Stack和内核间的数据交互。
【注意】 如果系统中没有额外的管理网卡,配置虚拟网卡地址的操作需通过执行脚本等方式与F-Stack应用程序一同启动,示例如下。
./start.sh -b /usr/local/nginx_fstack/sbin/nginx -c config.ini
sleep 10
ifconfig veth0 <ipaddr> netmask <netmask> broadcast <broadcast> hw ether <mac addr>
route add -net 0.0.0.0 gw <gateway> dev veth0
# route add -net <ip addr> [gw <gateway>] netmask <netmask> dev veth0 # other route rules
注意事项:
1. KNI创建的虚拟网卡和F-Stack中的用户态协议栈公用同一个网卡收发数据,所以KNI虚拟网卡的网络配置要跟FreeBSD协议的配置相同。
2. 由于F-Stack不支持设置MAC地址,是直接获取物理网卡的MAC地址,并无法设置创建的虚拟网卡的MAC地址,所以在使用`ifconfig`设置虚拟网卡的地址时需要显示指定`hw ether`为物理网卡的实际MAC地址,防止在部分内核中默认是随机值导致无法正常使用KNI。
题图
题图为DPDK官方文档中的KNI示意图 Fig. 21.1 Components of a DPDK KNI Application,
原文地址http://dpdk.org/doc/guides/progguide/kernelnic_interface.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信小程序|Canvas实现绘画直线
- 强大!Nginx 配置在线一键生成“神器”
- Python|进制转换问题
- 数据库|MySQL制作成绩表单视图
- Spark Core——RDD何以替代Hadoop MapReduce?
- k8s基础概念及术语
- msf工具之木马程序制作以及伪装
- 一次服务器沦陷为肉鸡后的实战排查过程!
- 使用 centOS 7 部署前端项目
- PHP rand() 函数随机整数。
- PHP使用htmlspecialchars方法实现像ASP的Server.HTMLEncode一样的效果
- jquery.ajax()怎么把获取来的内容转为JSON,并使用。
- Spring:IOC 控制反转
- Spring:AOP 面向切面编程
- JavaScript进阶教程(5)-一文让你搞懂作用域链和闭包