当前位置:耀景文档网>范文大全 > 公文范文 > 容器网络流量研究教授(8篇)

容器网络流量研究教授(8篇)

时间:2022-11-19 15:25:03 公文范文 来源:网友投稿

容器网络流量研究教授(8篇)容器网络流量研究教授  (19)中华人民共和国国家知识产权局  (12)发明专利申请  (21)申请号  CN202010214685.5(22)申请日  下面是小编为大家整理的容器网络流量研究教授(8篇),供大家参考。

容器网络流量研究教授(8篇)

篇一:容器网络流量研究教授

  (19)中华人民共和国国家知识产权局

  (12)发明专利申请

  (21)申请号

  CN202010214685.5(22)申请日

  2020.03.24(71)申请人

  广西梯度科技有限公司

  地址

  530000广西壮族自治区南宁市洪胜路5号丽汇科技工业园标准厂房综合楼

  (10)申请公布号

  CN111371696A

  (43)申请公布日2020.07.031516-11号房

  (72)发明人

  王伟华;梅进

  (74)专利代理机构

  东莞领航汇专利代理事务所(普通合伙)

  代理人

  高辉

  (51)Int.CI

  权利要求说明书

  说明书

  幅图

  (54)发明名称

  一种在Kubernetes中实现Pod网络流控的方法

  (57)摘要

  本发明公开了一种在Kubernetes中实现

  Pod网络流控的方法,包括步骤1基于Kubernetes集群平台实现的Pod网络流控管理功能,步骤2启动“流控服务端”程序,连接到Kubernetes集群,步骤3通过容器云平台部署Deployment资源步骤4:在Pod运行的宿主节点之上,为Pod配置网络流量控制规则步骤5:判断Pod使用的容器网络类型,随后为Pod中的网

篇二:容器网络流量研究教授

  电子科技大学计算机学院导师及其科研能力介绍

  为方便大家报考我们学校,了解各位导师的学术和科研能力,科大考研网

  www.**

  将提供给大家详细的信息。

  陈雷霆,1966年7月出生,男,现任电子科技大学计算机学院副教授、副院长,主管学院的科研、产业和外事工作,在职博士研究生;现为中国软件行业协会理事,四川省计算机学会理事。主要研究方向:(1)信息安全;(2)网络多媒体与虚拟现实。主要科研项目:国家“863-317-403”项目—综合业务多媒体通讯终端与系统;“八五”军事预研项目激光成像雷达系统;多媒体安全监控系统;“九五”军事预研项目激光防撞雷达系统;总装备部项目军用移动图象采集压缩传输系统;航空科技信息集成处理系统;模拟实战射击训练系统;国家“十五”863信息安全项目等。开设研究生课程:多媒体技术及应用、计算机图形学、软件认证;本科生课程:多媒体技术、数字逻辑。

  --------------------------------------------------------------------------------李毅超,男,1969年6月,硕士,副教授。1997年4月毕业于电子科技大学,获计算机应用硕士学位。现任网络安全基础实验室主任,计算机网络与通信研究室主任,计算机网络与安全技术研究所副所长,兼成都市软件行业协会副秘书长。研究方向为计算机网络与通信、网络信息安全、嵌入式应用。

  参加或主持"恩威网络MIS系统“、“420驻厂军代室光纤网络MIS系统”、“路由器开发”、信产部基金项目“IP电话网关”,成都华易“美视数字录像监控系统”、西部网信“软交换关守和IP电话多功能终端研发”等近10个科研项目,获得四川省科技三等奖1项,省部级科技成果鉴定5项,国家版权局软件著作权2项。出版《计算机网络》教材1本在国内外重要刊物和国际会议上发表论文十余篇。为本科和硕士生开设了若干课程。获得Microsoft、Novell、SCO、Cisco、Compaq等各大公司认证证书和授权讲师资格。

  --------------------------------------------------------------------------------

  蔡洪斌,1988年毕业于华中科技大学,获学士学位,1994年毕业于电子科技大学获硕士学位,2002年获电子科技大学计算机应用技术博士学位。2002年到2003年访问加拿大Concordia大学。参加和主持了多项科研工作,先后获得四川省科技进步三等奖和成都市技术开发二等奖各1项。出版发行著作4部,其中《Java程序设计基础与提高》获四川省优秀图书奖。在国内外重要学术刊物和学术会议上发表论文近20余篇,被EI检索2篇。曾荣获"华威?国腾"奖教金。主要研究领域是网格计算、网络安全、计算机网络技术及其应用和数据库等。

  --------------------------------------------------------------------------------

  崔金钟,1966年9月出生,硕士,高级工程师。目前的主要研究方向是:嵌入式计算机系统及其应用,SOC,计算机控制技术。学习工作经历:1985年9月考入电子科技大学计算机系,1989年7月毕业并获得工学学士学位,毕业后留校任教。1993年开始读在职研究生,1996年4月获硕士学位。2000年晋升为高级工程师。2000年出国在加拿大UBS公司工作,主要研究方向是嵌入式与实时系统。2001年11月回校工作,现担任计算中心主任。主要成果:近几年内,编写了两本书,作为主研人员已完成了项目多项。作为项目负责人和第一主研已完成项目2个,其中“压力参数成组校准系统”项目通过四川省电子厅鉴定,并获四川省教委科技进步三等奖。在研项目“电书Ebook的设计”

  --------------------------------------------------------------------------------

  黄廷祝,64年10月生,教授、博士生导师、应用数学学院院长、计算科学研究所所长.在西安交大计算数学专业获学士、硕士和博士学位.分别于94、97年破格晋升副教授和教授.学术:在国内外重要学术刊物发表科学计算理论和方法、大型矩阵与计算、神经网络与动力系统稳定性等方面论文约80篇,被SCI、EI收录和SCI引用(他引)37篇次,被同行他引约50篇次.获信息产业部科技进步二等奖(主持,99年)、省科技进步三等奖(主持,2001年)、省教委科技进步三等奖(独立).97年被遴选为省跨世纪杰出青年科技学术带头人.长期聘为国内外约20种重要学术刊物的审稿人.曾应邀在香港浸会大学计算机科学系和中科院应用数学所做合作研究和高级访问学者.为西安交大基础科学研究中心学术委员会成员、曾做客座教授,成都信息工程学院兼职教授.为省科技青年联合会理事、省生物数学学会副主任委员等。

  教学:校级优秀主讲教师,历届学生评教优秀,为本科生、研究生开设多门课程。“十五”国家级规划教材作者,出版著作教材6部,获省优秀教学成果一等奖,校优秀教学成果一等奖和优秀教材一等奖.省自考先进工作者.获校一档奖教金、校“教学优秀教师奖”.国家级大学数学教学资源库建设专家组成员.--------------------------------------------------------------------------------

  左志宏,男,1966年出生。1986年毕业于国防科技大学计算机系,获学士学位;1989年毕业于电子科技大学计算机系,获硕士学位;目前是电子科技大学在职博士。

  1989年1月研究生毕业留校工作至今。1992年提讲师,1997年副教授。1997-1998在香港大学进行“汉英翻译”的合作研究。

  留校至今,承担过研究生《计算理论》、《数理逻辑与逻辑程序设计》、《语言编译专题》的教学任务,本科生《形式语言与自动机》、《编译原理》、《数据结构》的教学任务。承担过电科院科研项目《计算机病毒的分析与防治》、《分布式实时语言研究》和《网络环境下计算机病毒的分析与防治》等科研项目。在国家一级刊物发表过论文数篇。

  --------------------------------------------------------------------------------

  顾小丰,男,生于1966年3月,1991年6月研究生毕业于兰州大学数学系计算数学专业,获理学硕士学位,2000年12月由四川省信息产业厅、人事厅评为高级工程师。

  目前主要从事并行计算和网络计算等方面的研究,承担了研究生课程的《计算的复杂性》、《随机过程与排队论》的教学工作。在《计算机研究与发展》等刊物发表论文数篇,在电子工业出版社出版了《离散数学及其应用》教材,编印了《计算的复杂性讲义》。作为主要研究人员,参加并出色完成了“八.五”军事预研基金“关于超立方体拓扑结构中的基础理论研究”;“九.五”军事预研项目“并行算法及其在电子系统中的应用”(获2001年度国防科学技术进步奖二等奖)、电科院军事预研基金“基于消息驱动的可伸缩cluster体系结构及其算法研究”等课题的研究,以及“四川省地方税务办公自动化系统”的研制与推广工作。

  --------------------------------------------------------------------------------

  郝玉洁

  ,女,1961年12月出生

  ,技术职称:副教授。现任计算机学院软件系支部书记。

  1979至1983年在电子科技大学计算机工程专业本科学习,获学士学位。1990至1993年在北方交通大学计算机系硕士研究生,获硕士学位,研究方向:计算机安全。曾先后在西南科技大学信控系计算机教研室、成都信息工程学院计算机系基础教研室任教并任教研室主任。

  曾获得西南工学院1989年“课堂教学演讲比赛优秀奖”;成都信息工程学院1994-1996年度“学院三育人先进个人”光荣称号。成都信息工程学院1999年“课堂教学板书比赛”二等奖。成都信息工程学院2000年聘期二年的“学院优秀中青年教师”。

  2000年底调入电子科技大学计算机学院软件系任教,近年来,一直致力于计算机安全技术,网

  络多媒体领域的研究,并在该领域发表多篇论文。出版教材和外文译著三本

  --------------------------------------------------------------------------------

  黄迪明,教授,获国务院颁发的“政府特殊津贴”专家,加拿大麦克斯特大学计算机科学系访问学者。长期从事计算机学科的教学和科研工作,主持和参加过多项重大和大型科研项目,曾获国家级科技进步二等奖及国家级优秀教学成果奖共3项,省部级科研和教学奖共5项。编著教材七部(其中两部为全国统编教材),发表论文30余篇。主要研究方向为:网络多媒体技术、网络信息安全技术、图形技术。当前在研的主要项目有:通用教育信息平台、基于智能体的入侵控检测技术、通用教育信息平台等。承担过的研究生课程有:图形软件设计、软件技术基础、面向对象程序设计等。

  --------------------------------------------------------------------------------

  陆鑫,男,电子科大计算机学院副教授,硕士生导师。

  1992年硕士毕业于电子科技大学计算机专业。留校至今一直从事计算机领域的教学和科研工作,现在职攻读计算机应用技术博士学位。主要研究领域是信息系统技术、软件工程、嵌入式系统技术等。

  先后从事多门计算机专业课程教学,如计算机控制系统、单片机技术、微机系统与接口、计算机组成原理、互联网技术、信息科学技术导论、高级计算机体系结构、软件需求管理等。负责完成多项大型系统的项目开发,如泸天化企业集团大型MIS系统、大型商业自动化管理MIS系统、成都煤气总公司GIS信息系统、包装容器抗压与堆码微机测控系统等。

  目前,研究方向兴趣为面向对象的软件工程技术、软件需求管理、嵌入式系统技术。在研项目为“高可靠快速实时以太网技术研究”,“家电控制器仿真软件开发平台研制”。2003年本科教学课程为“计算机组成原理”、“信息科学技术导论”,研究生教学课程为“高级计算机体系结构”、“软件需求管理”。

  --------------------------------------------------------------------------------

  雷航,副教授,计算机应用专业博士。

  先后于1985年至1988年和1993年至1997年在电子科技大学攻读硕士和博士学位。现任中国计算机学会抗恶劣环境计算机专委会委员。

  先后承担了国家七五重点攻关项目:“超级中英文显示终端的研制”、电子科技大学青年科学基金项目:“分布式实时软件可靠性建模”、国防科技预研基金项目:“实时软件的超时故障分析及可靠性评价模型的研究”、国防科工委九五预研项目:“实时并发软件可靠性测试评价系统”、“超微内核嵌入式实时操作系统”(获国防科技成果三等奖)、国防科工委十五预研项目:“嵌入式实时操作系统”等项目的主研工作,起草中华人民共和国国家标准:“虚拟终端基本类协议”和“协议实现一致性说明”。

  目前的主要研究方向是:软件可靠性测试和评价技术、实时软件性能评价及优化技术、实时系统软硬件协同设计方法学等。先后在以上研究方向发表学术论文20余篇。

  为硕士研究生开设专业基础课《现代微型计算机结构》,为本科生讲授《计算机组成原理》。

  --------------------------------------------------------------------------------

  刘玓,本人于1983年在成都电讯工程学院计算机系计算机应用专业本科毕业,并留校任教;于1991年在电子科技大学计算机系计算机软件专业硕士研究生毕业。

  曾先后参加国家“六五”、“七五”和“八五”科技攻关项目,并获得机电部科技进步一等奖和

  四川省科技进步一等奖等多项奖励。发表论文多篇及全国统编教材一本。

  本人现从事计算机操作系统,特别是UNIX操作系统及其网络应用方面的工作;曾先后多次参加过

  涉及电信、银行、证券、期货和生产制造等行业的应用系统开发,多次参加和组织实施通用商品软件的开发和应用推广工作,在大型应用软件开发和软件项目管理等方面积累了丰富的经验。

  在教学方面,开始了“UNIX操作系统基础”、“C语言程序设计”、“基于UNIX操作系统的编程技术”

  和“开放式操作系统结构”等课程。

  --------------------------------------------------------------------------------

  傅彦

  副院长

  1962年11月生,计算机科学与工程学院副院长,副教授。于1988年3月毕业于电子科技大学计算机学院,获硕士学位。

  目前主要从事软件开发环境的研究和人工智能方面的研究,承担了计算机学院本科的《离散数学》课程和全校研究生的《人工智能》课程的全部教学工作。先后主持和参与科研项目几十项,发表文章几十篇,著书4本。

  近三年的主要工作如下:在科研方面,参加了《软件开发环境的研究》、《神经网络的动力学行为》(国家自然科学基金)、《计算机远程教学系统建设》等项目的研究与开发。近期在《电子科技大学学报》、《电子高等教育理论与实践》、《成都中医药大学学报》、《电子高教研究》等发表了多篇科研与教学文章。近期先后在电子工业出版社和电子科技大学出版社公开出版了《离散数学及其应用》、《离散数学及其应用习题解吸》、《离散数学基础及其应用》教材。在教学工作方面,成绩突出,荣获电子科技大学首届“优秀主讲教师”称号,并获A级证书。如选了电子科技大学第二期“人才工程”稳定性人才,并在中期检查中获得优秀奖。近期参加了计算机专业主干课程建设和教学改革项目的研究,在2000年--2001年先后获得电子科技大学优秀教学成果一等奖,四川省教育厅优秀教学成果一等奖,全国高等教育部优秀教学成果二等奖。

  --------------------------------------------------------------------------------

  廖建明,男,1963年2月出生,副教授,电子科技大学计算机学院计算机工程与技术系(计算机网络与安全技术研究所)教师。

  1982年7月毕业于重庆大学无线电技术专业,1989年和1996年分别到日本广岛大学计算机研究室和日本千叶大学计算机研究室留学访问。自毕业以来长期从事计算机专业的教学和科研工作。先后主持或参加了大庆油田“试油试采数据采集与无线传输系统的研制”、“计算机热分析数据采集与处理系统的研制”、“塔里木油田油气开发综合管理信息系统与辅助规划决策系统”、“通用考试系统的研制”、“无线信息接收与处理PDA的研制”、电子生产发展专用基金项目“教育网及CAI信息开发”等科研项目,并多次获奖。编写出版了《Internet与Web基础教程》、《计算机网络》、《计算机应用基础》等多部教材。在《电子科技大学学报》、《计算机应用研究》、《分析测试仪器通讯》等杂志发表多篇学术论文。

  目前从事的主要研究方向:嵌入式系统及应用技术;网络信息技术;家庭信息网络技术

  --------------------------------------------------------------------------------

  刘乃琦,男,电子科技大学计算机科学与工程学院教授。出生于1950年9月,四川成都人,毕业于成都电讯工程学院计算机工程专业,留校任教,并随研究生班附读,1985年至1987年作为访问学者于加拿大渥太华卡尔顿大学进修、工作。1988年至1994年任电子科技大学计算机科

  学与工程系副系主任;1994年至2001年任电子科技大学计算机学院副院长、计算机系系主任。

  现为IEEE/ACM(国际电气电子工程师协会/美国计算机协会)会员,中国电子学会会员和计算机学会计算机辅助设计与图形学专业委员会委员,全国高等学校计算机教育研究会副理事长、全国高职高专计算机专业教材编委会副主任、四川省公安厅信息领导小组顾问,四川计算机应用工程学会理事等多种职务。

  从事高等学校教学和管理工作近30年,先后担任"计算机操作系统"、"计算机图形学"、"软硬件开发技术"、"图形处理技术"、"计算机安全技术"、"计算机硬件技术与系统集成"等硕士研究生和本科生课程教学。先后参与完成多项计算机应用科研项目,曾获得部省级一、二等奖,机电部青年教师教书育人优秀奖和校级教学优秀、管理优秀和优秀实验等多项奖励。发表论文八十余篇,先后出版《混合语言编程技术》、《C语言问题及习题解答》、《计算机图形技术基础》、《操作系统原理及应用》、《计算机操作系统》、《计算机专业英语》、《互联网络技术》、《实用加解密技术》、《信息安全》等教材书籍十余本。专业方向为计算机信息系统,系统与网络安全技术,图形与多媒体技术等。

  --------------------------------------------------------------------------------

  刘心松

  教授

  博导

  1940-12-15男国家科技进步奖发明奖仪器仪表组特邀评审委员,电子部科技进步奖计算机和软件组资格评审委员,中国计算机学会系统结构专委会副主任委员,四川省通信计算机学科高级工程师评审组组长,IEEProceedingsofComputer&DigitalTechniques特邀审稿人,机电部有突出贡献专家,享受国务院特殊津贴,获省部级科技成果一、二、三等奖,国际文化奖,科学大会奖,国家科技优秀表彰奖,正式发表学术论文100余篇。

  研究领域:

  宽带网络与通信,分布并行处理,计算机网络及通信,网络软件与操作系统

  --------------------------------------------------------------------------------

  卢显良

  1943年12月生。

  1967年毕业于成都电讯工程学院。现任电子科技大学计算机学院教授,博士生导师。中国计算机学会高级会员。1981年至1983年在美国伊里诺大学(UniversityofIllinoisatUrbana-Champaign)作访问学者。1983年以来主要在电子科技大学从事计算机教学和科研工作。1990年至1993年受机电部计算机司聘请任总设计师在北京中国计算机软件与服务总公司负责COSA系统软件平台开发。主持和参加过多项国家“六五”、“七五”、“八五”和“九五”重点科技攻关项目。先后获国家科技进步二等奖、三等奖各一项,省部科技进步特等奖、一等奖多项。出版发行著作四本,并在已国内外学术刊物和学术会议发表论文六十余篇。主要研究领域是计算机操作系统,计算机网络及分布式系统。目前承担国防973,国防跨行业预研基金,电子信息发展基金等多项科研任务。

  --------------------------------------------------------------------------------

  罗克露,女,1948年7月生,共产党员,电子科技大学计算机学院计算机工程与技术系主任,教授,硕士生导师

  1982年毕业于成都电讯工程学院计算机系计算机本科专业,获工学学士学位。由国家教委公派,于1985年~1989年先后在意大利罗马大学信息与系统系、罗马SIELTE通信公司计算机开发部研修多微处理机系统内部节点通信技术与CAD技术等。1989年回国至今,在电子科技大学计算机学院任教。

  为研究生、本科生主讲多门课程。主持开发多项科研项目与教改项目,“计算机专业主干课程建设与教学改革”项目2001年荣获全国教学成果二等奖、四川省教学成果一等奖、电子科技大学教学成果一等奖。发表多篇论文。参编与主编多本教材,其中三本为全国统编教材,《计算机组成原理》(修订本)1998年获得教育部科技进步奖教材类三等奖。

  主要研究方向为嵌入式实时系统及应用。

  --------------------------------------------------------------------------------

  罗蕾,教授,主要从事嵌入式系统软件(操作系统、网络、开发系统等)和应用软件的研究、开发及教学工作。

  承担并主持了多项嵌入式系统软件研究开发课题,主要有:“机载嵌埋式实时操作系统CRTOS/386R”、“32位嵌埋式实时操作系统CRTOS/386P”、“NTRTES:WindowsNT实时特性实验系统”、“超微内核嵌入式实时操作系统”、“宽带边缘路由器”及863软件重大专项“智能手机嵌入式实时软件平台”等。其中“军用可剪裁实时操作系统(嵌埋型)”,获得1996年电子工业部科技进步二等奖。“超微内核嵌入式实时操作系统”,获得2001年国防科技三等奖。发表论文十余篇。

  --------------------------------------------------------------------------------

  罗惠琼

  教授

  从1975年至今一直在电子科技大学计算机学院从事教学和科研工作,共计27年教龄,曾经为本科生、研究生和博士生讲授过多种课程,受到学生好评,并多次获得校教学奖,获得国家和四川省的教学成果奖。参加过多项科研项目,并多次获得省市科技进步奖,也发表过多篇论文。四川省有突出贡献专家。特别是近十年来主要从事网络通信方面的研究。

  --------------------------------------------------------------------------------

  秦志光,男,1956年2月出生,四川隆昌人。1989年7月在湖南湘潭大学获理学硕士学位,1996年3月在电子科技大学获工学博士学位。1983年10月加入中国共产党。现在电子科技大学计算机科学与工程学院从事科研和研究生教学工作。教授、博士生导师、硕士生导师。现任电子科技大学计算机网络与安全技术研究所所长,电子科技大学IBM技术中心主任,新型计算机应用技术重点实验室主任,电子科技大学电子商务实验室主任。IBM认证专家,Lotus认证教师、认证专家。四川省科技青年联合会理事,国际电子电器工程师学会(IEEE)会员,国家信息安全基地(西部)专家,四川省软件企业认定专家组成员,四川省软件行业协会常务理事,成都市软件行业协会专家。

  1994年以来,先后在《计算机辅助设计与图形学学报》、《应用科学学报》、《计算机应用》、《微型计算机》等各种重要期刊或学术会议上发表学术论文30多篇、获得四川省和成都市科技进步三等奖各一项、负责研究开发的应用软件有两项通过国家软件评测中心评测和中国实验室国家认可。主持和参加过国家“85”科技攻关项目“工作站基础图形软件”;高校基金项目“开放系统的理论研究”;中国工程物理研究院基金项目“Internet网络安全”;电子科技大学“211工程”建设项目“校长办公室办公自动化系统”;四川省科技攻关项目“网络信息防护技术研究”,“不停车收费软件研究与开发”;国家863计划项目“2002AA”;国家863计划引导项目“2002AA”;国家计算机网络与信息安全管理中心项目“2001-研3-022”和“密罐技术研究”。研究领域是计算机开放系统与网络安全性、信息系统安全、ITS(智能交通)、电子商务。

  --------------------------------------------------------------------------------

  桑楠,1987年毕业于四川大学计算机软件专业;毕业后在电子科技大学任教,现主要从事嵌入式/实时操作系统、开发环境及其应用、实时软件工程的研究。

  在科研方面,参与了10多项国家和省部级项目,其中已完成8项(两项作为项目第一负责人),主要包括:分布式软件调试工具、分布式实时操作系统、RTEMS嵌入式开发环境(嵌入式软件开发环境GNU/RTEMS分析与研究)、嵌入式实时操作系统、信息家电嵌入式软件基本开发平台技术、嵌入式软件新型开发平台体系结构、科技局办公自动化系统、离散数学智能辅

  助教学系统、编译原理教学辅助系统等。

  在教学方面,目前主要讲授本科和研究生课程:嵌入式系统应用开发技术、软件工程专题、嵌入式系统设计等。

  此外,还发表了多篇学术论文,编写了一本教材(嵌入式系统原理及应用开发技术)。

  --------------------------------------------------------------------------------

  佘堃,参与和主持各类项目10多项,其中担任课题第一负责人7项,包括国家863项目和国家十五军事预研项目各一项,鉴定项目共6项。在代表学校和学院参与的国家金卡工程项目中,本人作为最重要角色参与了CMM认证的全过程,以优异成绩通过了CMM2级软件企业认证,并培养了一个科研梯队,梯队骨干都是留校博士生。

  2001.12,学校与国内信息安全领头企业成都卫士通信息产业股份公司合作,成立了电子科大---卫士通信息安全联合实验室,本人担任常务副主任,主持该实验室的日常工作。

  本人在在国内一级刊物上已第一作者发表文章共4篇,E1收入2篇,核心刊物上以第一作者发表文章10篇,国内会议刊物以第一作者发表5篇。

  --------------------------------------------------------------------------------

  孙世新教授,1940年3月生,湖北孝感县人,汉族,中共党员。电子科技大学计算机学院教授,计算机应用技术博士生导师,国务院政府特殊津贴专家,第十届成都市政协委员,全国并行计算专业委员会委员。1966年毕业于四川大学数学系,1984年至1987年在法国格勒诺贝尔第一大学计算机与应用数学研究所作访问学者兼客座研究员,1990年又分别赴意大利罗马大学和法国格勒诺贝年尔第一大学讲学与工作半年,1997年2月赴香港科技大学计算机系访问与工作,1999年9月赴法国格勒诺贝尔第一大学和贡比涅大学作访问研究,2000年11月赴香港和马来西亚作学术访问,2001年6月到7月赴美国、加拿大作学术访问。

  主要从事计算机科学理论的研究与教学工作,主要研究方向为网络计算技术、并行/分布式计算及其应用、信息压缩技术、数值计算与组合算法等。主持参与“九五”军事预研项目、国家高性能计算基金、863计划等多项课题研究。自88年至今,在国内外著名期刊杂志发表论文60余篇,其中近20余篇被国际著名的三大检索系统SCI、EI、ISTP以及美国的著名检索杂M.R.和西德的“数学文摘”等收录评论,出版《组合数学》教材一部。获省科技进步三等奖(唯一作者),国防科技二等奖(第一主研),校优秀教材奖,优秀论文奖和摩托罗拉教师奖教金和托普基础课教师奖多项。在1995年带头为电子科技大学成功申请计算机科学理论硕士点一个,参与申请计算机体系结构博士点一个。

  --------------------------------------------------------------------------------

  谭浩,男,1970年7月生,博士,副教授。1999年毕业于电子科技大学,获计算机应用博士学位。毕业后留校从事科研、教学工作,并担任了开放系统与中间件技术研究室主任。自参加工作以来,在科研、教学等多项工作中取得出色成绩。在科研方面,作为项目负责人,主持开发了“计算机会议系统的设计与实现”研究项目。该项目通过四川省信息产业厅鉴定,并在贵州省军区和成都军区成功应用。作为主研,参与了多个“九五”国防科技预研项目并做出了突出贡献。其中一个项目通过了信息产业部的鉴定,并获得国防科技三等奖。此外,在国内外重要刊物上发表论文十数篇,其中多篇被EI、ISTP检索,具有重要的学术价值和实用价值。在教学方面,先后为博士和硕士生开设了若干课程。

  --------------------------------------------------------------------------------

  唐雪飞,男,1964年生,博士,副教授。1996年4月毕业于电子科技大学计算机学院,获博士学位。

  译著两部,近70万字;发表学术论文30余篇;通过省部级鉴定项目10余项。目前主讲的课程是《软件工程》,主要研究领域:开放分布式计算,数据融合和网络多媒体应用。

  --------------------------------------------------------------------------------

  汪文勇

  北京航空航天大学计算机系,计算机专业本科,工学学士。电子科技大学微型计算机研究所,计算机专业硕士,工学硕士。

  工作经历

  1991-1994电子科技大学,微型计算机研究所一室,先后任助教、讲师。

  1994借调国家教育委员会科技司,作为国家教育委员会信息化领导小组技术秘书,参与中国教育和科研计算机网(CERNET)示范工程的立项组织和项目论证工作,直到同年十二月该项目被国家计划委员会批准。

  1995-1997电子科技大学,信息网络管理办公室副主任。获副教授职称。

  1997借调国家教委,技术组负责人,参加国家教委科技工作会议,负责实施和维护会议的信息系统,包括会议管理系统、互联网接入和大屏幕演示。

  1999借调电子工业部,参与国家信息网络总体规划。

  1997-2001电子科技大学,网络中心副主任。

  2001-电子科技大学计算机学院教师

  主要成果

  出版专著7本,获电子部优秀教材一等奖一次;发表论文10余篇;获部省级奖5次。

  --------------------------------------------------------------------------------

  朱清新博士、教授、博导,美国数学学会(AMS)会员,中国计算机学会高级会员,1982年1月四川师范大学数学系本科毕业获学士学位,1984年7月北京理工大学应用数学专业获硕士学位,1984年8月起任兵器工业第209研究所工程师、副研究员,从事数字图象处理与视频信号编码、高精度稳定平台计算机控制系统等研究工作,作为技术骨干参加了国防科工委7712工程并获三等奖,1993年5月毕业于渥太华大学应用数学和电子工程系控制论专业获博士学位,1993年5月至1996年3月在渥太华大学电子工程系和加拿大卡尔顿大学计算机学院从事博士后研究并攻读计算机硕士二学位,方

  向为网络流量工程与拥塞控制,最优控制与最优搜索策略与仿真,1996年3月至1997年11月任加拿大北方电讯公司和OmniMark高级研究员,1998年3月应聘回国到电子科技大学计算机学院工作,1999年聘为教授、2001年聘为博士生导师,2002年9月至2003年3月赴加拿大蒙特利尔Concordia大学计算机系访问研究,方向为计算机视觉和模式识别。现任计算机学院学术委员会主任,网络多媒体技术与虚拟现实研究室主任,计算机网络与安全技术研究所所长。主要研究领域为:计算机图形与机器视觉、信息安全、网络通信、最优控制与最优搜索。

篇三:容器网络流量研究教授

  IT技术进阶:Docker容器的四种网络模式

  docker容器技术可谓是炽手可热,docker不仅仅改变了传统软件服务的交付流程,更是为云计算和微服务大规模集群管理部署,提供了强有力的技术支撑。当今各大公司企业也是把容器化技术作为不可或缺的技术战略。

  Docker是一个开源的应用容器引擎,基于

  Go语言

  并遵从Apache2.0协议开源。

  Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似

  iPhone的app),更重要的是容器性能开销极低。

  Docker容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装Docker引擎的服务器上,也可以实现虚拟化。

  随着云计算的飞速发展以及企业需求的多样化,Docker容器技术成为云计算人才必备的技能之一。很多人想要快速掌握Docker容器技术,接下来就给大家讲解Docker容器的四种网络模式。

  1、closedcontainer封闭式网络模式

  没有网络协议栈的通信。

  使用none模式,Docker容器拥有自己的workNamespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo网络接口。需要我们自己

  为Docker容器添加网卡、配置IP等。

  2、bridgedcontainer桥接式网络模式

  各个容器之间网络协议栈单独分离。

  当Docker启动时,会自动在主机上创建一个docker0虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机,它会在挂载到它的网口之间进行转发。同时,Docker随机分配一个本地未占用的私有网段(在

  RFC1918中定义)中的一个地址给docker0接口。

  当创建一个Docker容器的时候,同时会创建了一对vethpair接口。这对接口一端在容器内,即eth0;另一端在本地并被挂载到docker0网桥,名称以veth开头。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker就创建了在主机和所有容器之间一个虚拟共享网络。

  3、joinedcontainer联合挂载式网络模式

  容器之间可以共享网络协议栈,即可以通过套接字来进行通信。

  这个模式指定新创建的容器和已经存在的一个容器共享一个workNamespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享

  IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

  4、opentainercontainer开放式网络模式

  与主机共享网络协议栈。

  Host模式使用是在容器启动时候指明--workhost,此时容器共享宿主机的workNamespace,容器内启动的端口直接是宿主机的端口,容器不会创建网卡和IP,直接使用宿主机的网卡和IP,但是容器内的其他资源是隔离的,如文件系统、用户和用户组。直接使用宿主机网络。同样启动一个nginx,此时共享主机网络,根据情况来使用,这样子也不用做端口转发,网络传输效率会比较高。

篇四:容器网络流量研究教授

  容器云平台网络架构设计及优化

  目录

  1.

  容器平台网络模型....................................................................................................................................................................................11.1容器网络概述..............................................................................................................................................................................11.2容器网络分类介绍......................................................................................................................................................................21.2.1协议栈......................................................................................................................................................................21.2.2穿越方式..................................................................................................................................................................21.2.3隔离方法..................................................................................................................................................................31.3总结.............................................................................................................................................................................................42.

  基于Docker网络基础和实现原理........................................................................................................................................................43.

  Kubernetes网络场景分析....................................................................................................................................................................63.1容器到容器的通信......................................................................................................................................................................63.2Pod之间的通信.........................................................................................................................................................................3.3Pod到Service之间的通信....................................................................................................................................................3.4外部到内部的访问....................................................................................................................................................................113.5总结...........................................................................................................................................................................................124.

  Kubernetes网络组件介绍.................................................................................................................................................................134.1Kubernetes网络框架CNI.......................................................................................................................................................134.2CNI支持的开源组件................................................................................................................................................................134.2.1Flannel.....................................................................................................................................................................................134.2.2OVS......................................................................................................................................................................154.2.3Calico....................................................................................................................................................................154.2.4Contiv...................................................................................................................................................................14.3总结对比..................................................................................................................................................................................1容器平台的网络架构实践.......................................................................................................................................................................15.1某金融企业使用OpenShift(基于Kubernetes的商业版本)实现其业务上云

  .................................................................15.1.1整体网络架构图.....................................................................................................................................................15.1.2传统应用访问策略................................................................................................................................................195.1.3数据库访问方案及防火墙策略..............................................................................................................................205.2某金融企业两第三中心容器云网络架构.................................................................................................................................21优化实践........................................................................................................................................................................................22Ⅱ

  1.1容器网络概述

  1容器平台网络模型

  与传统的虚拟化相比,容器其生命周期更短、数量密度更高、集群变更速度更快。基于这些特性,容器平台网络就必须对集群节点之间的高速通信进行充分的考量。除此之外,在企业级的容器云平台上,承载众多租户的计算负载之间资源的安全隔离,也必须要考虑到的因素。

  显而易见,传统的物理网络架构无法满足容器平台高灵活性的需求,容器平台网络构建必须要有一种崭新的设计架构来满足,这便推动了容器平台网络设计的发展。

  容器网络发展到目前,已经形成了Docker主导的CNM模型和Google、CoreOS、Kubernetes主导的CNI模型两种模型共存的情况。CNM和CNI并不是网络实现,他们是网络规范和网络体系。从研发的角度来

  看就是一些接口,主要是和网络管理相关的问题。容器平台的网络方案,通常可以从协议栈、穿越方式、隔离方法三个维度去设计方案:

  图1网络架构示意图

  协议栈:

  ◎二层(桥接、ARP+MAC)

  ◎三层(路由转发)

  ◎二层+三层(节点内部二层转发、跨节点三层转发)

  穿越方式:

  ◎Overlay(隧道穿越底层基础设施)

  ◎Underlay(直接穿越底层基础设施)

  隔离方法:

  ◎VLAN

  ◎VXLAN

  1.2容器网络分类介绍

  1.2.1协议栈

  二层解决方案,常见于传统机房或者虚拟化场景中,针对ARP和MAC(桥接模式)学习,广播风暴是这个方案最核心要解决的问题。众所周知,二层广播,对整个集群中节点的数量也会有严格的限制。三层解决方案一般是基于BGP协议实现路由转发,通过自主学习完善整个数据中心的路由状态。这个方案的优势是IP穿透性,可以实现IP网络透传。因为基于IP,所以其优势在于规模性,具有非常优秀的扩展性。但在实际使用过程中,受限于各个企业自身网络安全的考量,例如生产网和开发测试网隔离,或者网络本身不支持BGP,那么这个方案就受限了。二层+三层的方案,集成了前面两种方案的优势(既解决了二层规模性扩展的问题,又解决三层网络隔离受限的问题),正成为容器云网络场景下首选的协议栈层级的解决方案。

  1.2.2穿越方式Underlay网络

  提到Underlay网络,就必须从以太网说起,以太网从最开始设计出来就是一个分布式网络,没有中心的控制节点,网路中的各个设备之间通过协议传递的方式学习网络的可达信息,由每台设备自己决定要如何转发,这直接导致了没有整体观念,不能从整个网络的角度对流量进行调控。由于要完成所有网络设备之间的互通,就必须使用通用的语言,这就是网络协议,RFC就是网络协议的法律,相当于国际法,各个设备供应商遵从国际法行事,就基本保证了整个网络世界的正常运行。Underlay就是当前数据中心网路基础转发

  架构的网络,只要数据中心网络上任意两点路由可达即可,指的是物理基础层。我们可以通过物理网络设备本身的技术改良、扩大设备数量、带宽规模等完善Underlay网络,其包含了一切现有的传统网络技术。

  Overlay网络

  Overlay技术可以分为网络Overlay,主机Overlay和混合式Overlay三大类。网络Overlay是指通过控制协议

  对边缘的网络设备进行网络构建和扩展,也就是本文所讲的Overlay网络技术。Overlay网络技术多种多样,一般采用TRILL、VXLAN、GRE、NVGRE等隧道技术。TRILL(TransparentInterconnectionofLots

  ofLinks)

  技术是电信设备厂商主推的新型环网技术;NVGRE(NetworkVirtualizationusingGenericRoutingEncapsu-lation)STT(StatelessTransportTunnelingProtocol)是IT厂商主推的Overlay技术;以及大家非常熟悉的VXLAN(Virtual

  Extensible

  LAN)等基于隧道的封装技术。由于这些也都是新增的协议,均需要升级现有网络设备才能支持。Overlay网络中应用部署的位置将不受限制,网络设备可即插即用、自动配置下发,自

  动运行,Overlay网络业务变化,基础网络不感知,并对传统网络改造极少,最为重要的是虚拟机和物理服

  务器都可以接入Overlay网络中。

  1.2.3根据基础设施划分

  VLAN(VirtualLocalAreaNetwork)意为虚拟局域网,是在交换机实现过程中涉及到的概念,由802.1Q标准所定义。由于交换机是工作在链路层的网络设备,连接在同一台交换机的终端处于同一个三层网中,同时也处于同一个广播域。当交换机接入较多的终端时,任意一台终端发送广播报文时(例如:ARP请求),报文都会传遍整个网络。对于规模较大的组网场景,广播报文的泛滥对于网络通信将会造成较大的影响。VLAN技术为这一问题提供了解决方案,VLAN将同一网络划分为多个逻辑上的虚拟子网,并规定当收到广播报文时,仅仅在其所在VLAN中进行广播从而防止广播报文泛滥。VLAN技术在链路层的层次中实现了广播域的隔离。

  随着大数据、云计算技术的兴起以及虚拟化技术的普及,VLAN技术的弊端逐渐显现出来,具体表现为

  如下3个方面:

  (1)

  虚拟化技术的发展促使大数据、云计算技术公司采用单个物理设备虚拟多台虚拟机的方式来进行组网,随着应用模块的增加,对于支持VLAN数目的要求也在提升,802.1Q标准中的最多支持4094个VLAN的能力已经无法满足当下需求。

  (2)

  公有云提供商的业务要求将实体网络租借给多个不同的用户,这些用户对于网络的要求有所不同,而不同用户租借的网络有很大的可能会出现IP地址、MAC地址的重叠,传统的VLAN仅仅解决了同一链路层网络广播域隔离的问题,而并没有涉及到网络地址重叠的问题,因此需要一种新的技术来保证在多个租户网络中存在地址重叠的情况下依旧能有效通信的技术。

  (3)

  虚拟化技术的出现增加了交换机的负担,对于大型的数据中心而言,单台交换机必须支持数十台以上主机的通信连接才足以满足应用需求,而虚拟化技术使得单台主机可以虚拟化出多台虚拟机同时运行,而每台虚拟机都会有其唯一的MAC地址。这样,为了保证集群中所有虚机可以正常通信,交换机必须保存每台虚机的MAC地址,这样就导致了交换机中的MAC表异常庞大,从而影响交换机的转发性能。

  基于以上需求,VXLAN技术被提出。

  VXLAN技术是网络Overlay技术的一种实现,对于Overlay技术,笔者的理解是:在基于物理网络拓扑的基础上通过一定的技术来构建虚拟的、不同于物理网络拓扑的逻辑网络,而物理网络的拓扑结构对于Over-

  lay终端而言是透明的,终端不会感知到物理网络的存在,而仅仅能感知到逻辑网络结构。对于终端的视角,网络的情况和直接通过物理设备实现逻辑拓扑的效果是相同的。VXLAN技术可以基于三层网络结构来构建二层虚拟网络,通过VLAN技术可以将处于不同网段网络设备整合在同一个逻辑链路层网络中,对于终端用户而言,这些网络设备似乎“真实地”部署在了同一个链路层网络中。

  相比VLAN技术,VXLAN技术具有以下的优势:

  (1)

  24位长度的VNI字段值可以支持更多数量的虚拟网络,解决了VLAN数目上限为4094的局限性的问题。

  (2)

  VXLAN技术通过隧道技术在物理的三层网络中虚拟二层网络,处于VXLAN网络的终端无法察觉到VXLAN的通信过程,这样也就使得逻辑网络拓扑和物理网络拓扑实现了一定程度的解耦,网络拓扑的配置对于物理设备的配置的依赖程度有所降低,配置更灵活更方便。

  (3)

  VLAN技术仅仅解决了二层网络广播域分割的问题,而VXLAN技术还具有多租户支持的特性,通过VXLAN分割,各个租户可以独立组网、通信,地址分配方面和多个租户之间地址冲突的问题也得到了解决。

  1.3总结

  通过本章的学习,可以初步了解容器网络相关的基础概念,主要涉及到了容器网络的协议栈、穿越方式以及隔离方式。针对协议栈,到底是采用二层互通,还是采用三层互通,还是结合两种方式的优点整合一个综合的方式取决于业务场景;针对穿越方式,是采用传统的Underlay网络,还是基于SDN的Overlay网络,和客户现场情况,以及硬件设备支持的情况都有比较大的关联;同样,隔离方式采用VLAN还是VXLAN,也和场景强相关。由此可见,容器云网络的设计,需要因地制宜,因材施教,从客户需求以及现场情况发出,才能制定出一个完善的解决方案。

  2基于Docker网络基础和实现原理

  Docker网络方案基于OpenStack平台网络解决方案,在不断的摸索中,形成了自己的一套网络模型。Docker网络在整个Docker技术栈中的位置如图:

  图2Docker生态技术栈

  在容器网络项目探索中,随着容器的发展,容器网络的发展也出现了分歧。主要分为两派,一个是Docker原生的CNM(ContainerNetworkModel),另一个是兼容性更好的CNI(ContainerNetworkInter-face)。CNI就是后来为Kubernetes等容器平台广泛推崇使用的接口技术,后面的章节会详细讲述。这里,我们简要介绍CNM。

  原先Docker的网络相关的代码是直接在Docker中的,网络功能也比较简单,对网络的诟病也是比较多。随着Docker越来越向平台化发展,将功能组件逐渐从Docker中解耦,Docker从1.7把网络相关的代码从Docker的代码中剥离出来新建了一个Libnetwork项目,引入了CNM的网络模型。

  图3CNM(ContainerNetworkModel)

  CNM模型下的Docker网络模型如上所示。它由Sandbox,Endpoint,Network三种组件组成。注意,该模型只是规定了三种组件各自的作用,他们都有各自的具体实现方式。Sandbox:Sandbox包含了一个

  Con-tainer的网络相关的配置,如网卡Interface,路由表等。Sandbox在Linux上的典型实现是

  Networknamespace。在Linux系统上的Docker环境中,Container,Networknamespace,Sandbox这三者是绑定在一起的。一个Sandbox可以包含多个Endpoint,这些Endpoint可以来自多个

  Network。

  Endpoint:Sandbox加入

  Network的方式是通过

  Endpoint完成的。Endpoint的典型实现方式是

  Vethpair,每个

  Endpoint都是由某个

  Network创建。创建后,它就归属于该Network。同时,Endpoint还可以加入一个Sandbox。加入后,相当于该Sandbox也加入了此Network。

  Network:Network的一种典型实现是Linuxbridge。一个Network可以创建多个Endpoint。将这些Endpoint加入到Sandbox,即实现了多个Sandbox的互通。

  总结起来:如果要想两个Container之间可以直接通信,那么最简单的办法就是由一个Network创建两个Endpoint,分别加入这两个Container对应的Sandbox。

  注意:不同Network之间默认的隔离性是docker通过设置Iptables完成的,通过改变Iptables的设置,可以使得两个Network互通。

  标准的Docker网络支持以下

  4类网络模式:

  host模式:使用--net=host指定

  container模式:使用--net=container:Name_or_ID指定none模式:使用--net=none指定

  bridge模式:使用--net=bridge指定,设为默认值

  桥接模式是最常见的Docker容器网络类型。在桥接模式下,Docker会为每个容器分配IP地址及创建虚拟以太网网卡对(Veth)。所有的容器都被连接到Docker在主机绑定的桥接设备上。被连接到同一个桥接设备的所有容器,都可以实现互联互通。如果容器要对外界提供服务,则用户需要将容器内的服务端口与宿主机的某一段口绑定。这样所有访问苏主机目标端口的请求都将通过Docker代理转发到容器的服务端,最终到达应用。

  除了桥接模式,Docker也支持主机(host)模式,让容器直接使用宿主机的网络设备。宿主机模式使得容器占用宿主机的端口资源,而且要求容器具有更高的权限,因此只有特殊需求的容器,才会使用这种模式,如OpenShift集群中的Router组件。Router主机需要监听计算节点上的端口,以接受外部的请求,因此Router组件的Pod的容器网络为主机模式。

  本章节主要介绍了Docker网络的情况,从Docker整个生态栈入手,分析了基于单机和集群两种不同场景的Docker网络,着重分析了在单机模式下Docker网络的情况(host/bridge/none/container)。

  Kubernetes网络场景分析

  在实际的业务场景中,业务组件之间的关系十分复杂,特别是微服务概念的提出,应用部署的粒度更加细小和灵活。为了支持业务应用组件的通信联系,Kubernetes网络的设计主要致力于解决以下场景:

  (1)紧密耦合的容器到容器之间的直接通信;

  (2)抽象的Pod到Pod之间的通信;

  (3)Pod到Service之间的通信;

  (4)集群外部与内部组件之间的通信;

  3.1容器到容器的通信

  在同一个Pod内的容器(Pod内的容器是不会跨宿主机的)共享同一个网络命名空间,共享同一个Linux协议栈。所以对于网络的各类操作,就和它们在同一台机器上一样,它们甚至可以用localhost地址访问彼此的端口。这么做的结果是简单、安全和高效,也能减少将已经存在的程序从物理机或者虚拟机移植到容器

  的难度。

  如图4中的阴影部分就是Node上运行着的一个Pod实例。容器1和容器2共享了一个网络的命名空间,共享一个命名空间的结果就是它们好像在一台机器上运行似的,它们打开的端口不会有冲突,可以直接用Linux的本地IPC进行通信。它们之间互相访问只需要使用localhost就可以。

  图4容器到容器间通信

  3.2Pod之间的通信

  每一个Pod都有一个真实的全局IP地址,同一个Node内的不同Pod之间可以直接采用对房Pod的IP地址通信,而不需要使用其他发现机制,例如DNS、Consul或者etcd。Pod既有可能在同一个Node上运行,也有可能在不用的Node上运行,所以通信也分为两类:同一个Node内的Pod之间的通信和不同Node上的Pod之间的通信。

  1)同一个Node内的Pod之间的通信

  如图,可以看出,Pod1和Pod2都是通过Veth连接在同一个Docker0网桥上的,它们的IP地址IP1、IP2都是从Docker0的网段上自动获取的,它们和网桥本身的IP3是同一个网段的。另外,在Pod1、Pod2的Linux协议栈上,默认路由都是Docker0的地址,也就是说所有非本地的网络数据,都会被默认发送到Docker0网桥上,由Docker0网桥直接中转,它们之间是可以直接通信的。

  图5同一个Node内的Pod关系

  2)不同Node上的Pod之间的通信

  Pod的地址是与Docker0在同一个网段内的,我们知道Docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行,因此要想实现位于不同Node上的Pod容器之间的通信,就必须想办法通过主机的这个IP地址来进行寻址和通信。另外一方面,这些动态分配且藏在Docker0之后的所谓“私有”IP地址也是可以找到的。Kubernetes会记录所有正在运行Pod的IP分配信息,并

  将这些信息保存在etcd中(作为Service的Endpoint)。这些私有IP信息对于Pod到Pod的通信也是十分重要的,因为我们的网络模型要求Pod到Pod使用私有IP进行通信。之前提到,Kubernetes的网络对Pod的地址是平面的和直达的,所以这些Pod的IP规划也很重要,不能有冲突。

  综上所述,想要支持不同Node上的Pod之间的通信,就要达到两个条件:

  (1)在整个Kubernetes集群中对Pod分配进行规划,不能有冲突;

  (2)找到一种办法,将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问。

  根据条件1的要求,我们需要在部署Kubernetes的时候,对Docker0的IP地址进行规划,保证每一个

  Node上的Docker0地址没有冲突。我们可以在规划后手工分配到每个Node上,或者做一个分配规则,由安

  装的程序自己去分配占用。例如Kubernetes的网络增强开源软件Flannel就能够管理资源池的分配。

  根据条件2的要求,Pod中的数据在发出时,需要有一个机制能够知道对方Pod的IP地址挂在哪个具体的Node上。也就是说要先找到Node对应宿主机的IP地址,将数据发送到这个宿主机的网卡上,然后在宿主

  机上将相应的数据转到具体的Docker0上。一旦数据到达宿主机Node,则哪个Node内部的Docker0便知道如何将数据发送到Pod。

  具体情况,如下图所示。

  图6跨Node的Pod通信

  在图6中,IP1对应的是Pod1,IP2对应的是Pod2。Pod1在访问Pod2时,首先要将数据从源Node的eth0发送出去,找到并到达Node2的eth0。也就是说先要从IP3到IP4,之后才是IP4到IP2的送达。

  3.3Pod到Service之间的通信

  为了支持集群的水平扩展、高可用,Kubernetes抽象出Service的概念。Service是对一组Pod的抽象,它会根据访问策略(LB)来访问这组Pod。

  Kubernetes在创建服务时会为服务分配一个虚拟的IP地址,客户端通过访问这个虚拟的IP地址来访问服务,而服务则负责将请求转发到后端的Pod上。这个类似于反向代理,但是,和普通的反向代理有一些不同

  :首先它的IP地址是虚拟的,想从外面访问需要一些技巧;其次是它的部署和启停是Kubernetes统一自动管理的。

  Service在很多情况下只是一个概念,而真正将Service的作用落实的是背后的kube-proxy服务进程。在Kubernetes集群的每个Node上都会运行一个kube-proxy服务进程,这个进程可以看作Service的透明代理兼负载均衡器,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。对每一个TCP类型的KubernetesService,kube-proxy都会在本地Node上建立一个SocketServer来负责接收请求,然后均匀发送到后端某个Pod的端口上,这个过程默认采用RoundRobin负载均衡算法。Kube-proxy和后端Pod的通信方式与标准的Pod到Pod的通信方式完全相同。另外,Kubernetes也提供通过修改Service的service.spec.-sessionA?nity参数的值来实现会话保持特性的定向转发,如果设置的值为“ClientIP”,则将来自同一个ClientIP的请求都转发到同一个后端Pod上。此外,Service的ClusterIP与NodePort等概念是kube-proxy通过Iptables和NAT转换实现的,kube-proxy在运行过程中动态创建与Service相关的Iptables规则,这些规则实

  现了ClusterIP及NodePort的请求流量重定向到kube-proxy进程上对应服务的代理端口的功能。由于Iptables机制针对的是本地的kube-proxy端口,所以如果Pod需要访问Service,则它所在的那个Node上必须运行kube-proxy,并且在每个Kubernetes的Node上都会运行kube-proxy组件。在Kubernetes集群内部,对ServiceClusterIP和Port的访问可以在任意Node上进行,这个因为每个Node上的kube-proxy针对该Service都设置了相同的转发规则。

  综上所述,由于kube-proxy的作用,在Service的调用过程中客户端无需关心后端有几个Pod,中间过程的通信、负载均衡及故障恢复都是透明的,如下图所示。

  图7Service的负载均衡转发

  访问Service的请求,不论是用ClusterIP+TargetPort的方式,还是用节点机IP+NodePort的方式,都会被节点机的Iptables规则重定向到kube-proxy监听Service服务代理端口。Kube-proxy接收到Service的访问请求后,会如何选择后端Pod?

  首先,目前kube-proxy的负载均衡只支持RoundRobin算法。该算法按照成员列表逐个选取成员,如果一轮循环完,便从头开始下一轮,如此循环往复。Kube-proxy的负载均衡器在RoundRobin算法的基础上还支持Session保持。如果Service在定义中指定了Session保持,则kube-proxy接收请求时会从本地内存中

  查找是否存在来自该请求IP的a?nityState对象,如果存在该对象,且Session没有超时,则kube-proxy将请求转向该a?nityState所指向的后端Pod。如果本地存在没有来自该请求IP的a?nityState对象,记录请求的IP和指向的Endpoint。后面的请求就会粘连到这个创建好的a?nityState对象上,这就实现了客户端IP会话

  保持的功能。

  接下来我们深入分析kube-proxy的实现细节。kube-proxy进程为每个Service都建立了一个“服务代理对象”,服务代理对象是kube-proxy程序内部的一种数据结构,它包括一个用于监听此服务请求的Socket-Server,SocketServer的端口是随机选择的一个本地空闲端口。此外,kube-proxy内部也建立了一个“负载均衡器组件”,用来实现SocketServer上收到的连接到后端多个Pod连接之间的负载均衡和会话保持能力。

  kube-proxy通过查询和监听APIServer中Service与Endpoint的变化来实现其主要功能,包括为新创建的Service打开一个本地代理对象(代理对象是kube-proxy程序内部的一种数据结构,一个Service端口是一个代理对象,包括一个用于监听的服务请求的SocketServer),接收请求,针对发生变化的Service列表,kube-proxy会逐个处理。下面是具体的处理流程:

  (1)如果该Service没有设置集群IP(ClusterIP),则不做任何处理,否则,获取该Service的所有端口定义列表(spec.ports域)

  (2)逐个读取服务端口定义列表中的端口信息,根据端口名称、Service名称和Namespace判断本地是否已经存在对应的服务代理对象,如果不存在就新建,如果存在且Service端口被修改过,则先删除Iptables中和该Service相关的的规则,关闭服务代理对象,然后走新建流程,即为该Service端口分配服务代理对象并为该Service创建相关的Iptables规则。

  (3)更新负载均衡器组件中对应Service的转发地址表,对于新建的Service,确定转发时的会话保持策略。

  (4)对于已经删除的Service则进行清理。

  11图8Kube-proxy与APIServer的交互过程

  3.4外部到内部的访问

  Pod作为基本的资源对象,除了会被集群内部的Pod访问,也会被外部使用。服务是对一组功能相同Pod的抽象,以它为单位对外提供服务是最合适的粒度。

  由于Service对象在ClusterIPRange池中分配到的IP只能在内部访问,所以其他Pod都可以无障碍地访问到它。但如果这个Service作为前端服务,准备为集群外的客户端提供服务,就需要外部能够看到它。Kubernetes支持两种对外服务的Service的Type定义:NodePort和LoadBalancer。

  (1)NodePort

  在定义Service时指定spec.type=NodePort,并指定spec.ports.nodePort的值,系统就会在Kubernetes集群中的每个Node上打开一个主机上的真实端口号。这样,能够访问Node的客户端就能通过这个端口号访

  问到内部的Service了。

  (2)LoadBalancer

  如果云服务商支持外接负载均衡器,则可以通过spec.type=LoadBalancer定义Service,同时需要指定负载均衡器的IP地址。使用这种类型需要指定Service的NodePort和ClusterIP。

  对于这个Service的访问请求将会通过LoadBalancer转发到后端Pod上去,负载分发的实现方式依赖于云服务商提供的LoadBalancer的实现机制。

  (3)外部访问内部Service原理

  12我们从集群外部访问集群内部,最终都是落在具体的Pod上。通过NodePort的方式就是将kube-proxy开放出去,利用Iptables为服务的NodePort设置规则,将对Service的访问转到kube-proxy上,这样

  kube-proxy就可以使用和内部Pod访问服务一样的方式来访问后端的一组Pod了。这种模式就是利用

  kube-proxy作为负载均衡器,处理外部到服务进一步到Pod的访问。而更常用的是外部均衡器模式。通常的实现是使用一个外部的负载均衡器,这些均衡器面向集群内的所有节点。当网络流量发送到LoadBalancer地址时,它会识别出这是某个服务的一部分,然后路由到合适的后端Pod。

  所以从外面访问内部的Pod资源,就有了很多种不同的组合。

  ◎

  外面没有负载均衡器,直接访问内部的Pod

  ◎

  外面没有负载均衡器,直接通过访问内部的负载均衡器来访问Pod

  ◎

  外面有负载均衡器,通过外部负载均衡器直接访问内部的Pod

  ◎

  外面有负载均衡器,通过访问内部的负载均衡器来访问内部的Pod

  第一种情况的场景十分少见,只是在特殊的时候才需要。我们在实际的生产项目中需要逐一访问启动的Pod,给它们发送一个刷新指令。只有这种情况下才使用这种方式。这需要开发额外的程序,读取Service下的Endpoint列表,逐一和这些Pod进行通信。通常要避免这种通信方式,例如可以采取每个Pod从集中的数据源拉命令的方式,而不是采取推命令给它的方式来避免。因为具体到每个Pod的启停本来就是动态的,如果依赖了具体的Pod们就相当于绕开了Kubernetes的Service机制,虽然能够实现,但是不理想。

  第二种情况就是NodePort的方式,外部的应用直接访问Service的NodePort,并通过Kube-proxy这个负载均衡器访问内部的Pod。

  第三种情况是LoadBalancer模式,因为外部的LoadBalancer是具备Kubernetes知识的负载均衡器,它会去监听Service的创建,从而知晓后端的Pod启停变化,所以它有能力和后端的Pod进行通信。但是这里有个问题需要注意,那就是这个负载均衡器需要有办法直接和Pod进行通信。也就是说要求这个外部的负载均衡器使用和Pod到Pod一样的通信机制。

  第四种情况也很少使用,因为需要经历两级的负载均衡设备,而且网络的调用被两次随机负载均衡后,更难跟踪了。在实际生产环境中出了问题排错时,很难跟踪网络数据的流动过程。

  (4)外部硬件负载均衡器模式

  在很多实际的生产环境中,由于是在私有云环境中部署Kubernetes集群,所以传统的负载均衡器都对Service无感知。实际上我们只需要解决两个问题,就可以将它变成Service可感知的负载均衡器,这也是实际系统中理想的外部访问Kubernetes集群内部的模式。

  ◎

  通过写一个程序来监听Service的变化,将变化按照负载均衡器的通信接口,作为规则写入负载均衡

  器。

  13◎

  给负载均衡器提供直接访问Pod的通信手段。如下图,说明了这个过程。

  图9自定义外部负载均衡器访问Service

  这里提供了一个ServiceAgent来实现Service变化的感知。该Agent能够直接从etcd中或者通过接口调用APIServer来监控Service及Endpoint的变化,并将变化写入外部的硬件负载均衡器中。

  同时,每台Node上都运行着有路由发现协议的软件,该软件负责将这个Node上所有的地址通过路由发

  现协议组播给网络内的其他主机,当然也包含硬件负载均衡器。这样硬件负载均衡器就能知道每个Pod实例的IP地址是在哪台Node上了。通过上述两个步骤,就建立起一个基于硬件的外部可感知Service的负载均衡器。

  具体的案例,可以参见第五章的实践部分。

  3.5总结

  本章重点介绍了Kubernetes网络的各种场景,包括容器之间、Pod之间、Pod到Service、外部到内部的这4种场景下,不同的通信模式。在设计Kubernetes容器平台的时候,建议按照这些通信模式,根据具体的场景,逐一比对选择合适的解决方案。其中,需要注意的是外部到内部的访问,既可以通过NodePort,也可以通过LoadBalancer的方式亦或是Ingress模式,需要按照具体的场景来分析。

  NodePort服务是暴露服务的最原始方式,会在所有节点上打开特定的端口,并且发送到此端口的任何流量都将转发到该服务。这种方法有很多缺点:每个端口只能有一个服务;默认只能使用端口30000~

  32767;如果节点IP地址发生更改,则会带来问题。由于这些原因,不建议在生产中使用这种方法。如果服务可用性不是特别关注,或者特别关注成本,则这个方案比较合适。

  LoadBalancer是服务暴露的标准方式,将会启动一个网络负载均衡器,提供一个将所有流量转发到服

  14务的IP地址。如果直接暴露一个服务,这是默认的方法。指定的端口上所有的流量将被转发到该服务,没有过滤、路由等。这就意味着可以发送几乎任何类型流量,如HTTP、TCP、UDP、Websocket、gRPC或其

  他。这个方式最大的缺点是,使用LoadBalancer公开的每项服务都将获得自己的IP地址,并且必须为每个

  服务使用一个LoadBalancer,这将会付出比较大的代价。

  Ingress实际上不是一种服务。相反,它位于多个服务之前,充当集群中的“智能路由器”或入口点。默认的Ingress控制器将会启动一个HTTP(s)负载均衡器。这将可以执行基于路径和基于子域名的路由到后端服务。Ingress可能是暴露服务最强大的方式了,但也可能是最复杂的。如果希望在相同的IP地址下暴露多个服务,并且这些服务都使用相同的L7协议,则Ingress是最有用的。

  Kubernetes网络组件介绍

  4.1Kubernetes网络框架CNI

  基于Docker的Kubernetes平台为什么没有选择CNM作为其网络设计框架,毕竟大部分容器平台肯定会支持Docker的网络组件,为什么不使用相同的组件呢?这就要从Kubernetes平台设计初衷说起,Kuberne-tes是一个支持多容器的运行环境,而Docker只是其中一个容器而已。Docker网络驱动设计中,做了很多和Kubernetes不兼容的假设。

  例如,Docker中有“本地”驱动和“全局”驱动概念,“本地”驱动实现单机版,无法实现跨节点协作,“全

  局”驱动libkv可实现跨节点协作。但是,libkv接口太过于底层,而且架构模式也是Docker内部的量身定制版本,对于Kubernetes的应用会带来性能、可扩展性和安全性方面的问题。

  CNI(ContainerNetworkingInterface)提供了一种Linux的应用容器的插件化网络解决方案。最初是由rktNetworkingProposal发展而来。也就是说,CNI本身并不是完全针对Docker的容器,而是提供一种普适的容器网络解决方案。模型涉及两个概念:

  容器:拥有独立Linux网络命名空间的独立单元。比如rkt/docker创建出来的容器。

  网络(Networking):网络指代了可以相互联系的一组实体。这些实体拥有各自独立唯一的IP。这些实体可以是容器,是物理机,或者是其他网络设备(比如路由器)等。

  CNI的接口设计非常简洁,不需要守护进程,只有两个接口ADD/DELETE,通过一个简单的shell脚本就可以完成。相对于CNM的复杂设计,CNI更加适合快速开发和迭代。

  4.2CNI支持的开源组件

  4.2.1Flannel

  15Flannel之所以可以搭建Kubernetes依赖的底层网络,是因为它可以实现以下两点:

  它给每个node上的docker容器分配相互不想冲突的IP地址;

  它能给这些IP地址之间建立一个覆盖网络,同过覆盖网络,将数据包原封不动的传递到目标容器内。

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

  在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。

  这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

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

  Flannel实质上是一种“覆盖网络(OverlayNetwork)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,默认的节点间数据通信方式是UDP转发。

  图10Flannel跨节点Pod通信图

  举个例子,上图是跨节点Pod通信。

  可以看到,Flannel首先创建了一个名为?annel0的网桥,而且这个网桥的一端连接Docker0网桥,另一端连接一个叫作?anneld的服务进程。?anneld进程并不简单,它上连etcd,利用etcd来管理可分配的IP地址段资源,同时监控etcd中每个Pod的实际地址,并在内存中建立了一个Pod节点路由表;它下连Docker0和物理网络,使用内存中的Pod节点路由表,将Docker0发给它的数据包包装起来,利用物理网络的连接将数据包投递到目标?anneld上,从而完成Pod到Pod之间的直接地址通信。

  164.2.2OVS

  OpenvSwitch是一个开源的虚拟交换机软件,有点像Linux中的bridge,但是功能要复杂的多。OpenvSwitch的网桥可以直接建立多种通信通道(隧道)。这些通道的简历可以很容易地通过OVS的配置命令实现。在Kubernetes、Docker场景下,主要是建立L3到L3点隧道。如下图所示。

  图11OVSwithGRE原理图

  首先,为了避免Docker创建的Docker0地址产生冲突(因为DockerDaemon启动且给Docker0选择子网地址时只有几个备选列表,很容易产生冲突),我们可以将Docker0网桥删除,手动建立一个Linux网桥,然后手动给这个网桥配置IP地址范围。

  其次,建立OpenvSwitch的网桥OVS,使用ovs-vsctl命令给OVS网桥增加GRE端口,在添加GRE端口时要将目标连接的NodeIP地址设置为对端的IP地址。对每一个对端IP地址都需要这么操作(对于大型集群网络,这可是个体力活,要做自动化脚本来完成)。最后,将OVS的网桥作为网络接口,加入Docker的网桥上(Docker0或者自己手工建立的新网桥)。

  重启OVS网桥和Docker的网桥,并添加一个Docker的地址段到Docker网桥的路由规则项,就可以将两个容器的网络连接起来了。

  OVS的优势是,作为开源虚拟交换机软件,它相对比较成熟和稳定,而且支持各类网络隧道协议,经过了OpenStack等项目的考验。另一方面,在前面介绍Flannel的时候可知

  Flannel除了支持建立Overlay网络,保证Pod到Pod的无缝通信,还和Kubernetes、Docker架构体系结合紧密。Flannel能够感知Kubernetes的Service,动态维护自己的路由表,还通过etcd来协助Docker对整个Kubernetes集群中Docker0的子网地址分配。而我们在使用OVS的时候,很多事情就需要手工完成了。无论是OVS还是Flannel,通过Overlay网络提供的Pod到Pod通信都会引入一些额外的通信开销,如果是对网络依赖特别重的应用,则需要评估对业务的影响。

  4.2.3Calico

  Calico是一个纯三层的数据中心网络方案(不需要Overlay),并且与OpenStack、Kubernetes、AWS、GCE等IaaS和容器平台都有良好的集成。Calico在每一个计算节点利用LinuxKernel实现了一个高效的vRouter来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个

  Calico网络内传播——小规模部署可以直接互联,大规模下可通过指定的BGProutere?ector来完成。这样保证最终所有的workload之间的数据流量都是通过IP路由的方式完成互联的。Calico节点组网可以直接利用

  1数据中心的网络结构(无论是L2或者L3),不需要额外的NAT,隧道或者OverlayNetwork。此外,Calico基于iptables还提供了丰富而灵活的网络Policy,保证通过各个节点上的ACLs来提供Workload的多租户隔离、安全组以及其他可达性限制等功能。下图是Calico的架构图。

  图12Calico架构图

  在满足系统要求的新配置的Kubernetes集群上,用户可以通过应用单个manifest文件快速部署Calico。如果您对Calico的可选网络策略功能感兴趣,可以向集群应用其他manifest,来启用这些功能。

  尽管部署Calico所需的操作看起来相当简单,但它创建的网络环境同时具有简单和复杂的属性。与Flannel不同,Calico不使用Overlay网络。相反,Calico配置第3层网络,该网络使用BGP路由协议在主机之间路由数据包。这意味着在主机之间移动时,不需要将数据包包装在额外的封装层中。BGP路由机制可以本地引导数据包,而无需额外在流量层中打包流量。

  除了性能优势之外,在出现网络问题时,用户还可以用更常规的方法进行故障排除。虽然使用VXLAN等技术进行封装也是一个不错的解决方案,但该过程处理数据包的方式同场难以追踪。使用Calico,标准调试工具可以访问与简单环境中相同的信息,从而使更多开发人员和管理员更容易理解行为。

  除了网络连接外,Calico还以其先进的网络功能而闻名。网络策略是其最受追捧的功能之一。此外,Calico还可以与服务网格Istio集成,以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。这意味着用户可以配置强大的规则,描述Pod应如何发送和接受流量,提高安全性并控制网络环境。

  如果对你的环境而言,支持网络策略是非常重要的一点,而且你对其他性能和功能也有需求,那么

  Calico会是一个理想的选择。此外,如果您现在或未来有可能希望得到技术支持,那么Calico是提供商业支持的。一般来说,当您希望能够长期控制网络,而不是仅仅配置一次并忘记它时,Calico是一个很好的选择。

  图13Calico功能模块图

  1Calico主要由Felix、etcd、BGPclient以及BGPRouteRe?ector组成

  ◎

  Felix,CalicoAgent,跑在每台需要运行Workload的节点上,主要负责配置路由及ACLs等信息来确保Endpoint的连通状态;

  ◎etcd,分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性;

  ◎BGPClient(BIRD),主要负责把Felix写入Kernel的路由信息分发到当前Calico网络,确保Work-load间的通信的有效性;

  ◎BGPRouteRe?ector(BIRD),大规模部署时使用,摒弃所有节点互联的mesh模式,通过一个或者多个BGPRouteRe?ector来完成集中式的路由分发。

  ◎calico/calico-ipam,主要用作Kubernetes的CNI插件

  4.2.4Contiv

  Contiv是思科开源的容器网络方案,是一个用于跨虚拟机、裸机、公有云或私有云的异构容器部署的开源容器网络架构,并与主流容器编排系统集成。Contiv最主要的优势是直接提供了多租户网络,并支持L2(VLAN),L3(BGP),Overlay(VXLAN)以及思科自家的ACI。

  图14Contiv架构图

  4.3总结对比

  1图15各种开源技术性能对比

  CalicoBGP方案最好,不能用BGP也可以考虑CalicoIPIPTunnel方案;如果是CoreOS系又能开UDPO?oad,Flannel是不错的选择;Docker原生Overlay还有很多需要改进的地方。

  容器平台的网络架构实践

  5.1某金融企业使用OpenShift(基于Kubernetes的商业版本)实现其业务

  上云

  25.1.1整体网络架构图

  图16整体网络架构图

  在DMZ和内网分别部署彼此独立的2套OpenShift,分别为内网和DMZ区两个网段,两套环境彼此隔离。DMZ区的OpenShift部署对外发布的应用,负责处理外网的访问。内网的OpenShift部署针对内网的应用,仅负责处理内网的访问。

  5.1.2传统应用访问策略

  方案推荐通过NodePort类型的Service为某个应用对外暴露一个服务端口。NodePort类型的Service会在集群中的所有节点上监听一个特定的端口,访问任意一个计算机节点的端口,即可访问内部容器中的服务。在集群的所有节点的这个端口都会预留给该应用所用。在F5VS的PoolMember中配置所有节点,通过Kee-palived来实现HA。应用系统和用户不用改变现有的访问方式。

  图17传统应用访问策略

  215.1.3数据库访问方案及防火墙策略

  内网计算节点可以直接访问数据库,DMZ区计算节点访问数据库有2种方案:

  (1)计算节点直接通过内网防火墙访问该应用数据库内网防火墙仅开通应用所在节点访问内部数据库的端口,例如本期方案中应用仅使用2个节点,则防火墙仅开通这2个节点访问数据库的权限。

  图18计算节点直接通过内网防火墙访问该应用数据库

  (2)计算节点经Outbound路由通过内网防火墙访问内网数据

  这Outbound路由在OpenShift中称之为EgressRouter

  图19经Outbound路由通过内网防火墙访问内网数据

  因此,内网防火墙仅开通应用所在节点访问内部数据库的端口,例如,应用A仅通过路由节点A和B访问内部数据库,则防火墙仅开通这2个节点访问A数据库的权限。

  22图20通过OutBoundRouter访问数据库

  5.2某金融企业两第三中心容器云网络架构

  图21某企业两第三中心容器云架构

  平台基于多集群管理和联邦集群特性,对两地三中心、同城双活、异地灾备等业务场景提供了原生的支持。平台以统一多集群管理为核心,可对接稳定快速的物理机服务器、资源利用率高的虚拟机、不同云环境下的云主机创建Kubernetes集群。支持运行多集群,保证集群的高可用。提供跨云的多集群统一管理,解决多云灾备问题,实现统一部署、统一发布以及统一运维。通过mirror联邦集群,为已经存在的集群进行组件

  23联邦集群。可以在联邦内选择在一个或多个集群创建。

  优化实践

  网络优化是一个非常复杂的话题,现实场景中,如果出现服务不可用的情况,往往都会怀疑到网络上面

  ——网络不可达,网络拥塞,网络设备失效等等。一个容器平台网络的高效稳定安全,涉及方方面面的设计

  考量。这里将我们在实践中的一些优化措施作了一些总结:

  (1)主节点优化

  在集群中,除了Pod之间的网络通信外,最大的开销就是master和etcd之间的通信了,因此:

  Master侧可以优化:

  ◎

  Master和etcd尽量部署在一起

  ◎

  高可用集群中,Master尽量部署在低延迟的网络里

  ◎

  确保**/etc/origin/master/master-con?g.yaml**里的etcds,第一个是本地的etcd实例Node侧可以优化:

  Node节点的配置主要在**/etc/origin/node/node-con?g.yaml**里,可以优化:iptables,synchronizationperiod,MTU值,代理模式。配合自文件里还可以配置Kubelet的启动参数,主要关注亮点pods-per-core和max-pods,这两个决定了Node节点的Pod数,两者不一致时,取小。如果数值过大(严重超读)会导致:

  ◎

  增加CPU消耗,主要是Docker和OpenShift自身管理消耗的◎

  降低Pod调度效率

  ◎

  加大了OOM的风险

  ◎

  分配PodIP出现异常

  ◎

  影

  响

  应

  用

  性

  能etcd节点:尽量和Master部署在一起,或者提供专网连接。

  (2)主机节点万兆网卡性能优化

  如果主机用万兆或者40Gbps,那么可以优化的方面:

  24◎

  通过直接路由,负责Pod间通信,不过需要手动维护Node节点添加删除时的路由变化

  ◎

  条件允许的话,可以考虑BGP的Calico网络方案

  ◎

  购置支持UDPO?oad的网卡,需要注意的是,使用了UDPO?oad网卡和非Overlay网络相比,延迟是不会减少的,只是减少了CPU开销,提到带宽吞吐。

  (3)IPIP模式的Flannel性能提升

  汲取了Flannel/Calico容器网络开源项目的优点,实现了基于IPIP和HostGateway的Overlay网络,具体性能—短链接VXLAN比host差33%,IPIP比host差23%,Gateway比host只差6%。具体参见下图:

  (4)使用指定的UnderlayIP优化

  图22IPIP模式Flannel性能提升

  FloatingIP指定宿主机提供的IP,将IP直接配置到容器中,有别于OpenStack(将FloatingIP配置到宿主机的网络空间再通过NAT转发)的实现,其性能更好,容器与物理机可以直接路由。Tunnel网卡在容器中创建,避免了使用NodePort带来的性能损耗。具体参见下图:

  图23使用指定的UnderlayIP优化

  (5)cgroup实现资源隔离

  25在cgroup提供的能力之上,实现了网络出入带宽、资源隔离的能力,并提供所有硬件资源的可弹性配置,使得容器硬件资源全维度可弹性配置,大度提升了应用的隔离性与稳定性。在实际的运营过程中,我们发现,用户往往不能很好的预先设置最急limit值,设置过大会导致资源浪费,设置过小又会导致业务性能损失甚至业务进程频繁OOM,弹性的优势在于,用户不需要配置limit值,系统可以自动将空闲资源交给业务容器使用。使得容器的稳定性、集群资源利用率均得到提升。

  图24cgroup对网络资源的优化

  如上图,某个cgroup网络繁忙时,能保证其设定配额不会被其他cgroup挤占;某个cgroup没有用满其配

  额时,其他cgroup可以自动使用其空闲的部分带宽;多个cgroup分享空闲带宽时,优先级高的优先占用,优先级相同时,配额大的占用多,配额小的占用少,减少为了流控而主动丢包。

  (6)基于DPDK技术实现对DDos攻击防护

  (7)网络带宽QoS相关

  网络带宽QoS主要是为了保证用户所申请的带宽资源,以及有效利用空闲的网络资源,尽可能提升用户带宽体验。那么我们可以做的事:

  基于LinuxTra?cControl并修改OVS,实现保证速率,最大速率;

  将小包按照MPU(MinimumPacketUnit)大小来处理

  同时,针对VXLAN小包处理性能不好,网络小包过多导致宿主机CPU过载,影响网络性能和稳定性的问题,通过限制容器网络的PPS(PacketPerSecond)来处理。

  26

篇五:容器网络流量研究教授

  基于ELM的网络流量分类及可视化研究

  陈幸如;魏书宁

  【摘

  要】精准的网络流量分类是网路流量监测和网络流量数据分析的重要基础.机器学习方法利用统计网络流量的各种特征,不依赖于协议端口和协议内容对网络流量数据进行分析.采用超限学习机(ELM)和改进算法分层超限学习机(H-ELM)作为机器学习的算法,识别客户端与服务器.对链路层、网络层和应用层数据进行分析,实现对多层次网络流量数据的可视化,对H-ELM和ELM算法的实验结果进行对比.实验结果表明,ELM算法能有效地应用于网络流量分类,基于ELM分类模型的网络流量识别训练速度快.H-ELM通过紧凑的特征去除冗余原始输入,改进了总体学习表现.

  【期刊名称】《安徽师范大学学报(自然科学版)》

  【年(卷),期】2018(041)002【总页数】6页(P129-134)

  【关键词】网络流量;超限学习机;分层超限学习机;数据可视化

  【作

  者】陈幸如;魏书宁

  【作者单位】湖南师范大学

  信息科学与工程学院,湖南

  长沙410081;湖南师范大学

  信息科学与工程学院,湖南

  长沙410081【正文语种】中

  文

  【中图分类】TP181近代社会,由于科技的迅速发展,互联网的使用越来越普遍,使用范围越来越广,随着互联网的普及,大数据的云分布式处理技术成熟地发展,网络应用多元化已成为趋势。网络流量激增并且呈现多样化给网络管理带来挑战和压力,提高了网络流量管理的难度。网络流量分类在维持网络高效运行、预测网络服务类型和维护网络安全等许多方面发挥着越来越重要的作用。在TCP/IP协议中,端口号是应用程序识别通信的服务器和客户端的手段。源端口和目的端口皆为十六位的非负整数,它的范围是1至65535。一个客户端想要与服务器进行通信,需要一个端口号用来发送服务请求从服务器获得所需服务。根据LANA定制的知名端口号和注册端口号列表,LANA管理局规定的通信机制进行网络流量识别是基于端口网络流量识别技术的本质。传统的基于端口号以及网络载荷[1]的网络流量分析有其自身局限性和许多不可靠的因素,例如流行的P2P等新型网络应用利用随机,动态端口进行通信;还有一些采用隧道协议封装技术的应用。这些措施使得传统的网络流量分类方法失灵。不断更新发展的网络应用使利用端口进行网络流量分类技术的短板逐渐暴露。为了克服这些不足,已经应用在众多领域的机器学习方法引起了众人的关注[2][3][4],机器学习[5][6]不依赖于端口号匹配和协议的解析,利用流特征对网络流量数据进行分类[7]。目前,基于网络流量统计特征的识别方法是一种新兴的网络流量分类方法,利用数据挖掘中机器学习算法,提取不同网络协议的统计特征,通过分类算法来训练网络流量分类模型。这种方法可以随着网络应用的更新重新训练新的分类模型。本文采用新加坡南洋理工大学黄广斌教授等人在2006年研究出的超限学习机(ExtremeLearningMachine,ELM)算法,在基于ELM算法上探究网络流量分类,并对网络流量做出可视化数据分析。

  1基于机器学习的网络流量分类

  1.1ELM算法理论

  神经网络是一种有监督机器学习,基于已标注类型的样本集进行机器学习并建立分类规则,将未知数据分类成已知的类型。传统的神经网络算法有着各自的缺点,比

  如:训练速度慢、网络更新迭代计算中容易陷入局部极小点、学习率敏感等。训练网络要想获得较好的性能,需要探索出一种训练快速、能达到全局最优解、具有良好泛化性的训练算法,这些性能目标也是现阶段研究的热点与难点。

  超限学习机(ELM)算法是一种单隐层前馈神经网络(SLFNs)。ELM算法与传统BP神经网络不同点在于ELM算法的输入层与隐含层的连接权值w和隐含层神经元的阈值b都是随机产生的,由于后期训练中无需更新w和b,这个网络中无需设定过多的参数,只要确定了隐含层节点数便可获得唯一最优解。ELM的理论如下:

  假设SLFNs有L个隐含层节点,对于输入向量x,SLFNs的输出可以由(1)式表示。其中,Gi是第i层隐含层节点激活函数,ai是连接输入层与第i层隐含层节点的输入权值向量,bi是第i层隐含层的偏置,βi是输出权值。

  (1)对于激活函数g的附加节点,Gi定义为(2)式:

  Gi(x,ai,bi)=g(bi+ai·x)

  (2)对于具有激活函数g的径向基函数节点,Gi定义为(3)式:

  Gi(x,ai,bi)=g(bi‖x-ai‖)

  (3)黄广斌等人[8]已经证明了SLFNs可以逼近任意随机初始化自适应或者径向基函数节点的x∈Rd子集上的连续目标函数,随机生成的网络以最小均方得到的输出能够保持泛化逼近能力,甚至没有隐含层参数的更新。除此之外,ELM解决正则化最小二乘问题比标准支持向量机下解决二次规划问题或者梯度方法更快[8][9]。基于这种理论,ELM以快速学习而建立。从学习的角度来看,不同于传统学习算法,ELM理论旨在不仅达到最小训练错误而且达到最小规范化输出权值。

  ELM算法不仅拥有良好的泛化性能,并且还具有通用逼近以及分类能力。相比于传统的神经网络算法,ELM不需要设置学习率,得到的输出权值是全局最优解,不会陷入局部最小值中且计算量小、训练速度快。这些优点是ELM算法被广泛地应用于模式识别、人机交互、疾病诊断、卫星图像实时远程遥感和网络安全等领域的原因。

  1.2H-ELM框架

  H-ELM(HierarchicalELM)是一种建立在多层方式上的算法,在随机特征映射和充分利用ELM的泛化逼近能力的基础上发展。如图1所示,可以看到H-ELM训练框架在结构上可以分为2个独立阶段:无监督分层特征表示和监督特征分类。在前一阶段,是用于提取输入数据多层稀疏特征的基于自编码的ELM。后一阶段原始分类ELM用于最终决策。

  图1H-ELM结构框架

  输入的原始数据被转换至ELM随机特征空间,每一个隐含层输出可以表示为

  Hi=g(Hi-1·β)

  (4)其中Hi是i层的输出,Hi-1是第i-1层的输出,g是隐含层激活函数,β是输出权值。H-ELM的每一层都是一个独立的模块,每一层的功能相当于功能提取器,随着层数的增加,特征会更加紧凑。一旦前一隐含层的特征被提取,本层的权值和参数被固定。

  1.3基于流统计特征的ELM流量分类

  已知数据中网络流数据集合F={F1,F2,…,Fn},网络流的类型集合T={T1,T2,…,Ti},利用pandas整理的一个n×(i+1)的.csv文件作为输入分类器的样本数据。其中,n为网络流数目,i为流属性数目。根据统计的流特征,利用已知的网路流类型集合去训练ELM分类模型;选取适应ELM分类模型需求的流特征作为输入继而拥

  有更加精确快速的预测输出是流统计特征这一工作的意义。

  分类实验中,流量在通信过程中展现出的网络流按照五元组进行定义:源IP、目的IP、源端口、目的端口和传输文件长度,分类算法执行步骤概括如下:

  (1)输入训练样本,样本个数为Q,设置隐含层节点数L,选择激活函数g(x)为sigmoidal函数。

  (2)随机生成权值w和阈值b。

  (3)计算隐含层输出矩阵H:

  (4)获得隐含层与输出层间的连接权值β。

  图2基于ELM流量分类训练过程

  流量分类过程可以概括为图2所示。先对数据集提取网络流量统计特征,如果训练集数目过大则需要进行抽样处理以减少训练时间,降低训练复杂度。

  2数据可视化

  绘图是数据分析工作中的最重要任务之一,是探索过程中的一部分。数据可视化旨在清楚明了地提供信息,通过图形化手段将复杂的数据模型表达出来,将数据的属性从各个维度观察和分析,直观地表示出数据,使数据中的规律可以被洞悉。数据可视化是一个新术语:它传达出的含义不仅仅是用图表的形式展示数据,更多的是数据背后的信息被揭示,图表的本身应该帮助人们看到数据结构。

  目前,开源的编程工具例如:R语言、D3.js、Tableau和python的各种工具类库等使得数据可视化由单一的表示形式演变为数据运算与图表的融合。

  3实验方案及结论

  3.1实验数据及环境

  本文采用的是CHINAVIS提供的BigBusiness公司的骨干通信链路上抓取的数据包。该数据集包含了数据链路层、网络层和应用层的相关信息,数据共有

  2626937条,与只关注网络层活动的传统tcpflow数据不同的是此网络监控日志更加丰富全面,可以更好地、多层次多角度反应数据在网络中的流动过程。

  在IP网络,应用层负责将需要传输的数据拆分为一个或多个数据包,应用层的数据项有:ID(记录序号)、IPSMALLTYPE(IP业务类型,主要是TCP和UDP),FILELEN(本次网络连接传输数据的总长度)、FILEAFFIX(本次网络连接传输文件类型)和ISCRACKED(数据是否损坏)共计5个维度。网络层负责建立源地址和目的地址之间的逻辑连接,网络层的数据项有:STARTTIME(开始时间)、SRCIP(源地址)、DSTIP(目的地址)、SCRPORT(源端口)和DSTPORT(目的端口)共计5个维度。数据链路层负责为逻辑链接建立传输通道,数据链路层的数据项包括:VPL1,VPL2和ATMAAL1TYPE。VPL1和VPL2是虚拟管道的标识,ATMAAL1TYPE是这个虚拟线路中传输数据的属性。

  由于数据集中存在有少量缺失值数据,实验首先对网络流量进行了数据清洗。数据清洗完成后对数据进行了数据集成,将多个数据源合并存放在一个一致的数据存储中。同时进行的是数据转换和规约。数据转换主要是对原始数据进行规范化处理,将数据转换成适当的形式以适应于数据挖掘和ELM算法的需要。数据规范化即归一化处理数据,不同指标往往具有不同量纲,数值之间差别可能很大,而这些会影响数据分析的结果。

  实验中,网络流量数据的特征统计、绘图等数据分析方面的工作使用的是Python2.7.13,涉及的模块有:numpy,pandas,seaborn,matplotlib等;使用MATLABR2014b做基于ELM算法的网络流量分类工作。

  3.2实验设计和可视化

  根据不同的目的选择不同的特征作为分类依据,为了使实验更具有针对性,选择合适的网络流量特征是极为重要的。如表1所示,从不同角度分析数据,实验中可以统计的特征有很多,基于BigBusiness两个月的网络监控日志数据,对内部网

  络的通信进行分析,本实验选取了以下4种网络流量特征对服务器进行筛选:

  1.主机通信频率

  2.主机传输文件长度

  3.协议类型

  4.传输文件类型

  为了找出BigBusiness内部网络的服务器,对选取的网络流量特征使用python中pandas模块的Series和DataFrame进行切片处理,合并、统计整理好作为超限学习机算法的训练集和测试集。作为ELM算法的输入,训练集和测试集共有7个维度:标签、源IP地址主机通信频率、目的IP地址主机通信频率、主机发送数据的长度、主机接收数据的长度、协议类型代号和传输文件类型代号。

  表1网络流量特征统计序号特征名称1主机通信频率2主机传输文件长度3端口号4包到达时间统计……

  3.2.1基于ELM算法的分类实验

  经过ELM网络训练、分类、测试,实验中本文在设置隐含层节点数时,以10作为起始数,共做了10次实验,输出为ELM训练的时间和分类的精度。输出结果如图3所示。

  图3ELM分类器的输出结果图

  由实验结果可知,超限学习机这种算法训练时间短,训练速度十分快且它的精度非常高。随着隐含层节点数的增加,训练时间会少许变长,然而并不是隐含层节点数越多时,ELM的精度越高,在针对本次实验的两种网络流量特征的分类上,当节点数为50时,精度达到最高为94.01%且由图3可知,其训练时间也是处于最低点处的。这些优势证明了ELM算法可以很好地应用于网络流量的分类。

  3.2.2基于H-ELM算法的分类实验

  在实验中,主要是超参数的选择,参数C是为了正则最小均方计算,参数L是隐含层节点数。对于两个参数的选择,C值的选择需要谨慎,L值应该选取得足够大。一方面,随着L值的增长,一个合适的C值使

  测试精度曲线更加平缓。如图4所示。另一方面,不同的L值对于测试精度的影响并不大。如图5所示。

  图4H-ELM参数的选择对测试精度的影响

  图5隐含层节点数对测试精度的影响

  3.2.3基于传统神经网络算法的分类实验

  徐鹏等人[10]提出的基于支持向量机的流量分类方法中,利用非线性变换将流量分类问题转换为二次寻优问题。基于支持向量机的流量分类方法不依赖于样本空间分布,稳定性强。但是,此方法用的数据集流特征过多,流特征过多会导致计算复杂度增加,在实际应用中有过多的计算负荷。李平红等人[11]提出一种基于支持向量机的半监督网络流量分类方法,此方法引入增量式学习,使学习精度随着新样本的增加而提高;引入半监督学习[12]降低人工标记样本的错误率和成本。然而,此方法训练时间长。SVM方法在网络流量大规模样本分类实际应用上体现了其建模时间长,训练时间成本高的缺陷。

  为了更好地与ELM分类器进行对比,本文将网络流量数据输入传统BP(Backpropagation)神经网络算法中,利用BP神经网络算法对同样的网络流量进行分类实验;在同等条件下将数据输入SVM算法中,对比实验结果如表2所示。

  由对比实验结果可知,ELM算法在分类实验中展现了其建模时间短、训练速度快且分类精度高的优势。对于传统的机器学习算法,例如BP神经网络和SVM,虽然SVM算法的分类精度很高,但其建模和训练的时间消耗是巨大的;而对于传统的BP神经网络算法来说,它的缺点是非常明显的,实验结果显示:BP神经网络算法作为分类器的算法表现出建模时间长、训练速度慢且分类精度较低。不适用于大规模网络流量数据的分类和实际应用。

  表2ELM算法与其他传统学习算法的对比试验结果算法建模时间分类精度BP30.07s87.14%SVM9.13s95.16%ELM0.87s94.01%3.2.4可视化分析

  由基于ELM算法分类后的结果,实验找到了数据集中的服务器。

  本文利用可视化来展示ELM算法分类后的主机网络流量特征:(1)从主机的度的角度来看,选取了前50个服务器的出度和入度如图6和图7所示,坐标轴横轴为度,纵轴是服务器IP地址。从图6和图7可以看出有的服务器的出入度相差不大,但有的服务器出入度相差很多。

  图6服务器出度

  图7服务器入度

  (2)从主机的传输—接收流量大小的角度来看,根据样本中的167个服务器绘出线型图如图8所示,坐标轴横轴为主机序号,纵轴为传输流量大小。实线表示发出的流量,虚线表示接受的流量。由图8可以看出大部分服务器发出的流量和接收的流量大小持平,只有少数提供特定服务的主机发出的流量和接收的流量大小相差较大。

  4结

  语

  图8主机传输—接收流量线型图

  本文针对内网服务器识别分类问题提出的基于ELM的网络流量分类方法,无论是在训练时间还是分类精度方面都有良好的表现。通过对原始流量数据分析选择ElM分类模型,根据分类后的仿真结果对数据进行了可视化绘图从而进一步地了解ELM算法对网络流量数据分类的效果。最终的实验结果表明ELM算法可以取得较好的分类效果,可以满足网络流量分类识别的应用需求。H-ELM和ELM之间最主要的区别是在ELM特征分类前H—ELM用分层训练获得原始数据的多层稀疏表示,而在ELM中,原始数据是用来直接回归和分类的。总的来说H-ELM改善了学习表现。未来工作中将要注重网络流量的预测以及新样本加入训练时无需对样本重新训练的SLFNs的增量式学习算法OS-ELM解决网络流量分类问题的研究。

  参考文献:[1]丁杰.基于n-gram多特征的流量载荷类型分类方法[J].计算机应用与软件,2017,34(2):152-158.[2]孙靖超.一种基于机器学习的网页分类技术[J].信息网络安全,2017(9):45-48.[3]戚铭钰,刘铭,傅彦铭.基于PCA的SVM网络入侵检测研究[J].信息网络安全,2015(2):15-18.[4]王涛,余顺争.基于机器学习的网络流量分类研究进展[J].小型微型计算机系统,2012,33(5):1034-1040.[5]刘琼,刘珍,黄敏.基于机器学习的IP流量分类研究[J].计算机科学,2010,37(12):35-40.[6]李晓明.基于机器学习的网络流量分类算法分析研究[J].中国传媒大学学报(自然科学版),2017,24(2):9-14.[7]林平,余循宜,刘芳,等.基于流统计特性的网络流量分类算法[J].北京邮电大学学报,2008,31(2):15-19.[8]HUANGG,BCHENL,SIEWCK.Universalapproximationusingincrementalconstructivefeedforwardnetworkswithrandomhiddennodes[J].IEEETransNeuralNetworks,2006,17(4):879-892.[9]HUANGG,BZHOUH.DINGX.Extremelearningmachineforregressionandmulticlassclassification[J].IEEETransSystemsManCybernetics-PartB:Cybernetics,2012,42(2):513-529.[10]徐鹏,刘琼,林森.基于支持向量机Internet流量分类研究[J].计算机研究与发展,2009,46(3):407-414.

  [11]李平红,王勇,陶晓玲.支持向量机的半监督网络流量分类方法[J].计算机应用,2013,33(6):1515-1518.[12]周文刚,陈雷霆,LubomirBic,等.基于半监督的网络流量分类识别算法[J].

  电子测量与仪器学报,2014,28(4):381-386.

篇六:容器网络流量研究教授

  NetFlow流量采集与聚合的研究实现

  时间:2009-07-1009:21:32来源:现代电子技术

  作者:郭剑云

  曹庆华

  0引

  言

  近年来,随着信息技术的飞速发展,越来越多的企业和大型机构在其内部构建基于网络的应用,复杂程度及对网络的依赖程度日益提高,各种各样的网络问题也随之产生。网络流量监测是网络管理和系统管理的一个重要组成部分,网络流量数据为网络的运行和维护提供了重要信息。这些数据对网络的资源分布、容量规划、服务质量分析、错误监测与隔离、安全管理都十分重要。因此,对网络流量及相关情况实施科学合理的监管和深入分析,成为网络管理的重要环节之一;同时,它也为网络问题提供有效解决方案及进行网络的规划。

  目前的网络流量分析方法主要有基于SNMP、基于实时抓包分析、基于网络探针和基于:Flow技术等几种。NetFlow基于Flow技术,目前已得到大多数网络设备厂商的支持,提供了网络监测方面非常完善的应用。基于NetFlow的流量采集方法可以获得包括源/目的主机IP、应用协议类型、源/目的端口等详细信息,根据这些信息就可以对协议(应用)、主机IP(用户)以及AS域等进行统计排行和趋势分析,也可对异常流量进行监测分析。此外,NetFlow避免了大量部署和配置监测探针的复杂过程,使得网络性能分析更加全面、灵活且简单易用。

  lNetFlow技术

  NetFlow是Cisco公司提出的基于CiscoIOS系统的一种应用。它用于提供网络设备上数据包形成的“流”的统计信息,并逐渐演变成为网络流量统计和安全分析的主要手段。目前利用:NetFlow可以实现网络流量监测,用户应用监控,网络安全,网络规划以及流量计费等功能。

  NetFlow有两个核心的组件:NetFlow缓存,存储IP流信息;NetFlow的数据导出或传输机制,NetFlow利用此机制将数据发送到网络管理采集器。

  1.1流(Flow)的定义

  一条流由一个源主机与一个目的主机间的单方向传输的网络数据包组成,其中,源和目的主机由各自的IP地址和端口号来标识。一条流一般由以下七个关键字段惟一标识:

  ·源地址

  ·目的地址

  ·源端口号

  ·目的端口号

  ·第3层协议类型(如TCP,UDP)

  ·服务类型

  ·入逻辑接口标示符

  1.2流(Flow)格式

  启动NetFlow的设备会输出其缓冲区里的信息,以UDP包的形式传送给NetFlow流量采集器。包由包头和若干流记录组成。常用的NetFlOW输出包格式共有5个版本,它们分别是Version1,Version5,Ver-sion7,Version8和Version9,其中V5是最为流行和成熟的版本,目前得到最广泛的使用。最新的V9已经被列入IETF的标准,并有待进一步研究和规范。V9采用了模板技术与流记录相结合的方式,使NetFlow输出包的格式具有动态和可扩展的特性。NetFlowV9的输出格式主要由三部分构成:

  (1)包头部(PacketHeader):包括版本号、包中数据流总数、系统时间、数据流序列、数据源ID等。

  (2)模板流集(TemplateFlowSet):包含一个或多个模板,模板是用于描绘数据流中各个数据段的含义,可以在路由器上根据需要自行设置模板。

  (3)数据流集(。DataFlowSet):包含多个数据流,每个数据流集通过模板ID对应某个模板。数据采集端根据模板来解析数据流。

  2NetFlow流量采集与聚合

  2.1系统概述

  根据NetFlow的特点,设计并实现了一个网络流量监测系统,其系统结构如图1所示。

  当NetFlow采集器接收到从路由器发送来的Net-Flow数据包后,采集器将进行数据包的解析和数据流聚合,形成多种适合统计分析需要的数据,再分门别类地存入数据库。分析器则根据前端不同的查询请求,依照一定的查询策略从数据库不同的表中提取相应数据进行分析展现。

  本系统的后台采集器和聚合处理部分用JAVA编写实现,数据库采用开源的MySQL,而NetFlow流量分析利用Tomcat服务器通过Web方式展现,前台部分用JSP编写实现。工作的重点即在于数据采集、数据聚合以及数据库设计部分。

  2.2NetFlow流采集

  2.2.1采集器的设计

  数据采集模块是整个系统的基础。由于。NetFlow数据流量非常大,为防止丢包系统采用缓冲区和线程池结构,如图2所示。

  当采集器监听到一个NetFlow数据包时,将该数据包接收到缓冲区,并从包解析线程池中取出一个线程,根据相应的NetFlow的报文格式解析出数据流信息,将该原始流信息放入缓冲区,然后将原始流存入数据库,同时采用相应的聚合策略聚合原始流生成聚合流并存入相应的数据库中。

  2.2.2NetFlow数据包接收与解析

  由于NetFlow数据是借助于UDP数据报来传送,因而倘若后续的处理速度跟不上数据包到达的速度,则会出现严重丢包的现象。为解决高速大流量数据的及时接收及较低丢包率问

  题,采用了多线程的方式来实现。用独立的两个线程分别完成数据接收和解析操作:接收数据的线程在特定的IP地址监听相应的UDP端口,接收到的数据暂存在缓冲区中;解析线程从缓冲区提取数据,按照相应的报文格式进行解析。由于接收线程和解析线程共享同一个临界资源,即接收的缓冲区,需要对临界资源进行加锁操作。

  下面为部分实现多线程采集的JAVA代码实例,其中packet为接收的NetFlow数据包对象,linkedLst为linkedList容器,利用synchronized进行线程间同步。

  (1)接收线程

  2.3NetFlow流聚合

  NetFlow的原始数据数据量非常庞大,保存每一条流数据的原始记录将会使对数据进行查询分析时产生效率低下的问题,在绝大部分应用中也没有必要把数据粒度设计得如此之小。所谓流量聚合,是指对符合NetFlow数据格式的原始流记录根据一定条件进行流量合并,实现多条流合并为一条的过程,以实现原始流的压缩整理。

  2.3.1聚合策略

  流量聚合有三个关键要素:聚合条件(F)、时间粒度(T)和聚合项(C)。满足相同聚合条件和时间粒度的流进行流量叠加,并保留聚合项。三元组聚合策略:,其中:

  按照实际流量分析的需要,从F,T,C中各取出一个值组成一个聚合策略。对于T的粒度要根据实际监控的时间长短和监测精度来设置,一般来说T=3min适合于当天实时流量的监测;T=30min用于一周流量的分析;T=3h用于一月内流量的分析。

  2.3.2聚合的实现

  对于一个新采集的原始流,必须能根据其所携带的聚合条件信息快速匹配是否已存在与其相同聚合条件的聚合流,若有则做流量叠加,若没有则创建一条新的聚合流。Hash表具有从Key快速映射到Value的特点,这种特点对于实时性较高的聚合非常有意义。图3为流量聚合的}Iash表设计。

  在图3中聚合条件(F)作为Key,聚合项(C)作为Hash函数的映射值,时间粒度(T)作为Hash表导出到数据库的时间。这样可以满足实时流量监测的需要,同时也压缩数据减少存储空间,提高数据的查询效率。

  3实际NetFlow流采集与流量监测

  在本系统设计的数据采集器的支持下,系统数据库为前端分析提供了充足且多样化的数据准备,前端程序只需通过简单的查询语句即可得到所需的数据集,简化了查询的工作量。利用该系统采集NetFlow数据包50000个,时间持续约7h,时间粒度为3min,主要检验丢包情况,以及聚合后压缩效率。这次采集无丢包发生,表1为该系统采集的数据结果。

  图4是系统由所采集的数据生成的该时段的流量监测图。

  4结

  语

  NetFlow数据流的海量特征使得服务器程序的效率至关重要,因此基于NetFlow的流量监测的主要任务是如何根据应用保存最重要的网络流特征以及如何更高效地实现数据检索。基于NetFlow特点,提出了一套适用于大流量网络的流量采集与聚合存储方案。流量采集通过多线程和缓冲区机制实现,有效提高了流量采集的可靠性。采集的原始流经聚合,并通过合理的分级存储策略进行存储组织,为前端的数据分析提供了全面支持。本系统在实际应用中取得了良好效果。下一步还将对采集和多级聚合存储方案进行改进,以丰富系统对网络流量统计分析功能,并力争为异常流量分析提供较为完善的数据支持。

  第二篇:

  Netflow的版本演进

  在Netflow技术的演进过程中,思科公司一共开发出了5个主要的实用版本,即:

  *NetflowV1,为Netflow技术的第一个实用版本。支持IOS11.1,11.2,11.3和12.0,但在如今的实际网络环境中已经不建议使用。

  *NetflowV5,增加了对数据流BGPAS信息的支持,是当前主要的实际应用版本。支持IOS11.1CA和12.0及其后续IOS版本。

  *NetflowV7,思科Catalyst交换机设备支持的一个Netflow版本,需要利用交换机的MLS或CEF处理引擎。

  *NetflowV8,增加了网络设备对Netflow统计数据进行自动汇聚的功能(共支持11种数据汇聚模式),可以大大降低对数据输出的带宽需求。支持IOS12.0(3)T,12.0(3)S,12.1及其后续IOS版本。

  *NetflowV9,一种全新的灵活和可扩展的Netflow数据输出格式,采用了基于模板(Template)的统计数据输出。方便添加需要输出的数据域和支持多种

  Netflow新功能,如MulticaseNetflow,MPLSAwareNetflow,BGPNextHopV9,NetflowforIPv6等。支持IOS12.0(24)S和12.3T及其后续IOS版本。在2003年思科公司的NetflowV9还被IETF组织从5个候选方案中确定为IPFIX(IPFlowInformationExport)标准。

  Netflow数据输出格式

  下面对网络流量和流向分析系统中最常使用的NetflowV5数据输出的数据包格式进行一个简单介绍。

  下图为Netflow输出数据包的包头格式:

  下图为包含在每个NetflowV5输出数据包中的具体数据流的流量和流向统计信息的数据格式:

  NetflowV9的数据输出格式与V5有较大区别,主要是因为NetflowV9采用了基于模板式的数据输出方式。网络设备在进行NetflowV9格式的数据输出时会向上层管理服务器分别发送数据包模板和数据流纪录。数据包模板确定了后续发送的数据流纪录数据包的格式和长度,便于管理服务器对后续数据包的处理。同时为避免传输过程中出现丢包或错误,网络设备会定期重复发送数据包模板给上层管理服务器。

  如何利用Netflow技术进行IP网的流量和流向分析

  为充分利用思科Netflow技术在网络流量和流向信息采集和分析领域的强大功能,运营商可以对现有网管中心的网络流量管理系统进行技术改造,在原有利用SNMP协议或RMON协议进行数据采集的基础上,用Netflow技术对其进行补充甚至进行替代。

  下面对利用Netflow技术在运营商网络中的几种典型使用方式进行介绍。

  互联网交换中心(NAP)流量和流向监控

  互联网交换中心作为专为ISP提供网络互联和交换网络通信的汇聚点,需要及时、准确地掌握各个ISP网络间的通信流量和流向数据,为交换中心合理规划路由策略和调整ISP的接入带宽提供依据。

  为此互联网交换中心的管理员可以在核心交换设备与每个ISP互联的网络端口上启动Netflow数据采集。如果ISP的接入端口为高速率端口(如速率超过

  OC-12),还可以选择采用数据包抽样Netflow采集方式,减少对核心交换设备的资源消耗和Netflow统计结果的输出数据量。

  通过进一步分析还可以发现,交换中心作为提供ISP互联的服务商,只需要关注下联ISP间的通信流量和流向统计,而无需进行更加详细的统计分析(如基于IP地址,IP网段,服务类型等的流量和流向分析)。由于每个ISP都有各自不同的BGPAS号码,所以交换中心管理员还可以进一步优化核心交换设备的Netflow数据输出选项:利用NetflowV8开始支持的统计数据内置汇聚功能,由核心交换设备对采集到的原始统计数据进行针对不同源和目的地BGPAS号的统计汇总,只把汇总后的统计结果发送给上层管理系统。这样不但可以大大减少输出给上层管理系统的统计数据量,还可以简化上层管理系统的数据分析负荷,使其能够更加简便快速地生成所需的统计报表。

  下图为一个典型的互联网交换中心利用Netflow技术进行ISP间通信流量和流向管理的系统结构图:

  运营商间互联链路的流量和流向监控

  每个电信运营商的网络都是通过互联链路与一个或多个其它运营商的网络相连接的。运营商为更好地服务自己的企业客户或个人用户,需要了解自己客户访问网络的模式以及访问网络资源的所在位置;同时运营商为了和其它运营商谈判签订双边或多边网络访问协议,也需要对双方相互访问的网络资源进行评估,这些都需要对双方网络互联链路进行通信流量和流向的监控和统计。

  为实现对运营商间互联链路的流量和流向管理,管理员可以在每个与其它运营商互联的边界路由器上启动Netflow,对互联网络端口进行数据采集。根据互联链路的端口速率,可以选择全Netflow采集或数据包抽样Netflow采集方式。

  由于管理员需要分析自己客户的详细网络访问纪录,了解他们需要获取的网络资源的确切位置,所以管理中心应该收集尽可能详尽的Netflow统计数据,意味着启动了Netflow数据采集的边界路由器不应做任何统计数据的汇聚,而应把Netflow原始统计记录直接发送给上层管理服务器。管理服务器在接收到各个边界路由器发送来的Netflow原始统计记录后,可以对数据进行统一分类处理或把原始记录存储到数据仓库中,由后续的数据挖掘应用程序对入库的数据进行细致分析,并生成运营商需要的统计报表。

  下图为运营商利用Netflow技术监控与其它运营商间互联链路流量和流向的管理系统实施示意图:

  企业客户流量计费

  随着中国宽带互联网的发展,越来越多的企业客户开始利用宽带网络改变公司的业务处理流程。电信运营商为了适应这种需求,需要提供比往更加丰富的服务内容,如不但提供数据接入业务,还可以提供IP电话、视频和网络存储等业务。由于不同类型业务的差异性,传统固定费率的计费方式也开始变得不能满足客户的需要。运营商需要跟随客户需求的转变,同步改变自己的运营支撑系统,提供多种灵活的业务计费方式供客户选择。

  利用Netflow技术,运营商可以精确统计出客户租用的接入链路上传送各种不同类型业务的通信流量,包括业务类型,服务等级,通信时间和时长,通信数据量等参数。这些详细的通信流量统计数据可以被运营商的计费和帐务系统进行处理,生成基于客户业务流量的计费账单。

  为实现客户的业务流量计费,需要在接入客户的所有接入路由器相应网络端口上都启动Netflow数据采集。由于计费数据要求高精确性,所以应该尽量采用全Netflow数据采集方式,避免使用数据包抽样的Netflow数据采集方式。

  接入路由器采集到的Netflow流量统计数据需要被统一发送给运营商的计费系统,由其进行不同类型业务的流量分类,汇总、批价和计费,最终由帐务系统生成提交给客户的计费账单。

  下图为利用Netflow技术采集客户业务流量信息的运营支撑系统结构图:

  运营商网络优化

  为提高客户对运营商网络的使用满意度,运营商需要及时了解自己网络的负载状况,正确预测可能出现的网络瓶颈,适时规划未来的网络升级,这些管理需求都可以通过利用Netflow技术对运营商网络进行准确的网络带宽使用率监测和网络流向分析来实现。

  由于主要是实现对运营商网络的优化,所以不一定需要对网络中传送的所有流量数据进行100%的监测。为减少对网络设备的资源占用,降低对上层管理系统的容量要求,可以选用数据包抽样的Netflow数据采集方式,对核心网络的重点链路进行统计。采集到的抽样统计数据可以利用上层管理系统进行全网集中处理,也可以分区域进行局部处理,分别计算出全网的通信流量和流向统计报表或部分区域的通信流量和流向统计报表。由此管理员可以迅速发现网络当前的使用状况,不同链路的使用率变化趋势,并可以此为依据规划网络是否需要调整和扩容,最终实现网络的优化使用。

  下图为利用Netflow技术进行运营商核心网络优化的管理系统结构图:

  上一篇:用Netflow进行IP网流量和流向分析(1)

  下一篇:菜鸟教程:子网掩码基础教学篇

  V5:

  FieldName

  Description

  Offset

  Length

  in

  Bytes

  SourceIPaddr

  DestinationIPaddr

  NexthoprouterIPaddress

  InboundsnmpIFindex

  IPaddressofthedevicethatsenttheflow

  IPaddressofthedestinationdevice

  n/a

  SNMPindexnumberthatidentifiestheInbound12interfaceonthePacketeerunit:

  1Inside(built-in)

  2Outside(built-in)

  3Upper_Inside(upperLEM)

  4Upper_Outside(upperLEM)

  5Lower_Inside(lowerLEM)

  6Lower_Outside(lowerLEM)

  SNMPindexnumberthatidentifiestheOutboundinterfaceonthePacketeerunit:

  1Inside(built-in)

  2Outside(built-in)

  3Upper_Inside(upperLEM)

  4Upper_Outside(upperLEM)

  5Lower_Inside(lowerLEM)

  6Lower_Outside(lowerLEM)

  PacketCount

  ByteCount

  TimeatStartofFlow

  TimeatEndofFlow

  SourcePort

  DestinationPort

  Onepadbyte

  Numberofpacketsintheflow

  Totalnumberofbytesintheflow

  ValueofSysUpTimewhenthefirstpacketintheflowwasseen(measuredinmilliseconds)

  ValueofSysUpTimewhenthelastpacketintheflowwasseen(measuredinmilliseconds)

  Portnumberofthedevicethattheflowwentoutof

  Portnumberofthedevicethattheflowwentto

  n/a

  Protocolstate(URG=32,ACK=16,PSH=8,TCPflags

  RST=4,SYN=2,FIN=1).Forexample,avalueof27indicatestheflowhadaSYN,ACK,PUSH,andFIN(2+16+8+1=27).

  Typeoflayer4protocol.Forexample,ICMP=1,TCP=6,Telnet=14,UDP=1316214OutboundsnmpIFindex

  242323436Layer4Protocol

  3IPTypeofService(ToS)/Diffserv

  Valuethatdesignatesspecialhandlingoftraffic(precedence,delay,throughput,andreliability)

  3SourceAutonomousSysID

  Dest.AutonomousSysID

  SourceMaskBitsCount

  DestinationMaskBitsCount

  TwoPadBytes

  n/a

  42n/a

  4n/a

  44n/a

  45n/a

  46FLOWHEADERFORMATBytes

  Contents

  Description

  NetFlowexportformatversionnumber

  Numberofflowsexportedinthispacket(1-30)

  Currenttimeinmillisecondssincetheexportdevicebooted

  Currentcountofsecondssince0000UTC197Residualnanosecondssince0000UTC1970-1version

  2-3count

  4-sys_uptime

  8-11unix_secs

  12-15unix_nsecs

  16-1flow_sequence

  Sequencecounteroftotalflowsseen

  221engine_type

  engine_id

  Typeofflow-switchingengine

  Slotnumberoftheflow-switchingengine

  Firsttwobitsholdthesamplingmode;remaining14bitsholdvalueof22-23sampling_interval

  samplinginterval

  FLOWRECORDFORMATBytes

  Contents

  0-3srcaddr

  SourceIPaddress

  4-dstaddr

  DestinationIPaddress

  Description

  8-11nexthop

  IPaddressofnexthoprouter

  12-13input

  SNMPindexofinputinterface

  14-15output

  SNMPindexofoutputinterface

  16-1dPkts

  Packetsintheflow

  20-23dOctets

  TotalnumberofLayer3bytesinthepacketsoftheflow

  24-2first

  28-31last

  SysUptimeatstartofflow

  SysUptimeatthetimethelastpacketoftheflowwasreceived

  32-33srcport

  TCP/UDPsourceportnumberorequivalent

  34-35dstport

  TCP/UDPdestinationportnumberorequivalent

  36333pad1Unused(zero)bytes

  tcp_flags

  CumulativeORofTCPflags

  prot

  tos

  IPprotocoltype(forexample,TCP=6;UDP=17)

  IPtypeofservice(ToS)

  Autonomoussystemnumberofthesource,eitheroriginorpeer

  Autonomoussystemnumberofthedestination,eitheroriginorpeer

  40-41src_as

  42-43dst_as

  4445src_mask

  Sourceaddressprefixmaskbits

  dst_mask

  Destinationaddressprefixmaskbits

  Unused(zero)bytes

  46-4pad2Netflow数据输出格式

  下面对网络流量和流向分析系统中最常使用的NetflowV5数据输出的数据包格式进行一个简单介绍。

  下图为Netflow输出数据包的包头格式:

  下图为包含在每个NetflowV5输出数据包中的具体数据流的流量和流向统计信息的数据格式:

  系统处理能力估算模型的分析

  :

  2.6.1计算数据的取定

  首先取定以下计算数据:

  a)一个NetFlowV5输出数据包的包长为1500Byte;

  b)一个NetFlowV5输出数据包中包括的Flow的数量为30;

  c)网络流量中数据包的平均包长为384Byte;

  d)采样率:500:1其中,NetFlowV5输出数据包的包长及其包括的Flow的数量是确定的,而网络流量中数据包的平均包长、采样率则需要根据具体的网络状况进行取定。

  2.6.2系统处理能力

  流量分析系统实现对NetFlow数据的采集和分析处理,本文采用“每秒处理Flow数”来衡量系统的处理能力。

  在估算系统处理能力时,首先要计算系统需要分析的流量大小(Gbit/s),然后根据前面已经取定的计算数据,系统每秒需要进行处理的Flow数量为:(系统需要分析的流量大小×1024×1024×1024)/(500×384×8)

  2.6.3流量数据采集带宽

  采集NetFlow数据需要占用一定的网络带宽。

  计算出系统每秒需要进行处理的Flow数量之后,就可以计算出采集NetFlow数据需要的网络带宽(Mbit/s)最大为:(系统每秒需要进行处理的Flow数量/30)×1500×8/1024/1024

篇七:容器网络流量研究教授

  容器云平台网络架构设计及优化

  目录

  1.

  容器平台网络模型....................................................................................................................................................................................11.1容器网络概述..............................................................................................................................................................................11.2容器网络分类介绍......................................................................................................................................................................21.2.1协议栈......................................................................................................................................................................21.2.2穿越方式..................................................................................................................................................................21.2.3隔离方法..................................................................................................................................................................31.3总结.............................................................................................................................................................................................42.

  基于Docker网络基础和实现原理........................................................................................................................................................43.

  Kubernetes网络场景分析....................................................................................................................................................................63.1容器到容器的通信......................................................................................................................................................................63.2Pod之间的通信.........................................................................................................................................................................3.3Pod到Service之间的通信....................................................................................................................................................3.4外部到内部的访问....................................................................................................................................................................113.5总结...........................................................................................................................................................................................124.

  Kubernetes网络组件介绍.................................................................................................................................................................134.1Kubernetes网络框架CNI.......................................................................................................................................................134.2CNI支持的开源组件................................................................................................................................................................134.2.1Flannel.....................................................................................................................................................................................134.2.2OVS......................................................................................................................................................................154.2.3Calico....................................................................................................................................................................154.2.4Contiv...................................................................................................................................................................14.3总结对比..................................................................................................................................................................................1容器平台的网络架构实践.......................................................................................................................................................................15.1某金融企业使用OpenShift(基于Kubernetes的商业版本)实现其业务上云

  .................................................................15.1.1整体网络架构图.....................................................................................................................................................15.1.2传统应用访问策略................................................................................................................................................195.1.3数据库访问方案及防火墙策略..............................................................................................................................205.2某金融企业两第三中心容器云网络架构.................................................................................................................................21优化实践........................................................................................................................................................................................22Ⅱ

  1.1容器网络概述

  1容器平台网络模型

  与传统的虚拟化相比,容器其生命周期更短、数量密度更高、集群变更速度更快。基于这些特性,容器平台网络就必须对集群节点之间的高速通信进行充分的考量。除此之外,在企业级的容器云平台上,承载众多租户的计算负载之间资源的安全隔离,也必须要考虑到的因素。

  显而易见,传统的物理网络架构无法满足容器平台高灵活性的需求,容器平台网络构建必须要有一种崭新的设计架构来满足,这便推动了容器平台网络设计的发展。

  容器网络发展到目前,已经形成了Docker主导的CNM模型和Google、CoreOS、Kubernetes主导的CNI模型两种模型共存的情况。CNM和CNI并不是网络实现,他们是网络规范和网络体系。从研发的角度来

  看就是一些接口,主要是和网络管理相关的问题。容器平台的网络方案,通常可以从协议栈、穿越方式、隔离方法三个维度去设计方案:

  图1网络架构示意图

  协议栈:

  ◎二层(桥接、ARP+MAC)

  ◎三层(路由转发)

  ◎二层+三层(节点内部二层转发、跨节点三层转发)

  穿越方式:

  ◎Overlay(隧道穿越底层基础设施)

  ◎Underlay(直接穿越底层基础设施)

  隔离方法:

  ◎VLAN

  ◎VXLAN

  1.2容器网络分类介绍

  1.2.1协议栈

  二层解决方案,常见于传统机房或者虚拟化场景中,针对ARP和MAC(桥接模式)学习,广播风暴是这个方案最核心要解决的问题。众所周知,二层广播,对整个集群中节点的数量也会有严格的限制。三层解决方案一般是基于BGP协议实现路由转发,通过自主学习完善整个数据中心的路由状态。这个方案的优势是IP穿透性,可以实现IP网络透传。因为基于IP,所以其优势在于规模性,具有非常优秀的扩展性。但在实际使用过程中,受限于各个企业自身网络安全的考量,例如生产网和开发测试网隔离,或者网络本身不支持BGP,那么这个方案就受限了。二层+三层的方案,集成了前面两种方案的优势(既解决了二层规模性扩展的问题,又解决三层网络隔离受限的问题),正成为容器云网络场景下首选的协议栈层级的解决方案。

  1.2.2穿越方式Underlay网络

  提到Underlay网络,就必须从以太网说起,以太网从最开始设计出来就是一个分布式网络,没有中心的控制节点,网路中的各个设备之间通过协议传递的方式学习网络的可达信息,由每台设备自己决定要如何转发,这直接导致了没有整体观念,不能从整个网络的角度对流量进行调控。由于要完成所有网络设备之间的互通,就必须使用通用的语言,这就是网络协议,RFC就是网络协议的法律,相当于国际法,各个设备供应商遵从国际法行事,就基本保证了整个网络世界的正常运行。Underlay就是当前数据中心网路基础转发

  架构的网络,只要数据中心网络上任意两点路由可达即可,指的是物理基础层。我们可以通过物理网络设备本身的技术改良、扩大设备数量、带宽规模等完善Underlay网络,其包含了一切现有的传统网络技术。

  Overlay网络

  Overlay技术可以分为网络Overlay,主机Overlay和混合式Overlay三大类。网络Overlay是指通过控制协议

  对边缘的网络设备进行网络构建和扩展,也就是本文所讲的Overlay网络技术。Overlay网络技术多种多样,一般采用TRILL、VXLAN、GRE、NVGRE等隧道技术。TRILL(TransparentInterconnectionofLots

  ofLinks)

  技术是电信设备厂商主推的新型环网技术;NVGRE(NetworkVirtualizationusingGenericRoutingEncapsu-lation)STT(StatelessTransportTunnelingProtocol)是IT厂商主推的Overlay技术;以及大家非常熟悉的VXLAN(Virtual

  Extensible

  LAN)等基于隧道的封装技术。由于这些也都是新增的协议,均需要升级现有网络设备才能支持。Overlay网络中应用部署的位置将不受限制,网络设备可即插即用、自动配置下发,自

  动运行,Overlay网络业务变化,基础网络不感知,并对传统网络改造极少,最为重要的是虚拟机和物理服

  务器都可以接入Overlay网络中。

  1.2.3根据基础设施划分

  VLAN(VirtualLocalAreaNetwork)意为虚拟局域网,是在交换机实现过程中涉及到的概念,由802.1Q标准所定义。由于交换机是工作在链路层的网络设备,连接在同一台交换机的终端处于同一个三层网中,同时也处于同一个广播域。当交换机接入较多的终端时,任意一台终端发送广播报文时(例如:ARP请求),报文都会传遍整个网络。对于规模较大的组网场景,广播报文的泛滥对于网络通信将会造成较大的影响。VLAN技术为这一问题提供了解决方案,VLAN将同一网络划分为多个逻辑上的虚拟子网,并规定当收到广播报文时,仅仅在其所在VLAN中进行广播从而防止广播报文泛滥。VLAN技术在链路层的层次中实现了广播域的隔离。

  随着大数据、云计算技术的兴起以及虚拟化技术的普及,VLAN技术的弊端逐渐显现出来,具体表现为

  如下3个方面:

  (1)

  虚拟化技术的发展促使大数据、云计算技术公司采用单个物理设备虚拟多台虚拟机的方式来进行组网,随着应用模块的增加,对于支持VLAN数目的要求也在提升,802.1Q标准中的最多支持4094个VLAN的能力已经无法满足当下需求。

  (2)

  公有云提供商的业务要求将实体网络租借给多个不同的用户,这些用户对于网络的要求有所不同,而不同用户租借的网络有很大的可能会出现IP地址、MAC地址的重叠,传统的VLAN仅仅解决了同一链路层网络广播域隔离的问题,而并没有涉及到网络地址重叠的问题,因此需要一种新的技术来保证在多个租户网络中存在地址重叠的情况下依旧能有效通信的技术。

  (3)

  虚拟化技术的出现增加了交换机的负担,对于大型的数据中心而言,单台交换机必须支持数十台以上主机的通信连接才足以满足应用需求,而虚拟化技术使得单台主机可以虚拟化出多台虚拟机同时运行,而每台虚拟机都会有其唯一的MAC地址。这样,为了保证集群中所有虚机可以正常通信,交换机必须保存每台虚机的MAC地址,这样就导致了交换机中的MAC表异常庞大,从而影响交换机的转发性能。

  基于以上需求,VXLAN技术被提出。

  VXLAN技术是网络Overlay技术的一种实现,对于Overlay技术,笔者的理解是:在基于物理网络拓扑的基础上通过一定的技术来构建虚拟的、不同于物理网络拓扑的逻辑网络,而物理网络的拓扑结构对于Over-

  lay终端而言是透明的,终端不会感知到物理网络的存在,而仅仅能感知到逻辑网络结构。对于终端的视角,网络的情况和直接通过物理设备实现逻辑拓扑的效果是相同的。VXLAN技术可以基于三层网络结构来构建二层虚拟网络,通过VLAN技术可以将处于不同网段网络设备整合在同一个逻辑链路层网络中,对于终端用户而言,这些网络设备似乎“真实地”部署在了同一个链路层网络中。

  相比VLAN技术,VXLAN技术具有以下的优势:

  (1)

  24位长度的VNI字段值可以支持更多数量的虚拟网络,解决了VLAN数目上限为4094的局限性的问题。

  (2)

  VXLAN技术通过隧道技术在物理的三层网络中虚拟二层网络,处于VXLAN网络的终端无法察觉到VXLAN的通信过程,这样也就使得逻辑网络拓扑和物理网络拓扑实现了一定程度的解耦,网络拓扑的配置对于物理设备的配置的依赖程度有所降低,配置更灵活更方便。

  (3)

  VLAN技术仅仅解决了二层网络广播域分割的问题,而VXLAN技术还具有多租户支持的特性,通过VXLAN分割,各个租户可以独立组网、通信,地址分配方面和多个租户之间地址冲突的问题也得到了解决。

  1.3总结

  通过本章的学习,可以初步了解容器网络相关的基础概念,主要涉及到了容器网络的协议栈、穿越方式以及隔离方式。针对协议栈,到底是采用二层互通,还是采用三层互通,还是结合两种方式的优点整合一个综合的方式取决于业务场景;针对穿越方式,是采用传统的Underlay网络,还是基于SDN的Overlay网络,和客户现场情况,以及硬件设备支持的情况都有比较大的关联;同样,隔离方式采用VLAN还是VXLAN,也和场景强相关。由此可见,容器云网络的设计,需要因地制宜,因材施教,从客户需求以及现场情况发出,才能制定出一个完善的解决方案。

  2基于Docker网络基础和实现原理

  Docker网络方案基于OpenStack平台网络解决方案,在不断的摸索中,形成了自己的一套网络模型。Docker网络在整个Docker技术栈中的位置如图:

  图2Docker生态技术栈

  在容器网络项目探索中,随着容器的发展,容器网络的发展也出现了分歧。主要分为两派,一个是Docker原生的CNM(ContainerNetworkModel),另一个是兼容性更好的CNI(ContainerNetworkInter-face)。CNI就是后来为Kubernetes等容器平台广泛推崇使用的接口技术,后面的章节会详细讲述。这里,我们简要介绍CNM。

  原先Docker的网络相关的代码是直接在Docker中的,网络功能也比较简单,对网络的诟病也是比较多。随着Docker越来越向平台化发展,将功能组件逐渐从Docker中解耦,Docker从1.7把网络相关的代码从Docker的代码中剥离出来新建了一个Libnetwork项目,引入了CNM的网络模型。

  图3CNM(ContainerNetworkModel)

  CNM模型下的Docker网络模型如上所示。它由Sandbox,Endpoint,Network三种组件组成。注意,该模型只是规定了三种组件各自的作用,他们都有各自的具体实现方式。Sandbox:Sandbox包含了一个

  Con-tainer的网络相关的配置,如网卡Interface,路由表等。Sandbox在Linux上的典型实现是

  Networknamespace。在Linux系统上的Docker环境中,Container,Networknamespace,Sandbox这三者是绑定在一起的。一个Sandbox可以包含多个Endpoint,这些Endpoint可以来自多个

  Network。

  Endpoint:Sandbox加入

  Network的方式是通过

  Endpoint完成的。Endpoint的典型实现方式是

  Vethpair,每个

  Endpoint都是由某个

  Network创建。创建后,它就归属于该Network。同时,Endpoint还可以加入一个Sandbox。加入后,相当于该Sandbox也加入了此Network。

  Network:Network的一种典型实现是Linuxbridge。一个Network可以创建多个Endpoint。将这些Endpoint加入到Sandbox,即实现了多个Sandbox的互通。

  总结起来:如果要想两个Container之间可以直接通信,那么最简单的办法就是由一个Network创建两个Endpoint,分别加入这两个Container对应的Sandbox。

  注意:不同Network之间默认的隔离性是docker通过设置Iptables完成的,通过改变Iptables的设置,可以使得两个Network互通。

  标准的Docker网络支持以下

  4类网络模式:

  host模式:使用--net=host指定

  container模式:使用--net=container:Name_or_ID指定none模式:使用--net=none指定

  bridge模式:使用--net=bridge指定,设为默认值

  桥接模式是最常见的Docker容器网络类型。在桥接模式下,Docker会为每个容器分配IP地址及创建虚拟以太网网卡对(Veth)。所有的容器都被连接到Docker在主机绑定的桥接设备上。被连接到同一个桥接设备的所有容器,都可以实现互联互通。如果容器要对外界提供服务,则用户需要将容器内的服务端口与宿主机的某一段口绑定。这样所有访问苏主机目标端口的请求都将通过Docker代理转发到容器的服务端,最终到达应用。

  除了桥接模式,Docker也支持主机(host)模式,让容器直接使用宿主机的网络设备。宿主机模式使得容器占用宿主机的端口资源,而且要求容器具有更高的权限,因此只有特殊需求的容器,才会使用这种模式,如OpenShift集群中的Router组件。Router主机需要监听计算节点上的端口,以接受外部的请求,因此Router组件的Pod的容器网络为主机模式。

  本章节主要介绍了Docker网络的情况,从Docker整个生态栈入手,分析了基于单机和集群两种不同场景的Docker网络,着重分析了在单机模式下Docker网络的情况(host/bridge/none/container)。

  Kubernetes网络场景分析

  在实际的业务场景中,业务组件之间的关系十分复杂,特别是微服务概念的提出,应用部署的粒度更加细小和灵活。为了支持业务应用组件的通信联系,Kubernetes网络的设计主要致力于解决以下场景:

  (1)紧密耦合的容器到容器之间的直接通信;

  (2)抽象的Pod到Pod之间的通信;

  (3)Pod到Service之间的通信;

  (4)集群外部与内部组件之间的通信;

  3.1容器到容器的通信

  在同一个Pod内的容器(Pod内的容器是不会跨宿主机的)共享同一个网络命名空间,共享同一个Linux协议栈。所以对于网络的各类操作,就和它们在同一台机器上一样,它们甚至可以用localhost地址访问彼此的端口。这么做的结果是简单、安全和高效,也能减少将已经存在的程序从物理机或者虚拟机移植到容器

  的难度。

  如图4中的阴影部分就是Node上运行着的一个Pod实例。容器1和容器2共享了一个网络的命名空间,共享一个命名空间的结果就是它们好像在一台机器上运行似的,它们打开的端口不会有冲突,可以直接用Linux的本地IPC进行通信。它们之间互相访问只需要使用localhost就可以。

  图4容器到容器间通信

  3.2Pod之间的通信

  每一个Pod都有一个真实的全局IP地址,同一个Node内的不同Pod之间可以直接采用对房Pod的IP地址通信,而不需要使用其他发现机制,例如DNS、Consul或者etcd。Pod既有可能在同一个Node上运行,也有可能在不用的Node上运行,所以通信也分为两类:同一个Node内的Pod之间的通信和不同Node上的Pod之间的通信。

  1)同一个Node内的Pod之间的通信

  如图,可以看出,Pod1和Pod2都是通过Veth连接在同一个Docker0网桥上的,它们的IP地址IP1、IP2都是从Docker0的网段上自动获取的,它们和网桥本身的IP3是同一个网段的。另外,在Pod1、Pod2的Linux协议栈上,默认路由都是Docker0的地址,也就是说所有非本地的网络数据,都会被默认发送到Docker0网桥上,由Docker0网桥直接中转,它们之间是可以直接通信的。

  图5同一个Node内的Pod关系

  2)不同Node上的Pod之间的通信

  Pod的地址是与Docker0在同一个网段内的,我们知道Docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行,因此要想实现位于不同Node上的Pod容器之间的通信,就必须想办法通过主机的这个IP地址来进行寻址和通信。另外一方面,这些动态分配且藏在Docker0之后的所谓“私有”IP地址也是可以找到的。Kubernetes会记录所有正在运行Pod的IP分配信息,并

  将这些信息保存在etcd中(作为Service的Endpoint)。这些私有IP信息对于Pod到Pod的通信也是十分重要的,因为我们的网络模型要求Pod到Pod使用私有IP进行通信。之前提到,Kubernetes的网络对Pod的地址是平面的和直达的,所以这些Pod的IP规划也很重要,不能有冲突。

  综上所述,想要支持不同Node上的Pod之间的通信,就要达到两个条件:

  (1)在整个Kubernetes集群中对Pod分配进行规划,不能有冲突;

  (2)找到一种办法,将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问。

  根据条件1的要求,我们需要在部署Kubernetes的时候,对Docker0的IP地址进行规划,保证每一个

  Node上的Docker0地址没有冲突。我们可以在规划后手工分配到每个Node上,或者做一个分配规则,由安

  装的程序自己去分配占用。例如Kubernetes的网络增强开源软件Flannel就能够管理资源池的分配。

  根据条件2的要求,Pod中的数据在发出时,需要有一个机制能够知道对方Pod的IP地址挂在哪个具体的Node上。也就是说要先找到Node对应宿主机的IP地址,将数据发送到这个宿主机的网卡上,然后在宿主

  机上将相应的数据转到具体的Docker0上。一旦数据到达宿主机Node,则哪个Node内部的Docker0便知道如何将数据发送到Pod。

  具体情况,如下图所示。

  图6跨Node的Pod通信

  在图6中,IP1对应的是Pod1,IP2对应的是Pod2。Pod1在访问Pod2时,首先要将数据从源Node的eth0发送出去,找到并到达Node2的eth0。也就是说先要从IP3到IP4,之后才是IP4到IP2的送达。

  3.3Pod到Service之间的通信

  为了支持集群的水平扩展、高可用,Kubernetes抽象出Service的概念。Service是对一组Pod的抽象,它会根据访问策略(LB)来访问这组Pod。

  Kubernetes在创建服务时会为服务分配一个虚拟的IP地址,客户端通过访问这个虚拟的IP地址来访问服务,而服务则负责将请求转发到后端的Pod上。这个类似于反向代理,但是,和普通的反向代理有一些不同

  :首先它的IP地址是虚拟的,想从外面访问需要一些技巧;其次是它的部署和启停是Kubernetes统一自动管理的。

  Service在很多情况下只是一个概念,而真正将Service的作用落实的是背后的kube-proxy服务进程。在Kubernetes集群的每个Node上都会运行一个kube-proxy服务进程,这个进程可以看作Service的透明代理兼负载均衡器,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。对每一个TCP类型的KubernetesService,kube-proxy都会在本地Node上建立一个SocketServer来负责接收请求,然后均匀发送到后端某个Pod的端口上,这个过程默认采用RoundRobin负载均衡算法。Kube-proxy和后端Pod的通信方式与标准的Pod到Pod的通信方式完全相同。另外,Kubernetes也提供通过修改Service的service.spec.-sessionA?nity参数的值来实现会话保持特性的定向转发,如果设置的值为“ClientIP”,则将来自同一个ClientIP的请求都转发到同一个后端Pod上。此外,Service的ClusterIP与NodePort等概念是kube-proxy通过Iptables和NAT转换实现的,kube-proxy在运行过程中动态创建与Service相关的Iptables规则,这些规则实

  现了ClusterIP及NodePort的请求流量重定向到kube-proxy进程上对应服务的代理端口的功能。由于Iptables机制针对的是本地的kube-proxy端口,所以如果Pod需要访问Service,则它所在的那个Node上必须运行kube-proxy,并且在每个Kubernetes的Node上都会运行kube-proxy组件。在Kubernetes集群内部,对ServiceClusterIP和Port的访问可以在任意Node上进行,这个因为每个Node上的kube-proxy针对该Service都设置了相同的转发规则。

  综上所述,由于kube-proxy的作用,在Service的调用过程中客户端无需关心后端有几个Pod,中间过程的通信、负载均衡及故障恢复都是透明的,如下图所示。

  图7Service的负载均衡转发

  访问Service的请求,不论是用ClusterIP+TargetPort的方式,还是用节点机IP+NodePort的方式,都会被节点机的Iptables规则重定向到kube-proxy监听Service服务代理端口。Kube-proxy接收到Service的访问请求后,会如何选择后端Pod?

  首先,目前kube-proxy的负载均衡只支持RoundRobin算法。该算法按照成员列表逐个选取成员,如果一轮循环完,便从头开始下一轮,如此循环往复。Kube-proxy的负载均衡器在RoundRobin算法的基础上还支持Session保持。如果Service在定义中指定了Session保持,则kube-proxy接收请求时会从本地内存中

  查找是否存在来自该请求IP的a?nityState对象,如果存在该对象,且Session没有超时,则kube-proxy将请求转向该a?nityState所指向的后端Pod。如果本地存在没有来自该请求IP的a?nityState对象,记录请求的IP和指向的Endpoint。后面的请求就会粘连到这个创建好的a?nityState对象上,这就实现了客户端IP会话

  保持的功能。

  接下来我们深入分析kube-proxy的实现细节。kube-proxy进程为每个Service都建立了一个“服务代理对象”,服务代理对象是kube-proxy程序内部的一种数据结构,它包括一个用于监听此服务请求的Socket-Server,SocketServer的端口是随机选择的一个本地空闲端口。此外,kube-proxy内部也建立了一个“负载均衡器组件”,用来实现SocketServer上收到的连接到后端多个Pod连接之间的负载均衡和会话保持能力。

  kube-proxy通过查询和监听APIServer中Service与Endpoint的变化来实现其主要功能,包括为新创建的Service打开一个本地代理对象(代理对象是kube-proxy程序内部的一种数据结构,一个Service端口是一个代理对象,包括一个用于监听的服务请求的SocketServer),接收请求,针对发生变化的Service列表,kube-proxy会逐个处理。下面是具体的处理流程:

  (1)如果该Service没有设置集群IP(ClusterIP),则不做任何处理,否则,获取该Service的所有端口定义列表(spec.ports域)

  (2)逐个读取服务端口定义列表中的端口信息,根据端口名称、Service名称和Namespace判断本地是否已经存在对应的服务代理对象,如果不存在就新建,如果存在且Service端口被修改过,则先删除Iptables中和该Service相关的的规则,关闭服务代理对象,然后走新建流程,即为该Service端口分配服务代理对象并为该Service创建相关的Iptables规则。

  (3)更新负载均衡器组件中对应Service的转发地址表,对于新建的Service,确定转发时的会话保持策略。

  (4)对于已经删除的Service则进行清理。

  11图8Kube-proxy与APIServer的交互过程

  3.4外部到内部的访问

  Pod作为基本的资源对象,除了会被集群内部的Pod访问,也会被外部使用。服务是对一组功能相同Pod的抽象,以它为单位对外提供服务是最合适的粒度。

  由于Service对象在ClusterIPRange池中分配到的IP只能在内部访问,所以其他Pod都可以无障碍地访问到它。但如果这个Service作为前端服务,准备为集群外的客户端提供服务,就需要外部能够看到它。Kubernetes支持两种对外服务的Service的Type定义:NodePort和LoadBalancer。

  (1)NodePort

  在定义Service时指定spec.type=NodePort,并指定spec.ports.nodePort的值,系统就会在Kubernetes集群中的每个Node上打开一个主机上的真实端口号。这样,能够访问Node的客户端就能通过这个端口号访

  问到内部的Service了。

  (2)LoadBalancer

  如果云服务商支持外接负载均衡器,则可以通过spec.type=LoadBalancer定义Service,同时需要指定负载均衡器的IP地址。使用这种类型需要指定Service的NodePort和ClusterIP。

  对于这个Service的访问请求将会通过LoadBalancer转发到后端Pod上去,负载分发的实现方式依赖于云服务商提供的LoadBalancer的实现机制。

  (3)外部访问内部Service原理

  12我们从集群外部访问集群内部,最终都是落在具体的Pod上。通过NodePort的方式就是将kube-proxy开放出去,利用Iptables为服务的NodePort设置规则,将对Service的访问转到kube-proxy上,这样

  kube-proxy就可以使用和内部Pod访问服务一样的方式来访问后端的一组Pod了。这种模式就是利用

  kube-proxy作为负载均衡器,处理外部到服务进一步到Pod的访问。而更常用的是外部均衡器模式。通常的实现是使用一个外部的负载均衡器,这些均衡器面向集群内的所有节点。当网络流量发送到LoadBalancer地址时,它会识别出这是某个服务的一部分,然后路由到合适的后端Pod。

  所以从外面访问内部的Pod资源,就有了很多种不同的组合。

  ◎

  外面没有负载均衡器,直接访问内部的Pod

  ◎

  外面没有负载均衡器,直接通过访问内部的负载均衡器来访问Pod

  ◎

  外面有负载均衡器,通过外部负载均衡器直接访问内部的Pod

  ◎

  外面有负载均衡器,通过访问内部的负载均衡器来访问内部的Pod

  第一种情况的场景十分少见,只是在特殊的时候才需要。我们在实际的生产项目中需要逐一访问启动的Pod,给它们发送一个刷新指令。只有这种情况下才使用这种方式。这需要开发额外的程序,读取Service下的Endpoint列表,逐一和这些Pod进行通信。通常要避免这种通信方式,例如可以采取每个Pod从集中的数据源拉命令的方式,而不是采取推命令给它的方式来避免。因为具体到每个Pod的启停本来就是动态的,如果依赖了具体的Pod们就相当于绕开了Kubernetes的Service机制,虽然能够实现,但是不理想。

  第二种情况就是NodePort的方式,外部的应用直接访问Service的NodePort,并通过Kube-proxy这个负载均衡器访问内部的Pod。

  第三种情况是LoadBalancer模式,因为外部的LoadBalancer是具备Kubernetes知识的负载均衡器,它会去监听Service的创建,从而知晓后端的Pod启停变化,所以它有能力和后端的Pod进行通信。但是这里有个问题需要注意,那就是这个负载均衡器需要有办法直接和Pod进行通信。也就是说要求这个外部的负载均衡器使用和Pod到Pod一样的通信机制。

  第四种情况也很少使用,因为需要经历两级的负载均衡设备,而且网络的调用被两次随机负载均衡后,更难跟踪了。在实际生产环境中出了问题排错时,很难跟踪网络数据的流动过程。

  (4)外部硬件负载均衡器模式

  在很多实际的生产环境中,由于是在私有云环境中部署Kubernetes集群,所以传统的负载均衡器都对Service无感知。实际上我们只需要解决两个问题,就可以将它变成Service可感知的负载均衡器,这也是实际系统中理想的外部访问Kubernetes集群内部的模式。

  ◎

  通过写一个程序来监听Service的变化,将变化按照负载均衡器的通信接口,作为规则写入负载均衡

  器。

  13◎

  给负载均衡器提供直接访问Pod的通信手段。如下图,说明了这个过程。

  图9自定义外部负载均衡器访问Service

  这里提供了一个ServiceAgent来实现Service变化的感知。该Agent能够直接从etcd中或者通过接口调用APIServer来监控Service及Endpoint的变化,并将变化写入外部的硬件负载均衡器中。

  同时,每台Node上都运行着有路由发现协议的软件,该软件负责将这个Node上所有的地址通过路由发

  现协议组播给网络内的其他主机,当然也包含硬件负载均衡器。这样硬件负载均衡器就能知道每个Pod实例的IP地址是在哪台Node上了。通过上述两个步骤,就建立起一个基于硬件的外部可感知Service的负载均衡器。

  具体的案例,可以参见第五章的实践部分。

  3.5总结

  本章重点介绍了Kubernetes网络的各种场景,包括容器之间、Pod之间、Pod到Service、外部到内部的这4种场景下,不同的通信模式。在设计Kubernetes容器平台的时候,建议按照这些通信模式,根据具体的场景,逐一比对选择合适的解决方案。其中,需要注意的是外部到内部的访问,既可以通过NodePort,也可以通过LoadBalancer的方式亦或是Ingress模式,需要按照具体的场景来分析。

  NodePort服务是暴露服务的最原始方式,会在所有节点上打开特定的端口,并且发送到此端口的任何流量都将转发到该服务。这种方法有很多缺点:每个端口只能有一个服务;默认只能使用端口30000~

  32767;如果节点IP地址发生更改,则会带来问题。由于这些原因,不建议在生产中使用这种方法。如果服务可用性不是特别关注,或者特别关注成本,则这个方案比较合适。

  LoadBalancer是服务暴露的标准方式,将会启动一个网络负载均衡器,提供一个将所有流量转发到服

  14务的IP地址。如果直接暴露一个服务,这是默认的方法。指定的端口上所有的流量将被转发到该服务,没有过滤、路由等。这就意味着可以发送几乎任何类型流量,如HTTP、TCP、UDP、Websocket、gRPC或其

  他。这个方式最大的缺点是,使用LoadBalancer公开的每项服务都将获得自己的IP地址,并且必须为每个

  服务使用一个LoadBalancer,这将会付出比较大的代价。

  Ingress实际上不是一种服务。相反,它位于多个服务之前,充当集群中的“智能路由器”或入口点。默认的Ingress控制器将会启动一个HTTP(s)负载均衡器。这将可以执行基于路径和基于子域名的路由到后端服务。Ingress可能是暴露服务最强大的方式了,但也可能是最复杂的。如果希望在相同的IP地址下暴露多个服务,并且这些服务都使用相同的L7协议,则Ingress是最有用的。

  Kubernetes网络组件介绍

  4.1Kubernetes网络框架CNI

  基于Docker的Kubernetes平台为什么没有选择CNM作为其网络设计框架,毕竟大部分容器平台肯定会支持Docker的网络组件,为什么不使用相同的组件呢?这就要从Kubernetes平台设计初衷说起,Kuberne-tes是一个支持多容器的运行环境,而Docker只是其中一个容器而已。Docker网络驱动设计中,做了很多和Kubernetes不兼容的假设。

  例如,Docker中有“本地”驱动和“全局”驱动概念,“本地”驱动实现单机版,无法实现跨节点协作,“全

  局”驱动libkv可实现跨节点协作。但是,libkv接口太过于底层,而且架构模式也是Docker内部的量身定制版本,对于Kubernetes的应用会带来性能、可扩展性和安全性方面的问题。

  CNI(ContainerNetworkingInterface)提供了一种Linux的应用容器的插件化网络解决方案。最初是由rktNetworkingProposal发展而来。也就是说,CNI本身并不是完全针对Docker的容器,而是提供一种普适的容器网络解决方案。模型涉及两个概念:

  容器:拥有独立Linux网络命名空间的独立单元。比如rkt/docker创建出来的容器。

  网络(Networking):网络指代了可以相互联系的一组实体。这些实体拥有各自独立唯一的IP。这些实体可以是容器,是物理机,或者是其他网络设备(比如路由器)等。

  CNI的接口设计非常简洁,不需要守护进程,只有两个接口ADD/DELETE,通过一个简单的shell脚本就可以完成。相对于CNM的复杂设计,CNI更加适合快速开发和迭代。

  4.2CNI支持的开源组件

  4.2.1Flannel

  15Flannel之所以可以搭建Kubernetes依赖的底层网络,是因为它可以实现以下两点:

  它给每个node上的docker容器分配相互不想冲突的IP地址;

  它能给这些IP地址之间建立一个覆盖网络,同过覆盖网络,将数据包原封不动的传递到目标容器内。

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

  在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。

  这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。

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

  Flannel实质上是一种“覆盖网络(OverlayNetwork)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,默认的节点间数据通信方式是UDP转发。

  图10Flannel跨节点Pod通信图

  举个例子,上图是跨节点Pod通信。

  可以看到,Flannel首先创建了一个名为?annel0的网桥,而且这个网桥的一端连接Docker0网桥,另一端连接一个叫作?anneld的服务进程。?anneld进程并不简单,它上连etcd,利用etcd来管理可分配的IP地址段资源,同时监控etcd中每个Pod的实际地址,并在内存中建立了一个Pod节点路由表;它下连Docker0和物理网络,使用内存中的Pod节点路由表,将Docker0发给它的数据包包装起来,利用物理网络的连接将数据包投递到目标?anneld上,从而完成Pod到Pod之间的直接地址通信。

  164.2.2OVS

  OpenvSwitch是一个开源的虚拟交换机软件,有点像Linux中的bridge,但是功能要复杂的多。OpenvSwitch的网桥可以直接建立多种通信通道(隧道)。这些通道的简历可以很容易地通过OVS的配置命令实现。在Kubernetes、Docker场景下,主要是建立L3到L3点隧道。如下图所示。

  图11OVSwithGRE原理图

  首先,为了避免Docker创建的Docker0地址产生冲突(因为DockerDaemon启动且给Docker0选择子网地址时只有几个备选列表,很容易产生冲突),我们可以将Docker0网桥删除,手动建立一个Linux网桥,然后手动给这个网桥配置IP地址范围。

  其次,建立OpenvSwitch的网桥OVS,使用ovs-vsctl命令给OVS网桥增加GRE端口,在添加GRE端口时要将目标连接的NodeIP地址设置为对端的IP地址。对每一个对端IP地址都需要这么操作(对于大型集群网络,这可是个体力活,要做自动化脚本来完成)。最后,将OVS的网桥作为网络接口,加入Docker的网桥上(Docker0或者自己手工建立的新网桥)。

  重启OVS网桥和Docker的网桥,并添加一个Docker的地址段到Docker网桥的路由规则项,就可以将两个容器的网络连接起来了。

  OVS的优势是,作为开源虚拟交换机软件,它相对比较成熟和稳定,而且支持各类网络隧道协议,经过了OpenStack等项目的考验。另一方面,在前面介绍Flannel的时候可知

  Flannel除了支持建立Overlay网络,保证Pod到Pod的无缝通信,还和Kubernetes、Docker架构体系结合紧密。Flannel能够感知Kubernetes的Service,动态维护自己的路由表,还通过etcd来协助Docker对整个Kubernetes集群中Docker0的子网地址分配。而我们在使用OVS的时候,很多事情就需要手工完成了。无论是OVS还是Flannel,通过Overlay网络提供的Pod到Pod通信都会引入一些额外的通信开销,如果是对网络依赖特别重的应用,则需要评估对业务的影响。

  4.2.3Calico

  Calico是一个纯三层的数据中心网络方案(不需要Overlay),并且与OpenStack、Kubernetes、AWS、GCE等IaaS和容器平台都有良好的集成。Calico在每一个计算节点利用LinuxKernel实现了一个高效的vRouter来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个

  Calico网络内传播——小规模部署可以直接互联,大规模下可通过指定的BGProutere?ector来完成。这样保证最终所有的workload之间的数据流量都是通过IP路由的方式完成互联的。Calico节点组网可以直接利用

  1数据中心的网络结构(无论是L2或者L3),不需要额外的NAT,隧道或者OverlayNetwork。此外,Calico基于iptables还提供了丰富而灵活的网络Policy,保证通过各个节点上的ACLs来提供Workload的多租户隔离、安全组以及其他可达性限制等功能。下图是Calico的架构图。

  图12Calico架构图

  在满足系统要求的新配置的Kubernetes集群上,用户可以通过应用单个manifest文件快速部署Calico。如果您对Calico的可选网络策略功能感兴趣,可以向集群应用其他manifest,来启用这些功能。

  尽管部署Calico所需的操作看起来相当简单,但它创建的网络环境同时具有简单和复杂的属性。与Flannel不同,Calico不使用Overlay网络。相反,Calico配置第3层网络,该网络使用BGP路由协议在主机之间路由数据包。这意味着在主机之间移动时,不需要将数据包包装在额外的封装层中。BGP路由机制可以本地引导数据包,而无需额外在流量层中打包流量。

  除了性能优势之外,在出现网络问题时,用户还可以用更常规的方法进行故障排除。虽然使用VXLAN等技术进行封装也是一个不错的解决方案,但该过程处理数据包的方式同场难以追踪。使用Calico,标准调试工具可以访问与简单环境中相同的信息,从而使更多开发人员和管理员更容易理解行为。

  除了网络连接外,Calico还以其先进的网络功能而闻名。网络策略是其最受追捧的功能之一。此外,Calico还可以与服务网格Istio集成,以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。这意味着用户可以配置强大的规则,描述Pod应如何发送和接受流量,提高安全性并控制网络环境。

  如果对你的环境而言,支持网络策略是非常重要的一点,而且你对其他性能和功能也有需求,那么

  Calico会是一个理想的选择。此外,如果您现在或未来有可能希望得到技术支持,那么Calico是提供商业支持的。一般来说,当您希望能够长期控制网络,而不是仅仅配置一次并忘记它时,Calico是一个很好的选择。

  图13Calico功能模块图

  1Calico主要由Felix、etcd、BGPclient以及BGPRouteRe?ector组成

  ◎

  Felix,CalicoAgent,跑在每台需要运行Workload的节点上,主要负责配置路由及ACLs等信息来确保Endpoint的连通状态;

  ◎etcd,分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性;

  ◎BGPClient(BIRD),主要负责把Felix写入Kernel的路由信息分发到当前Calico网络,确保Work-load间的通信的有效性;

  ◎BGPRouteRe?ector(BIRD),大规模部署时使用,摒弃所有节点互联的mesh模式,通过一个或者多个BGPRouteRe?ector来完成集中式的路由分发。

  ◎calico/calico-ipam,主要用作Kubernetes的CNI插件

  4.2.4Contiv

  Contiv是思科开源的容器网络方案,是一个用于跨虚拟机、裸机、公有云或私有云的异构容器部署的开源容器网络架构,并与主流容器编排系统集成。Contiv最主要的优势是直接提供了多租户网络,并支持L2(VLAN),L3(BGP),Overlay(VXLAN)以及思科自家的ACI。

  图14Contiv架构图

  4.3总结对比

  1图15各种开源技术性能对比

  CalicoBGP方案最好,不能用BGP也可以考虑CalicoIPIPTunnel方案;如果是CoreOS系又能开UDPO?oad,Flannel是不错的选择;Docker原生Overlay还有很多需要改进的地方。

  容器平台的网络架构实践

  5.1某金融企业使用OpenShift(基于Kubernetes的商业版本)实现其业务

  上云

  25.1.1整体网络架构图

  图16整体网络架构图

  在DMZ和内网分别部署彼此独立的2套OpenShift,分别为内网和DMZ区两个网段,两套环境彼此隔离。DMZ区的OpenShift部署对外发布的应用,负责处理外网的访问。内网的OpenShift部署针对内网的应用,仅负责处理内网的访问。

  5.1.2传统应用访问策略

  方案推荐通过NodePort类型的Service为某个应用对外暴露一个服务端口。NodePort类型的Service会在集群中的所有节点上监听一个特定的端口,访问任意一个计算机节点的端口,即可访问内部容器中的服务。在集群的所有节点的这个端口都会预留给该应用所用。在F5VS的PoolMember中配置所有节点,通过Kee-palived来实现HA。应用系统和用户不用改变现有的访问方式。

  图17传统应用访问策略

  215.1.3数据库访问方案及防火墙策略

  内网计算节点可以直接访问数据库,DMZ区计算节点访问数据库有2种方案:

  (1)计算节点直接通过内网防火墙访问该应用数据库内网防火墙仅开通应用所在节点访问内部数据库的端口,例如本期方案中应用仅使用2个节点,则防火墙仅开通这2个节点访问数据库的权限。

  图18计算节点直接通过内网防火墙访问该应用数据库

  (2)计算节点经Outbound路由通过内网防火墙访问内网数据

  这Outbound路由在OpenShift中称之为EgressRouter

  图19经Outbound路由通过内网防火墙访问内网数据

  因此,内网防火墙仅开通应用所在节点访问内部数据库的端口,例如,应用A仅通过路由节点A和B访问内部数据库,则防火墙仅开通这2个节点访问A数据库的权限。

  22图20通过OutBoundRouter访问数据库

  5.2某金融企业两第三中心容器云网络架构

  图21某企业两第三中心容器云架构

  平台基于多集群管理和联邦集群特性,对两地三中心、同城双活、异地灾备等业务场景提供了原生的支持。平台以统一多集群管理为核心,可对接稳定快速的物理机服务器、资源利用率高的虚拟机、不同云环境下的云主机创建Kubernetes集群。支持运行多集群,保证集群的高可用。提供跨云的多集群统一管理,解决多云灾备问题,实现统一部署、统一发布以及统一运维。通过mirror联邦集群,为已经存在的集群进行组件

  23联邦集群。可以在联邦内选择在一个或多个集群创建。

  优化实践

  网络优化是一个非常复杂的话题,现实场景中,如果出现服务不可用的情况,往往都会怀疑到网络上面

  ——网络不可达,网络拥塞,网络设备失效等等。一个容器平台网络的高效稳定安全,涉及方方面面的设计

  考量。这里将我们在实践中的一些优化措施作了一些总结:

  (1)主节点优化

  在集群中,除了Pod之间的网络通信外,最大的开销就是master和etcd之间的通信了,因此:

  Master侧可以优化:

  ◎

  Master和etcd尽量部署在一起

  ◎

  高可用集群中,Master尽量部署在低延迟的网络里

  ◎

  确保**/etc/origin/master/master-con?g.yaml**里的etcds,第一个是本地的etcd实例Node侧可以优化:

  Node节点的配置主要在**/etc/origin/node/node-con?g.yaml**里,可以优化:iptables,synchronizationperiod,MTU值,代理模式。配合自文件里还可以配置Kubelet的启动参数,主要关注亮点pods-per-core和max-pods,这两个决定了Node节点的Pod数,两者不一致时,取小。如果数值过大(严重超读)会导致:

  ◎

  增加CPU消耗,主要是Docker和OpenShift自身管理消耗的◎

  降低Pod调度效率

  ◎

  加大了OOM的风险

  ◎

  分配PodIP出现异常

  ◎

  影

  响

  应

  用

  性

  能etcd节点:尽量和Master部署在一起,或者提供专网连接。

  (2)主机节点万兆网卡性能优化

  如果主机用万兆或者40Gbps,那么可以优化的方面:

  24◎

  通过直接路由,负责Pod间通信,不过需要手动维护Node节点添加删除时的路由变化

  ◎

  条件允许的话,可以考虑BGP的Calico网络方案

  ◎

  购置支持UDPO?oad的网卡,需要注意的是,使用了UDPO?oad网卡和非Overlay网络相比,延迟是不会减少的,只是减少了CPU开销,提到带宽吞吐。

  (3)IPIP模式的Flannel性能提升

  汲取了Flannel/Calico容器网络开源项目的优点,实现了基于IPIP和HostGateway的Overlay网络,具体性能—短链接VXLAN比host差33%,IPIP比host差23%,Gateway比host只差6%。具体参见下图:

  (4)使用指定的UnderlayIP优化

  图22IPIP模式Flannel性能提升

  FloatingIP指定宿主机提供的IP,将IP直接配置到容器中,有别于OpenStack(将FloatingIP配置到宿主机的网络空间再通过NAT转发)的实现,其性能更好,容器与物理机可以直接路由。Tunnel网卡在容器中创建,避免了使用NodePort带来的性能损耗。具体参见下图:

  图23使用指定的UnderlayIP优化

  (5)cgroup实现资源隔离

  25在cgroup提供的能力之上,实现了网络出入带宽、资源隔离的能力,并提供所有硬件资源的可弹性配置,使得容器硬件资源全维度可弹性配置,大度提升了应用的隔离性与稳定性。在实际的运营过程中,我们发现,用户往往不能很好的预先设置最急limit值,设置过大会导致资源浪费,设置过小又会导致业务性能损失甚至业务进程频繁OOM,弹性的优势在于,用户不需要配置limit值,系统可以自动将空闲资源交给业务容器使用。使得容器的稳定性、集群资源利用率均得到提升。

  图24cgroup对网络资源的优化

  如上图,某个cgroup网络繁忙时,能保证其设定配额不会被其他cgroup挤占;某个cgroup没有用满其配

  额时,其他cgroup可以自动使用其空闲的部分带宽;多个cgroup分享空闲带宽时,优先级高的优先占用,优先级相同时,配额大的占用多,配额小的占用少,减少为了流控而主动丢包。

  (6)基于DPDK技术实现对DDos攻击防护

  (7)网络带宽QoS相关

  网络带宽QoS主要是为了保证用户所申请的带宽资源,以及有效利用空闲的网络资源,尽可能提升用户带宽体验。那么我们可以做的事:

  基于LinuxTra?cControl并修改OVS,实现保证速率,最大速率;

  将小包按照MPU(MinimumPacketUnit)大小来处理

  同时,针对VXLAN小包处理性能不好,网络小包过多导致宿主机CPU过载,影响网络性能和稳定性的问题,通过限制容器网络的PPS(PacketPerSecond)来处理。

  26

篇八:容器网络流量研究教授

  基于PSO-混合核函数的SOM网络流量分类研究

  李涛;李娟

  【摘

  要】针对基于核函数的自组织特征映射SOM(Self-organizingfeatureMap)算法中核函数的单一性选取和核函数参数的不确定性,提出一种基于PSO-混合核函数的SOM算法.用两种核函数混合构造新的核函数,采用改进的粒子群算法PSO对核函数中的参数以及两种核函数的混合参数进行优化确定,并应用于网络流量数据.实验结果表明,基于PSO-混合核函数的SOM算法,相对于传统的SOM算法以及单一核函数SOM算法,分类的可靠性和稳定性有明显的提高.

  【期刊名称】《计算机应用与软件》

  【年(卷),期】2015(032)011【总页数】5页(P117-120,125)

  【关键词】自组织神经网络;混合核函数;粒子群算法;参数优化;网络流量

  【作

  者】李涛;李娟

  【作者单位】南京信息工程大学电子与信息工程学院

  江苏南京210044;南京信息工程大学电子与信息工程学院

  江苏南京210044【正文语种】中

  文

  【中图分类】TP393网络流量是网络业务的直接承载体[1]。对网络流量进行分类可以发现流量的瓶颈和拥塞的情况,检测到恶意攻击,使得网络用户得到更好的服务质量。近些年来,随着数据挖掘算法[2]在各行各业的广泛运用,根据流的统计特征,采用数据挖

  掘的方法对网络流量进行分类受到很大的关注,通过选取网络流量数据的特征属性,采用数据挖掘的方法对网络流量进行分类,分类的结果较好[3-5]。自组织神经网络SOM是一种无监督学习的竞争式网络,已经得到了广泛的应用[6]。当有外界信息输入时,它会对其产生不同的响应,从而对样本进行分类,但由于网络流量数据复杂的非线性特征,其在网络流量数据分类上的效果常很难令人满意。文献[6]采用基于RBF核函数的SOM分类方法对网络流量数据进行分类,虽然可以克服SOM网络在对高维非线性的网络流量数据进行分类时出现的弊端,但是没有考虑到核函数的单一性选取以及核函数参数的随机性选取所带来的问题对分类精度的影响。

  针对以上问题,本文提出一种基于混合核函数的SOM网络的分类方法对网络流量数据进行分类,并采用改进的粒子群算法PSO对分类模型中的参数进行优化确定,以解决核函数的单一性选取以及核函数参数的随机性选取所带来的问题,提高了网络流量数据的分类精度。

  芬兰Helsinki大学的KohonenT教授提出了一种SOM网络,又称Kohonen网络[7]。Kohonen认为,一个神经网络当有外界信息输入时,将会自动分为不同的对应区域,产生不同的响应,SOM网络正是根据这一看法提出的,其特点与人脑的自组织特性相类似[8]。

  SOM网络共有两层:输入层和输出层。

  输入层:输入层的节点数即样本的特征维数。

  输出层:输出层也叫竞争层。其神经元的排列有一维线阵、二维平面阵以及三维栅格阵等多种形式[8]。其中二维平面阵最常使用,它具有大脑皮层的形象,如图1所示。

  SOM算法在学习时有两个关键步骤,在随机初始化竞争层的连接权值之后,第一个关键步骤是计算输入样本与竞争层各神经元之间的欧氏距离,找到距离最近的神

  经元作为获胜神经元;第二个关键步骤是获胜神经元周围一定邻域内的神经元的权值要做相应调整。所以SOM算法学习时依赖输入样本和初始权值之间的欧氏距离来调整权值,但是对于线性不可分的网络流量数据集,采用传统SOM算法分类时,没有很好的可靠性和稳定性,如果将其映射到特征空间,可以在特征空间简化其复杂的非线性结构,从而实现更好的划分。

  1.1基于核函数的SOM网络

  1.2混合核函数选取和构建

  不同的样本,只有基于不同的核函数的SOM算法才能实现有效的划分。核函数主要分为两种:局部性核函数和全局性核函数。局部性核函数就是在测试点附近小范围内对核函数的值有影响,而全局性核函数即使远离测试点对核函数的值也有影响,是大范围的[9]。

  算法中常用的一些满足Mercer条件的核函数有:

  (1)多项式核函数

  (2)径向基核函数(RBF)

  (3)Sigmoid函数

  RBF函数就是一个典型的局部性核函数,而多项式核函数是一个典型的全局性核函数[9]。本文选取一个局部性核函数和一个全局性核函数,将两者混合起来,构造混合核函数,如下的命题[10]说明了混合核函数依然满足Mercer条件。

  设K1,K2是X×X上的核,X∈Rn,f(x)是X上的实值函数;φ(x):X→Rn。K3是Rn×Rn上的核,B是一个n×n维的对称半定矩阵,则下述函数是核函数。

  (1)K(x,y)=K1(x,y)+K2(x,y)

  (2)K(x,y)=K1(x,y)K2(x,y)

  (3)K(x,y)=K3(φ(x),φ(y))

  (4)K(x,y)=exp(K1(x,y))

  所以混合核函数K=λK1+(1-λ)K2满足Mercer条件,文中K1选取多项式核函数,K2选取径向基核函数,λ为混合参数,λ∈(0,1),则混合核函数为:

  K(x,y)=λ[(xT×y)+1]q+(1-λ)exp(-‖x-y‖2/σ2)(7)根据新的核函数式(7)结合式(2)、式(3)得到新的距离度量公式和权值调整公式。

  核函数的参数选取对SOM算法的性能和效率有很大的影响[11],混合参数的不同也会影响不同核函数的性能发挥。混合核函数中q,σ,λ的选取与模型训练精度有着密切的关系,因此选取合适的优化算法,搜索出最优的参数组合q,σ,λ,才能提高SOM分类模型的训练精度。

  2.1粒子群算法及改进

  粒子群算法(PSO)是一种有效的全局寻优算法,最早由美国的Kennedy和Eberhart于1995年提出[12]。其可描述为:假设需要优化n个参数,即确定粒子的位置和速度的维数为n,首先随机得到m个粒子Z={Z1,Z2,…,Zm},初始化粒子的位置Zi={zi1,zi2,…,zin},每个位置代表粒子刚开始找到的最优解pid={pi1,pi2,…,pin},每个粒子都有自己的速度,记作Vi={vi1,vi2,…,vin}。从每个粒子刚开始找到的最好的位置中找到最好的符合目标函数的位置得到全局最优解pgd={pg1,pg2,…,pgn}。粒子根据式(8)、式(9)不断改变自己的位置Zi和速度Vi,找寻新的解,如果搜到的新解比自己之前搜到的最优解好,则更新自己找到的最优解pid,如果自己搜到的最优解比全局最优解还要好,则更新全局最优解pgd。

  其中,vid(t+1)表示第i个粒子在t+1次迭代中第d维上的速度,ω为惯性权重,它使粒子保持运动惯性,传统ω的更新方式为ω=ωmax-(ωmax-ωmin)×t/tmax,其中ωmax,ωmin分别取0.9和0.4,tmax为最大迭代次数,η1,η2为加速常数,通常取为2,rand()为0~1之间的随机数。

  惯性权值ω对粒子群算法的收敛十分重要[12]。传统的线性减小ω的方法局部

  搜索能力不强,因此可能会错过全局最优解,采用非线性减小ω的方法代替传统方法,使得ω在全局搜索时刻保持较长时间较大值,从而提高全局搜索效率,在局部搜索时也能保持较长时间的较小值,提高局部搜索的精度。新的ω的更新方式变为:

  2.2改进PSO算法优化参数步骤

  首先我们需要自己构建与参数有关的目标函数,在训练SOM网络时,连接权值与样本值越接近,即‖X-Wj‖2越小,则连接权值越能代表样本,训练结果就越准确。因此我们构建目标函数为:

  其中l代表样本序号,c为样本总数,xl为第l个输入样本,wjl为与xl响应的连接权值,‖φ(xl)-φ(wjl)‖2为xl与wjl的特征空间距离。目标函数越小,说明训练结果越准确,用于分类的精度就越高。

  (1)确定q,σ,λ的取值范围,和粒子的速度变化界限[-Vmax,Vmax],初始化每个粒子(q,σ,λ)的Zi和Vi;

  (2)读入流量数据,适应度值设为fitness=k/J,k为常数,目标函数越小,粒子的适应度越大。通过训练SOM模型计算得出每个粒子的适应度,找出具有最大适应度的粒子,它对应的适应度值就是最初的全局极值pgd;

  (3)根据式(8)、式(9)调整粒子的Zi和Vi,且其中的ω按式(10)进行减小;

  (4)进行速度、位置限制,当Vid>Vmax或Vid<Vmin时,令Vid=Vmax或Vid=Vmin,当Zid>Zmax或Zid<Zmin时,Zid=Zmax,Vid=-Vid或Zid=Zmin,Vid=-Vid;

  (5)计算粒子在新位置的适应度,较之前位置的适应度以及群体最好位置的适应度大小,更好则更新pid和pgd;

  (6)如果找到足够好的位置,则输出最好的位置,否则返回(3)。

  3.1实验数据

  网络流量数据集包含匹配协议端口,解析协议内容和流的统计特征等特征属性,数据挖掘方法不依赖于匹配协议端口、解析协议内容来识别网络应用,而是利用流量在传输过程中流的统计特征进行识别。

  目前大多数关于网络流量的研究都是以文献[13]中基于流的248种属性作为区分标准[14-16],并以Moore等人在文献[13]中所用的实验数据集(简称Moore_set)中的13个流量类型作为研究对象,Moore_set数据集中每个样本都是从一条完整的TCP双向流抽取而来,一共包含248项属性,最后一项就是分类目标的属性,表明样本的流量类型。所以本文采用Moore_set作为实验数据集,为了减少算法的冗杂度,除去几种数据量非常小的流量类型,仅采用8类数据量较大的流量类型数据进行实验,分别是WWW,MAIL,BULK,DB,SERV,P2P,ATT,MULT。选取每种类型各100组数据,其中80组作为训练集,20组作为测试集。

  由于采用混合核函数,因此在进行训练时,处于[0,1]的数据最为灵敏。为了分类模型训练的效率,在建模之前对网络流量数据进行归一化处理:

  其中x表示原始流量数据,xmax、xmin表示最大值、最小值。

  3.2特征选择

  Moore_set数据集中每条网络流量数据有248个特征属性,如果全部选取,数据量较大,计算繁琐,采用文献[17]的FCBF算法从248个属性特征中选出8个合适的属性特征构成特征子集,作为SOM分类算法的输入向量。这8个特征子集分别是:①源端口号;②ACK报文总数;③PUSH报文总数;④MSS;⑤发送到初始窗口字节总数;⑥丢失数据;⑦重传最大数;⑧报文控制字节最小值。

  3.3参数设置

  首先确定SOM网络输入层8个神经元,竞争层采用二维平面,神经元数为

  20×20=400个,对SOM网络初始化:最大迭代次数取为2000次,初始学习率η0取为0.8,邻域内神经元初始学习率η′0取为0.2,邻域初始值N0取为8,本文使用MATLAB软件作为仿真环境。根据实验的初步验证,得到(q,σ,λ)的搜索区间为q∈[1,10],σ∈[0.001,30],λ∈[0,1],在PSO算法中设置种群规模ps=20,最大迭代次数为tmax=100,ωmax,ωmin分别取0.9和0.4,η1,η2取为2,适应度中的k设为6,Vmax通常设置为参数变化范围的10%~20%,这里设置为Vmax=[2,6,0.2]。

  图2描绘了惯性权值ω与迭代次数之间的变化关系,根据式(10)中n的选取不同,得到不同的变化曲线。有图2可知当n=5时,搜索刚开始时ω能保持较长时间的较大值,搜索快结束时ω也能保持较长时间的较小值。

  图3描绘了基于PSO算法优化混合核函数SOM模型参数在100次迭代寻优过程中的适应度值fitness=k/J的变化过程,J为目标值函数,连接权值与样本值越接近,目标函数越小,适应度值越大,说明训练结果越准确。

  从图3可以看出,当迭代次数达到67次的时候,最优适应度值基本不再变化,得到最优参数值q=4,σ=10,λ=0.53。

  采用本文算法和SOM算法以及分别基于三种核函数的SOM算法,其中多项式、径向基及Sigmoid核函数的参数值随机设置为q=2,σ=0.003,c=2,用于网络流量数据训练集上的正确率如表1、表2所示。

  从表1、表2可知,本文算法用在网络流量数据训练集上的准确率最高,传统SOM算法的准确率最低。基于任一核函数的SOM算法的准确率都高于传统SOM算法,说明将输入空间映射到特征空间时,SOM算法的原理同样适用,且更优于传统SOM算法;对于核函数的不同,基于多项式和基于径向基核函数的准确率相差不大,基于径向基核函数的准确率略高于基于多项式核函数的准确率,基于Sigmoid核函数的准确率较低,说明本文选取两种准确率相对较高的核函数混

  合构成新的核函数有一定的依据,并且将多项式和径向基核函数根据优化确定的混合参数λ混合起来,提高了SOM网络的训练精度。

  将训练后的模型应用于网络流量数据验证集,分别运行20次,为了验证和评价算法的性能,采用量化误差Eq[18]作为评判标准得到的相应评价指标比较如图4所示。

  定义量化误差:

  式(14)是针对基于核函数的SOM算法的量化误差。式(15)是针对传统的SOM算法的量化误差。其中c为输入样本总数,xl为第l个输入样本,wjl为与xl响应的连接权值,‖xl-wjl‖为xl与wjl的距离,‖φ(xl)-φ(wjl)‖为xl与wjl的特征空间距离。量化误差越小,说明连接权值越能准确代表输入样本。

  图4中o为SOM,+为sigmoid,*为多项式,◇为径向基,▽为PSO-混合。可以看出,传统SOM算法的量化误差变化幅度最大,基于任一核函数的SOM算法较传统的SOM算法,误差的变化幅度较小且相对平稳,说明对于非线性的网络流量数据,采用基于核函数的SOM算法将其映射到特征空间进行分类,不仅分类的结果较好,而且更加稳定。实验还发现基于PSO-混合核函数的SOM算法的量化误差较基于任一核函数的SOM算法都小,误差的变化也更加平稳,说明采用混合核函数作为新的核函数,并通过粒子群算法优化确定核函数的参数以及混合参数,与较单一的核函数相比,提高了网络流量数据分类的可靠性和稳定性。

  网络流量数据的非线性特征导致传统SOM算法分类的可靠性较差,基于核函数的SOM算法能够克服这一不足,但单一的核函数选取以及核函数参数的不确定性对分类结果有很大的影响。针对这一问题,本文提出了基于PSO-混合核函数的SOM算法,通过将两种不同的核函数混合起来构造新的核函数作为特征空间中的内积,将网络流量数据映射到特征空间,使得复杂的流量数据在特征空间得到简化,并采用改进粒子群算法(PSO)对核函数中的参数以及混合参数进行优化确定。

  实验结果表明,本文提出的算法相对于传统的SOM算法,以及基于单一核函数的SOM算法,在网络流量数据分类的可靠性和稳定性有很大的提高。

  【相关文献】

  [1]尹波,夏靖波,付凯.基于IPSO混沌支持向量机的网络流量预测研究[J].计算机应用研究,2012,12(11):4293-4295.[2]KaragiannisT,PapagiannakiK,FaloutsosM.BLINC:Multileveltrafficclassificationinthedark[C]//Philadelphia:ProcoftheACMSIGCOMM,2005:229-240.[3]MattiHirvonen,Jukka-PekkaLaulajainen.Two-phasednetworktrafficclassificationmethodforqualityofservicemanagement[C]//Procofthe13-thIEEEInternationalSymposiumonCon-sumerElectronics,2009:962-966.[4]PeterTeufl,UdoPayer,MichaelAmling.InFeCT-networktrafficclassification[C]//ProcofSeventhInternationalConfere-nceonNetworking,2008:439-444.[5]MooreAW,ZuevD.InternettrafficclassificationusingBayesiananalysistechniques[C]//Procofthe2005-ACMSIGMETRICSInt’lConfonMeasurementandModelingofComputerSystems,2005:50-60.[6]胡婷,王勇,陶晓玲.基于核函数的SOM网络流量分类方法[J].计算机工程与设计,2011,32(4):1195-1198.[7]呼大永,冯玉强,唐振宇,等.基于自组织神经网络和DEA的采购拍卖获胜者确定问题模型[J].系统工程理论与实践,2012,16(2):398-404.[8]任军号,吉沛琦,耿跃.SOM神经网络改进及在遥感图像分类中的应用[J].计算机应用研究,2011,11(3):1170-1172.[9]SmitsGF,JordanEM.ImprovedSVMregressionusingmixturesofkernels[C]//IEEEProcofthe2002-IntJointConfonNeuralNetworks,2002:2785-2790.[10]CristianiniN,Shawe-TaylorJ.Anintroductiontosupportvectormachines[M].CambridgeUniversityPress,2000.[11]章永来,史海波,尚文利.面向乳腺癌辅助诊断的改进支持向量机方法[J].计算机应用研究,2013,30(8):2372-2376.[12]陈崚,沈洁,秦玲.基于分布均匀度的自适应蚁群算法[J].软件学报,2003,14(8):1379-1387.[13]MooreAW,ZuevD.InternettrafficclassificationusingBayesiananalysistechniques[C]//Procofthe2005-ACMSIGMETRICSInt’lConfonMeasurementandModelingofComputerSystems,2005:50-60.[14]剌婷婷,师军.基于GA-CFS和AdaBoost算法的网络流量分类[J].计算机应用研究,2012,29(9):3411-3414.[15]顾成杰,张顺颐,高飞.基于混沌粒子群优化算法的认知网络流量分类方法研究[J].计算机应用与软件,2011,28(11):153-156,160.[16]柏骏,夏靖波,鹿传国,等.基于RVM的网络流量分类研究[J].电子科技大学学报,2014,13(2):241-246.[17]YuLei,LiuHuan.Featureselectionforhigh-dimensionaldata:Afastcorrelation-basedfiltersolution[C]//ProceedingsoftheTwentiethInternationalConferenceonMachineLearning,2003.[18]唐贤伦,仇国庆,李银国,等.基于粒子群优化和SOM网络的聚类算法研究[J].华中科技大学学报:自然科学版,2007,35(5):32-37.

推荐访问:容器网络流量研究教授 容器 网络流量 教授

版权所有:耀景文档网 2012-2024 未经授权禁止复制或建立镜像[耀景文档网]所有资源完全免费共享

Powered by 耀景文档网 © All Rights Reserved.。备案号:鲁ICP备12016148号-1