CN111049796A - 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 - Google Patents
一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 Download PDFInfo
- Publication number
- CN111049796A CN111049796A CN201911024826.0A CN201911024826A CN111049796A CN 111049796 A CN111049796 A CN 111049796A CN 201911024826 A CN201911024826 A CN 201911024826A CN 111049796 A CN111049796 A CN 111049796A
- Authority
- CN
- China
- Prior art keywords
- network
- cluster
- cni
- tenant
- container
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/46—Interconnection of networks
- H04L12/4641—Virtual LANs, VLANs, e.g. virtual private networks [VPN]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/70—Virtual switches
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及多租户网络技术领域,公开了一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法。通过本发明创造,提供了一种解决基于Kubernetes的容器PaaS平台的多租户二层网络隔离问题的新方法,可在不同租户之间的进行网络隔离,使每个租户只能访问自己的网络资源,不可访问其他租户的网络资源,从而解决了租户与其他租户服务间的网络隔离问题,保障了租户对自身服务访问的合法权益,禁止其他租户的恶意访问。
Description
技术领域
本发明属于多租户网络技术领域,具体涉及一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法。
背景技术
多租户是一种软件架构,指的是多个、多组不同用户共用一个基础资源池,实现软、硬件资源的共享。对于一个企业来说,多租户系统的意义在于,大家可以共用一套系统,而不是拆分成多个子系统独立管理,造成人力和计算资源的浪费。而多租户网络是云计算数据中心网络的必然需求,它按照云计算资源虚拟化的技术要求,对网络拓扑和链路进行虚拟化,并对网络资源实现按照策略的隔离和共享。
一直以来企业和云服务商一直使用虚拟化的云平台且以虚拟机的方式提供应用程序运行的环境。虚拟机化技术如KVM(Keyboard Video Mouse的缩写,KVM交换机通过直接连接键盘、视频和鼠标的端口,实现访问和控制计算机)、XEN(一个开放源代码虚拟机监视器,由剑桥大学开发,无需特殊硬件支持,就能达到高性能的虚拟化)和VMware技术等提供整个硬件层的虚拟化,虽然实现了资源的隔离与控制,但使用成本较高。目前,容器技术亦能提供资源的隔离与控制,并且更节约成本,所以容器技术必将是未来的应用运行环境的标准。随着容器技术的日益普及,越来越多的应用使用容器(以Docker为代表)的方式开发、部署和运维,给用户提供便捷的服务。
Kubernetes(有时简写K8s)是开源界容器应用管理、自动化部署、弹性伸缩和容器编排的事实标准。其累积了Google在生产容器应用中15年的宝贵经验。主要的功能是在更高的层次对Kubernetes服务和承载服务的实体(container)的部署、配置、可靠性进行管理,对应有Namespace(命名空间)、Pod(安排在节点上,包含一组容器和卷)、Deployment、Service(其定义一系列Pod以及访问这些Pod的策略的一层抽象,主要通过Label找到Pod组)等Kubernetes的资源供Application服务的提供者进行不同粒度上的配置和控制。
在网络层面,Kubernetes没有进入更底层的具体Container的网络互通互联的解决方案的设计中,而是将网络互通功能一分为二,主要关注Kubernetes的服务在网络中的暴露以及Pod本身网络的配置动作,但是Pod具体需要配置的网络参数以及Service与Pod之间的互通互联,则交给CNI来解决。CNI(Container Network Interface)的目的在于定义一个标准的接口规范,使得Kubernetes在增删Pod的时候,能够按照规范向CNI实例提供标准的输入并获取标准的输出,再将输出作为Kubernetes管理这个Pod网络的参考。
由此Kubernetes本身不具有太复杂的网络功能,从而能够将更多的经历投放在Kubernetes服务和承载服务的实体的管理上,最终能够对外呈现一个易于管理、可用性高的应用服务集群。
容器多租户网络(有时也称为多租户容器网络)是基于Kubernetes容器集群技术的PaaS(Platform-as-a-Service,平台即服务,是把应用服务的运行和开发环境作为一种服务提供的商业模式)平台必须要解决问题。现在很多CNI网络方案包括Flannel、Weave等都仅实现了网络的互联,没有解决多租户网络隔离的问题。这将导致各种不安全隐患的存在,以及不同租户之间的应用互相影响。一个应用的网络问题是导致整个集群瘫痪。所以容器多租户网络是一个无法绕行的问题,必须要作为非常重要的课程进行解决。
发明内容
为了解决基于Kubernetes的容器PaaS平台的多租户二层网络隔离的问题,使不同租户应用程序在二层网络层面不互通,本发明目的在于提供一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法。
本发明所采用的技术方案为:
一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,包括如下步骤:
S101.在K8s集群中的各个node节点上安装CCS-SDN服务程序,其中,所述K8s集群为K8s 1.6以上版本的集群且在各个node节点上运行有Open vSwitch,所述CCS-SDN服务程序为基于CCS集成开发环境而编写得到的软件定义网络协议;
S102.设置所述CCS-SDN服务程序的如下网络参数:Network、HostSubnetLength、ServiceNetwork和PluginName,其中,Network用于设置整个K8s集群中Pod网络的网段,HostSubnetLength用于设置各个node节点的子网长度,ServiceNetwork用于设置K8s集群中service的网段,该网段与K8s集群中由API server的参数service-cluster-ip-range所指定的网络保持一致,PluginName用于设置租户模式且设置为多租户模式;
S103.将所述CCS-SDN服务程序作为K8s集群中的daemonset运行起来;
S104.当K8s集群通过调度算法在某个node节点上启动CNI容器应用时,按照如下步骤S401~S402完成K8s集群的网络隔离:
S401.调度node节点上的kubelet来查看CNI配置文件,然后根据该CNI配置文件调用合适的CNI插件,其中,所述kubelet在调用CNI插件时会配置环境变量以支持CCS-SDN服务程序的二机制代码;
S402.CCS-SDN服务程序在接收环境变量后,创建相应的vethpair对,并使一端与CNI容器的网络命名空间打通,另一端与Open vSwitch的Br0连通,同时调用Open vSwitch交换机的ovs-vsctl指令将CNI容器的主机端虚拟网卡加入Open vSwitch的Br0,以及调用Open vSwitch交换机的ovs-ofctl指令来配置交换机的OpenFlow流表,以及对出入交换机对应端口的流量打上或者剥离对应的VxLAN ID,并且对不同VxLAN ID的数据流量互访进行直接drop。
优化的,在所述步骤S101中,使用yaml文件一键安装所述CCS-SDN服务程序,并通过获取的Pod和node运行状态来确认是否安装成功。
优化的,在所述步骤S102之前,搭建一个ETCD服务器或和K8s集群的API server共用一个ETCD服务器,其中,所述ETCD服务器存储有整个K8s集群的Pod网络规划且能够接受各个node节点的访问。
优化的,在所述步骤S103之前,在K8s集群的各个node节点上设置访问K8s集群中API server的环境变量,其中,所述环境变量用于使所述CCS-SDN服务程序能够与APIserver进行通信。
优化的,在所述步骤S103之前,若K8s集群使用的是非加密方式,则还设置KUBERNETES_MASTER,并把如下两个变量apiserver_vip和apiserver_port分别替换成系统的API server服务的ip和port。
优化的,在所述步骤S103之后且在K8s集群的Kubelet完成容器的创建或者删除后,调用CNI插件进行容器网络的设置。
优化的,在所述步骤S401之前,还包括如下步骤:
S400.各个节点运行的CCS-SDN服务程序分别在ETCD服务器中取出整个K8s集群的Pod网络规划,然后将由内部IPAM模块分配的IP地址作为生成的网段,以及生成可被K8s集群识别的CNI配置文件。
优化的,所述CCS-SDN服务程序还用于:
(1)监听ETCD服务器的命名空间的变化,为不同的K8s集群命名空间分配不同的VxLAN ID,并在命名空间创建时关联未分配的VxLAN ID,在命名空间删除时,取消对应命名空间与对应VxLAN ID的关联关系;
(2)创建网络基础环境,包括Open vSwitch网桥Bri0,以及创建内部端口tun0、vxlan端口vxlan0,并通过veth pair把Open vSwitch网桥与Docker Deamon创建的Linux网桥进行连接;
(3)用于本地node节点启动的Docker进程与集群内部容器互通;
(4)监听K8s集群中Service对象的创建、销毁和更改事件,并通过Open vSwitch命令来设置流表规则,使Pod能够通过tun0访问Service的虚拟IP地址。
具体的,所述K8s集群的多租户容器网络生产环境包括有外部网络、管理网络、IPMI网络、SDN网络和存储网络;
所述外部网络用于集群内部和集群外部的流量访问到集群外部的资源或集群外部对象访问集群内部应用或资源;
所述管理网络用于作为集群内部网络,实现集群内部的API访问;
所述IPMI网络用于服务器节点的管理;
所述SDN网络用于集群内部Pod之间的通信,承载VxLAN Overlay流量;
所述存储网络用于集群node节点访问基于网络的存储。
本发明的有益效果为:
(1)本发明创造提供了一种解决基于Kubernetes的容器PaaS平台的多租户二层网络隔离问题的新方法,可在不同租户之间的进行网络隔离,使每个租户只能访问自己的网络资源,不可访问其他租户的网络资源,从而解决了租户与其他租户服务间的网络隔离问题,保障了租户对自身服务访问的合法权益,禁止其他租户的恶意访问;
(2)可通过OVS虚拟交换机作为K8s集群内部网络数据的交换,而集群内部数据交换,则通过端口VxLAN 0进行通讯,以及集群外部通讯流量,通过tun0由集群私有或管理网络承载;
(3)整个OVS虚拟交换机通过Openflow规则进行数据包转发,实现了K8s相同命名空间中应用可以互访,而不同命名空间中的应用不能互相通讯的功能,同时由于一个用户可以拥有若干个K8s命名空间,通过不同命名空间网络的相互隔离,可以达成多租户网络的最终目的;
(4)同一个租户或不同租户下的多个命名空间,可以根据需要对网络进行打通,实现了在必要的情况下进行租户网络打通,进一步实现了隔离的最终目的和安全的共享;
(5)通过K8s Ingress Controller+Ngnix的方案实现了外部应用或用户对集群内部应用的访问,实现了应用对外能力的发布。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于Open vSwitch实现Overlay多租户CNI容器网络的方法流程示意图。
图2是本发明提供的K8s集群的多租户容器网络生产环境的网络规划图。
图3是本发明提供的本地node节点启动的Docker进程与集群内部容器互通的示意图。
图4是本发明提供的OVS的三大组件的结构示意图。
图5是本发明提供的OVS的核心组件的结构示意图。
图6是本发明提供的流表设计方案图。
图7是本发明提供的实现本机同一命名空间下容器之间的访问示意图。
图8是本发明提供的实现不同机器同一命名空间下容器的访问示意图。
图9是本发明提供的实现不同命名空间容器网络互通的示意图。
图10是本发明提供的实现集群内部容器访问外部网络的示意图。
图11是本发明提供的实现集群容器应用与Service之间的互通示意图。
图12是本发明提供的实现集群外部系统或用户访问集群内部资源的示意图。
图13是本发明提供的具体进行访问过程的示意图。
图14是本发明提供的利用CCS-SDN服务程序进行网络转发的总结示意图。
图15是本发明提供的调用CNI插件进行容器网络设置的流程示意图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步阐述。在此需要说明的是,对于这些实施例方式的说明用于帮助理解本发明,但并不构成对本发明的限定。本文公开的特定结构和功能细节仅用于描述本发明的示例实施例。然而,可用很多备选的形式来体现本发明,并且不应当理解为本发明限制在本文阐述的实施例中。
应当理解,在本文描述的一些流程中,包含了按照特定顺序出现的多个操作,但是这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如S101、S102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作同样按顺序执行或并行执行。
应当理解,尽管本文可以使用术语第一、第二等等来描述各种单元,这些单元不应当受到这些术语的限制。这些术语仅用于区分一个单元和另一个单元。例如可以将第一单元称作第二单元,并且类似地可以将第二单元称作第一单元,同时不脱离本发明的示例实施例的范围。
应当理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B三种情况,本文中术语“/和”是描述另一种关联对象关系,表示可以存在两种关系,例如,A/和B,可以表示:单独存在A,单独存在A和B两种情况,另外,本文中字符“/”,一般表示前后关联对象是一种“或”关系。
应当理解,当将单元称作与另一个单元“连接”、“相连”或“耦合”时,它可以与另一个单元直相连接或耦合,或中间单元可以存在。相対地,当将单元称作与另一个单元“直接相连”或“直接耦合”时,不存在中间单元。应当以类似方式来解释用于描述单元之间关系的其他单词(例如,“在……之间”对“直接在……之间”,“相邻”对“直接相邻”等等)。
本文使用的术语仅用于描述特定实施例,并不意在限制本发明的示例实施例。如本文所使用的,单数形式“一”、“一个”以及“该”意在包括复数形式,除非上下文明确指示相反意思。还应当理解术语“包括”、“包括了”、“包含”和/或“包含了”在本文中使用时,指定所声明的特征、整数、步骤、操作、单元和/或组件的存在性,并且不排除一个或多个其他特征、数量、步骤、操作、单元、组件和/或他们的组合存在性或增加。
还应当注意到在一些备选实施例中,所出现的功能/动作可能与附图出现的顺序不同。例如,取决于所涉及的功能/动作,实际上可以实质上并发地执行,或者有时可以以相反的顺序来执行连续示出的两个图。
在下面的描述中提供了特定的细节,以便于对示例实施例的完全理解。然而,本领域普通技术人员应当理解可以在没有这些特定细节的情况下实现示例实施例。例如可以在框图中示出系统,以避免用不必要的细节来使得示例不清楚。在其他实例中,可以不以不必要的细节来示出众所周知的过程、结构和技术,以避免使得示例实施例不清楚。
实施例一
如图1~15所示,本实施例提供的所述基于Open vSwitch实现Overlay多租户CNI容器网络的方法,可以但不限于包括如下步骤。
S101.在K8s集群中的各个node节点上安装CCS-SDN服务程序,其中,所述K8s集群为K8s 1.6以上版本的集群且在各个node节点上运行有Open vSwitch,所述CCS-SDN服务程序为基于CCS集成开发环境而编写得到的软件定义网络协议。
在所述步骤S101中,所述K8s集群即为搭建起容器多租户网络的且基于Kubernetes的容器集群,如图2所示,所述K8s集群的多租户容器网络生产环境可以但不限于包括有外部网络、管理网络、IPMI网络(Intelligent Platform Management Interface,智能平台管理接口)、SDN(Software Defined Network,软件定义网络)网络和存储网络;所述外部网络用于集群内部和集群外部的流量访问到集群外部的资源或集群外部对象访问集群内部应用或资源;所述管理网络用于作为集群内部网络,实现集群内部的API访问;所述IPMI网络用于服务器节点的管理;所述SDN网络用于集群内部Pod之间的通信,承载VxLANOverlay流量;所述存储网络用于集群node节点访问基于网络的存储。
在所述步骤S101中,所述node节点是K8s集群中的物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件:Kubelet——是主节点代理;Kube-proxy——Service使用其将链接路由到Pod;Docker或Rocket:Kubernetes使用的容器技术来创建容器。
在所述步骤S101中,所述CCS(Code Composer Studio)集成开发环境为由TI公司提供的现有高效集成开发环境。所述CCS-SDN服务程序的主要功能为:(A)监听内部IPAM(IPAddress Management,IP地址管理)模块分配的IP地址;(B)设置Open vSwitch,包括通过调用ovs-vsctl将基础容器的主机端虚拟网卡加入br0,和调用ovs-ofctl命令来设置Openflow的规则,实现不同项目之间的网络隔离,以及在必要的情况下进行租户内部或者租户外部项目之间的网络的打通;(C)监听ETCD(一个高可用的键值存储系统,主要用于共享配置和服务发现,是由CoreOS开发并维护的,灵感来自于ZooKeeper和Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性)服务器的命名空间的变化,为不同的K8s集群命名空间分配不同的VxLAN(Virtual Extensible LAN,是一种网络虚拟化技术,基于IP网络且采用"MAC in UDP"封装形式的二层VPN技术)ID,并在命名空间创建时关联未分配的VxLAN ID,在命名空间删除时,取消对应命名空间与对应VxLAN ID的关联关系;(D)创建网络基础环境,包括Open vSwitch网桥Bri0,以及创建内部端口tun0、vxlan端口vxlan0,并通过veth pair把Open vSwitch网桥与Docker Deamon创建的Linux网桥进行连接;(E)监听K8s集群中Service对象的创建、销毁和更改事件,并通过OpenvSwitch命令来设置流表规则,使Pod能够通过tun0访问Service的虚拟IP地址;(F)用于本地node节点启动的Docker进程与集群内部容器互通,如图3所示。
在所述步骤S101中,所述Open vSwitch一般可简称OVS,是一个高质量、多层的现有虚拟交换软件。它的目的是通过编程扩展支持大规模网络自动化,同时还支持标准的管理接口和协议。虚拟化应用普及,需要部署更多的虚拟化交换机,而费用昂贵的闭源虚拟交换机让用户不堪重负,多层虚拟化软件交换机Open vSwitch可用于生产环境,支持跨物理服务器分布式管理、扩展编程、大规模网络自动化和标准化接口,实现了和大多数商业闭源交换机功能类似的软件交换机。因此本次基于Kubernets的多租户容器网络方案的打造选择了OVS作为底层交换机,并结合VxLAN技术进行实现。如图4所示,展示了OVS的三大组件,如图5所示,展示了OVS的核心组件。
在所述步骤S101中,优化的,使用yaml文件一键安装所述CCS-SDN服务程序,并通过获取的Pod和node运行状态来确认是否安装成功。在前述方式中,具体使用yaml文件的命令可如下所示:kubectl apply-f https://github.com/tymfr/ccs-sdn/master/rootfs/ccs-sdn.yaml
上面命令成功返回后,可以通过下列查询命令来获取Pod和node的运行状态:
在确认安装成功后,完成CCS-SDN的部署。
S102.设置所述CCS-SDN服务程序的如下网络参数:Network、HostSubnetLength、ServiceNetwork和PluginName,其中,Network用于设置整个K8s集群中Pod网络的网段,HostSubnetLength用于设置各个node节点的子网长度,ServiceNetwork用于设置K8s集群中service的网段,该网段与K8s集群中由API server的参数
service-cluster-ip-range所指定的网络保持一致,PluginName用于设置租户模式且设置为多租户模式。
在所述步骤S102之前,为了使node节点能够在ETCD服务器中取出整个K8s集群的Pod网络规划,因此需要搭建一个ETCD服务器或和K8s集群的API server共用一个ETCD服务器,其中,所述ETCD服务器存储有整个K8s集群的Pod网络规划且能够接受各个node节点的访问。在搭建好ETCD服务器之后,可使用下列命令设置所述CCS-SDN服务程序的网络参数:
″Network″:″172.11.0.0/16″,"HostSubnetLength":10,
″ServiceNetwork″:″10.96.0.0/12″,"PluginName":″ccs-sdn-multitenant″}′
对于参数PluginName,ccs-sdn-multitenant表示多租户模式,ccs-sdn-subnet表示单租户模式。
S103.将所述CCS-SDN服务程序作为K8s集群中的DaemonSet运行起来。
在所述步骤S103中,DaemonSet是确保K8s集群中每个(部分)node节点运行一份pod副本,当node节点加入集群时创建Pod,当node节点离开集群时回收Pod。如果删除DaemonSet,其创建的所有Pod也被删除,DaemonSet中的Pod覆盖整个集群。
在所述步骤S103之前,在K8s集群的各个node节点上设置访问K8s集群中APIserver的环境变量,其中,所述环境变量用于使所述CCS-SDN服务程序能够与API server进行通信。此外,在所述步骤S103之前,若K8s集群使用的是非加密方式,则还设置KUBERNETES_MASTER,并把如下两个变量apiserver_vip和apiserver_port分别替换成系统的API server服务的ip和port,具体替换命令如下所示。
S104.当K8s集群通过调度算法在某个node节点上启动CNI容器应用时,按照如下步骤S401~S402完成K8s集群的网络隔离。
S401.调度node节点上的kubelet来查看CNI配置文件,然后根据该CNI配置文件调用合适的CNI插件,其中,所述kubelet在调用CNI插件时会配置环境变量以支持CCS-SDN服务程序的二机制代码。
在所述步骤S401之前,为了能够查看到所述CNI配置文件,则还包括如下步骤:S400.各个节点运行的CCS-SDN服务程序分别在ETCD服务器中取出整个K8s集群的Pod网络规划,然后将由内部IPAM模块分配的IP地址作为生成的网段,以及生成可被K8s集群识别的CNI配置文件。所述CNI配置文件可举例命名为:/etc/cni/net.d/999-ccs-sdn.conf,其内容如下所示:
此外,所述环境变量如下所示。
S402.CCS-SDN服务程序在接收环境变量后,创建相应的veth pair对,并使一端与CNI容器的网络命名空间打通,另一端与Open vSwitch的Br0连通,同时调用Open vSwitch交换机的ovs-vsctl指令将CNI容器的主机端虚拟网卡加入Open vSwitch的Br0,以及调用Open vSwitch交换机的ovs-ofctl指令来配置交换机的OpenFlow流表,以及对出入交换机对应端口的流量打上或者剥离对应的VxLAN ID,并且对不同VxLAN ID的数据流量互访进行直接drop。
在所述步骤S402中,如图6所示,具体流表设计参考了Openshift的流表设计方案。核心的流表配置如下所示。
通过前述步骤S101~S104及步骤S401~S402,可实现如下技术效果(1)~(6)。
(1)实现本机同一命名空间下容器之间的访问,如图7所示,同一主机下的相同K8s集群命名空间的容器互相通讯如Pod1和Pod2网络互通,数据包需要经过如下线路:Pod1端口eth0->Br0端口vethx1->Br0vethx2->Pod2端口eth0。使用ovs-ofctl-OOpenFlow13dump-flows br0。其中,Table 20会判断包类型(IP)、源地址(nw_src)、进来端口的ID(96),将其对应的VNI ID(VxLAN ID)(这里是命名空间创建的时候给其分配的租户ID)保存在REG0中。这意味着所有通过OVS端口进入OVS Br0网桥的且来自Pod的网络包都会被打上对口对应的VxLAN ID标签。表70会根据数据包的目的地址,也就是目的Pod的地址,将网络包的目的出口标记(这里为0x73,十进制为163)保存到REG2,同时设置其项目的VNIID到REG1(这里是0xae3238)。表80会检查报的来源VNI ID(REG0)和目的端口的VNI ID(REG1),将相符的合法的包转发到表70设置的出口,以完成转发。不符合则进行丢弃,此处实现了不同VNI ID也就是VxLAN ID的互相隔离。
前述配置流表的信息内容如下所示。
(2)实现不同机器同一命名空间下容器的访问,如图8所示,不同主机相同网络之间的数据访问,需要经过如下路径:Pod1eth0->br0vethxx->br0vxlan0->eth0->->eth0->vxlan0->vethxx->Pod2eth0。
发送端节点1的流表配置信息如下所示:
上述内容中,表21同样是将源Pod1的VNI ID保存在REG0中;表30会判断目的地址是不是集群的大的Pod的IP CIDR。表90会设置VNI ID为之前保存在REG0中的值,然后根据目的地址的网段(192.168.0.0/24),计算出其所在的节点的IP地址(这里是10.0.0.97)并设置为tun_dst,然后发到VxLAN 0,它会负责根据提供的信息来做VXLAN UDP包封装。
发送端节点2的流表配置信息如下所示:
上述内容中,表0会将发送到保存在NXM_NX_TUN_ID[0..31]中的源VNI ID取出来保存到REG0;表10会检查包的来源节点的地址;表30会检查包的目的地址是不是本机上Pod的网段;表70会根据目的地址,将目的VNI ID保存到REG1,将目的端口ID保存到REG2;表80会检查目的VNI ID和源VNI ID,如果相符的话,则将包转发到保存在REG2中的目的端口ID指定的端口;然后包就会通过veth管道进入目的Pod。
(3)实现不同命名空间容器网络互通,如图9所示,不同K8s集群命名空间的网络如果需要实现互通,仅需要把2个项目的VNI ID设置成一致就行了。
(4)实现集群内部容器访问外部网络,如图10所示,网络路径如下:PodA的eth0vethA->Br0->tun0->通过iptables实现SNAT->物理节点的eth0->互联网,其中,SNAT用于将容器发出的IP包的源IP地址修改为宿主机的eth0网卡的IP地址。
前述配置流表的内容如下。
(5)实现集群容器应用与Service之间的互通,如图11所示,集群容器应用访问流量通过某个端口Br0进入中,OpenFLOW流表的规则是将其从tun0中转发出去,进入IptablesService规则链选择Service后端的Pod IP地址,这里CCS-SDN服务程序会做DNAT,将目标IP地址修改为Pod的IP地址,然后再从tun0进入Br0,最后通过OVS VxLAN二层网络到达目的Pod。
(6)实现集群外部系统或用户访问集群内部资源,如图12所示,IngressController通过与Kubernetes API交互,动态地去感知集群中Ingress规则变化,然后读取他,按照他自己模板生成一段Nginx配置,再写到Nginx Pod里,最后进行reload,具体过程如图13所示
如图14所示,CCS-SDN服务程序在配置OpenFlow规则时,遵循以下规则:(a)到本地pod的,直接在br0中转发;(b)到本集群pod的,经过br0后发到vxlan0,封装为vxlan udp包经物理网卡发到对方节点;(c)到本地不受OpenShift SDN管理的docker容器的,暂时不涉及;(d)到集群外的,经过br0后发到tun0,经过iptables做SNAT,然后经物理网卡发出。由此利用CCS-SDN服务程序可以方便的在K8s集群上打造多租户网络,助力基于K8s的PaaS平台的研发。
此外,在所述步骤S103之后且在K8s集群的Kubelet完成容器的创建或者删除后,调用CNI插件进行容器网络的设置。具体设置流程如图15所示。
综上,采用本实施例所提供的基于Open vSwitch实现Overlay多租户CNI容器网络的方法,具有如下技术效果:
(1)本实施例提供了一种解决基于Kubernetes的容器PaaS平台的多租户二层网络隔离问题的新方法,可在不同租户之间的进行网络隔离,使每个租户只能访问自己的网络资源,不可访问其他租户的网络资源,从而解决了租户与其他租户服务间的网络隔离问题,保障了租户对自身服务访问的合法权益,禁止其他租户的恶意访问;
(2)可通过OVS虚拟交换机作为K8s集群内部网络数据的交换,而集群内部数据交换,则通过端口VxLAN 0进行通讯,以及集群外部通讯流量,通过tun0由集群私有或管理网络承载;
(3)整个OVS虚拟交换机通过Openflow规则进行数据包转发,实现了K8s相同命名空间中应用可以互访,而不同命名空间中的应用不能互相通讯的功能,同时由于一个用户可以拥有若干个K8s命名空间,通过不同命名空间网络的相互隔离,可以达成多租户网络的最终目的;
(4)同一个租户或不同租户下的多个命名空间,可以根据需要对网络进行打通,实现了在必要的情况下进行租户网络打通,进一步实现了隔离的最终目的和安全的共享;
(5)通过K8s Ingress Controller+Ngnix的方案实现了外部应用或用户对集群内部应用的访问,实现了应用对外能力的发布。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备执行各个实施例或者实施例的某些部分所述的方法。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
最后应说明的是,本发明不局限于上述可选的实施方式,任何人在本发明的启示下都可得出其他各种形式的产品。上述具体实施方式不应理解成对本发明的保护范围的限制,本发明的保护范围应当以权利要求书中界定的为准,并且说明书可以用于解释权利要求书。
Claims (9)
1.一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,包括如下步骤:
S101.在K8s集群中的各个node节点上安装CCS-SDN服务程序,其中,所述K8s集群为K8s1.6以上版本的集群且在各个node节点上运行有Open vSwitch,所述CCS-SDN服务程序为基于CCS集成开发环境而编写得到的软件定义网络协议;
S102.设置所述CCS-SDN服务程序的如下网络参数:Network、HostSubnetLength、ServiceNetwork和PluginName,其中,Network用于设置整个K8s集群中Pod网络的网段,HostSubnetLength用于设置各个node节点的子网长度,ServiceNetwork用于设置K8s集群中service的网段,该网段与K8s集群中由API server的参数service-cluster-ip-range所指定的网络保持一致,PluginName用于设置租户模式且设置为多租户模式;
S103.将所述CCS-SDN服务程序作为K8s集群中的daemonset运行起来;
S104.当K8s集群通过调度算法在某个node节点上启动CNI容器应用时,按照如下步骤S401~S402完成K8s集群的网络隔离:
S401.调度node节点上的kubelet来查看CNI配置文件,然后根据该CNI配置文件调用合适的CNI插件,其中,所述kubelet在调用CNI插件时会配置环境变量以支持CCS-SDN服务程序的二机制代码;
S402.CCS-SDN服务程序在接收环境变量后,创建相应的veth pair对,并使一端与CNI容器的网络命名空间打通,另一端与Open vSwitch的Br0连通,同时调用Open vSwitch交换机的ovs-vsctl指令将CNI容器的主机端虚拟网卡加入Open vSwitch的Br0,以及调用OpenvSwitch交换机的ovs-ofctl指令来配置交换机的OpenFlow流表,以及对出入交换机对应端口的流量打上或者剥离对应的VxLAN ID,并且对不同VxLAN ID的数据流量互访进行直接drop。
2.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,在所述步骤S101中,使用yaml文件一键安装所述CCS-SDN服务程序,并通过获取的Pod和node运行状态来确认是否安装成功。
3.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,在所述步骤S102之前,搭建一个ETCD服务器或和K8s集群的API server共用一个ETCD服务器,其中,所述ETCD服务器存储有整个K8s集群的Pod网络规划且能够接受各个node节点的访问。
4.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,在所述步骤S103之前,在K8s集群的各个node节点上设置访问K8s集群中API server的环境变量,其中,所述环境变量用于使所述CCS-SDN服务程序能够与APIserver进行通信。
5.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,在所述步骤S103之前,若K8s集群使用的是非加密方式,则还设置KUBERNETES_MASTER,并把如下两个变量apiserver_vip和apiserver_port分别替换成系统的API server服务的ip和port。
6.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,在所述步骤S103之后且在K8s集群的Kubelet完成容器的创建或者删除后,调用CNI插件进行容器网络的设置。
7.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,在所述步骤S401之前,还包括如下步骤:
S400.各个节点运行的CCS-SDN服务程序分别在ETCD服务器中取出整个K8s集群的Pod网络规划,然后将由内部I PAM模块分配的I P地址作为生成的网段,以及生成可被K8s集群识别的CNI配置文件。
8.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,所述CCS-SDN服务程序还用于:
(1)监听ETCD服务器的命名空间的变化,为不同的K8s集群命名空间分配不同的VxLANID,并在命名空间创建时关联未分配的VxLAN ID,在命名空间删除时,取消对应命名空间与对应VxLAN ID的关联关系;
(2)创建网络基础环境,包括Open vSwitch网桥Bri0,以及创建内部端口tun0、vxlan端口vxlan0,并通过veth pair把Open vSwitch网桥与Docker Deamon创建的Linux网桥进行连接;
(3)用于本地node节点启动的Docker进程与集群内部容器互通;
(4)监听K8s集群中Service对象的创建、销毁和更改事件,并通过Open vSwitch命令来设置流表规则,使Pod能够通过tun0访问Service的虚拟IP地址。
9.如权利要求1所述的一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法,其特征在于,所述K8s集群的多租户容器网络生产环境包括有外部网络、管理网络、IPMI网络、SDN网络和存储网络;
所述外部网络用于集群内部和集群外部的流量访问到集群外部的资源或集群外部对象访问集群内部应用或资源;
所述管理网络用于作为集群内部网络,实现集群内部的API访问;
所述IPMI网络用于服务器节点的管理;
所述SDN网络用于集群内部Pod之间的通信,承载VxLAN Overlay流量;
所述存储网络用于集群node节点访问基于网络的存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911024826.0A CN111049796B (zh) | 2019-10-25 | 2019-10-25 | 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911024826.0A CN111049796B (zh) | 2019-10-25 | 2019-10-25 | 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111049796A true CN111049796A (zh) | 2020-04-21 |
CN111049796B CN111049796B (zh) | 2022-01-07 |
Family
ID=70231774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911024826.0A Active CN111049796B (zh) | 2019-10-25 | 2019-10-25 | 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111049796B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111740869A (zh) * | 2020-08-19 | 2020-10-02 | 广东省新一代通信与网络创新研究院 | 基于物理网卡的kubernetes网络实现方法、系统、设备及介质 |
CN112073330A (zh) * | 2020-09-02 | 2020-12-11 | 浪潮云信息技术股份公司 | 一种云平台容器网络限流方法 |
CN112104499A (zh) * | 2020-09-14 | 2020-12-18 | 浪潮思科网络科技有限公司 | 一种容器网络模型构建方法、装置、设备及介质 |
CN112187660A (zh) * | 2020-08-31 | 2021-01-05 | 浪潮云信息技术股份公司 | 一种用于云平台容器网络的租户流量限制方法及系统 |
CN112448854A (zh) * | 2020-12-09 | 2021-03-05 | 中国—东盟信息港股份有限公司 | 一种kubernetes复杂网络策略系统及其实现方法 |
CN112788037A (zh) * | 2021-01-14 | 2021-05-11 | 中国工商银行股份有限公司 | 云环境中租户数据隔离方法及装置 |
CN113328922A (zh) * | 2021-06-16 | 2021-08-31 | 杭州数跑科技有限公司 | 一种跨多局域网的连通方法及装置 |
CN113342468A (zh) * | 2021-06-23 | 2021-09-03 | 山石网科通信技术股份有限公司 | 容器数据处理方法及装置 |
WO2021238256A1 (zh) * | 2020-05-27 | 2021-12-02 | 浪潮电子信息产业股份有限公司 | 一种应用隔离方法、系统、设备及计算机可读存储介质 |
CN114143258A (zh) * | 2021-11-22 | 2022-03-04 | 苏州博纳讯动软件有限公司 | 一种在Kubernetes环境下基于Open vSwitch的服务代理方法 |
CN114157668A (zh) * | 2020-08-17 | 2022-03-08 | 中国电信股份有限公司 | 多租户跨集群的组网方法、通信系统和可读存储介质 |
CN114422456A (zh) * | 2022-03-31 | 2022-04-29 | 阿里云计算有限公司 | 任务处理方法以及装置 |
CN114448937A (zh) * | 2022-01-28 | 2022-05-06 | 浙江大华技术股份有限公司 | 访问请求的响应方法和装置、存储介质 |
CN114500279A (zh) * | 2021-12-30 | 2022-05-13 | 天翼云科技有限公司 | 一种插件配置方法及装置 |
CN115189948A (zh) * | 2022-07-11 | 2022-10-14 | 北京志凌海纳科技有限公司 | 一种CaaS平台中容器网络插件的实现方法和系统 |
CN115277568A (zh) * | 2022-07-20 | 2022-11-01 | 重庆星环人工智能科技研究院有限公司 | 一种数据发送方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107864131A (zh) * | 2017-11-03 | 2018-03-30 | 郑州云海信息技术有限公司 | 一种实现Kubernetes集群多租户网络隔离的方法及系统 |
US20180234459A1 (en) * | 2017-01-23 | 2018-08-16 | Lisun Joao Kung | Automated Enforcement of Security Policies in Cloud and Hybrid Infrastructure Environments |
CN108989091A (zh) * | 2018-06-22 | 2018-12-11 | 杭州才云科技有限公司 | 基于Kubernetes网络的租户网络隔离方法、存储介质、电子设备 |
CN109561108A (zh) * | 2019-01-07 | 2019-04-02 | 中国人民解放军国防科技大学 | 一种基于策略的容器网络资源隔离控制方法 |
US10397255B1 (en) * | 2015-09-23 | 2019-08-27 | StackRox, Inc. | System and method for providing security in a distributed computation system utilizing containers |
CN110198231A (zh) * | 2018-05-08 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 用于多租户的容器网络管理方法和系统以及中间件 |
-
2019
- 2019-10-25 CN CN201911024826.0A patent/CN111049796B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10397255B1 (en) * | 2015-09-23 | 2019-08-27 | StackRox, Inc. | System and method for providing security in a distributed computation system utilizing containers |
US20180234459A1 (en) * | 2017-01-23 | 2018-08-16 | Lisun Joao Kung | Automated Enforcement of Security Policies in Cloud and Hybrid Infrastructure Environments |
CN107864131A (zh) * | 2017-11-03 | 2018-03-30 | 郑州云海信息技术有限公司 | 一种实现Kubernetes集群多租户网络隔离的方法及系统 |
CN110198231A (zh) * | 2018-05-08 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 用于多租户的容器网络管理方法和系统以及中间件 |
CN108989091A (zh) * | 2018-06-22 | 2018-12-11 | 杭州才云科技有限公司 | 基于Kubernetes网络的租户网络隔离方法、存储介质、电子设备 |
CN109561108A (zh) * | 2019-01-07 | 2019-04-02 | 中国人民解放军国防科技大学 | 一种基于策略的容器网络资源隔离控制方法 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021238256A1 (zh) * | 2020-05-27 | 2021-12-02 | 浪潮电子信息产业股份有限公司 | 一种应用隔离方法、系统、设备及计算机可读存储介质 |
CN114157668A (zh) * | 2020-08-17 | 2022-03-08 | 中国电信股份有限公司 | 多租户跨集群的组网方法、通信系统和可读存储介质 |
CN114157668B (zh) * | 2020-08-17 | 2023-11-17 | 中国电信股份有限公司 | 多租户跨集群的组网方法、通信系统和可读存储介质 |
CN111740869A (zh) * | 2020-08-19 | 2020-10-02 | 广东省新一代通信与网络创新研究院 | 基于物理网卡的kubernetes网络实现方法、系统、设备及介质 |
CN112187660A (zh) * | 2020-08-31 | 2021-01-05 | 浪潮云信息技术股份公司 | 一种用于云平台容器网络的租户流量限制方法及系统 |
CN112073330A (zh) * | 2020-09-02 | 2020-12-11 | 浪潮云信息技术股份公司 | 一种云平台容器网络限流方法 |
CN112104499A (zh) * | 2020-09-14 | 2020-12-18 | 浪潮思科网络科技有限公司 | 一种容器网络模型构建方法、装置、设备及介质 |
CN112104499B (zh) * | 2020-09-14 | 2023-05-02 | 浪潮思科网络科技有限公司 | 一种容器网络模型构建方法、装置、设备及介质 |
CN112448854A (zh) * | 2020-12-09 | 2021-03-05 | 中国—东盟信息港股份有限公司 | 一种kubernetes复杂网络策略系统及其实现方法 |
CN112448854B (zh) * | 2020-12-09 | 2023-04-18 | 中国—东盟信息港股份有限公司 | 一种kubernetes复杂网络策略系统及其实现方法 |
CN112788037A (zh) * | 2021-01-14 | 2021-05-11 | 中国工商银行股份有限公司 | 云环境中租户数据隔离方法及装置 |
CN112788037B (zh) * | 2021-01-14 | 2023-04-07 | 中国工商银行股份有限公司 | 云环境中租户数据隔离方法及装置 |
CN113328922A (zh) * | 2021-06-16 | 2021-08-31 | 杭州数跑科技有限公司 | 一种跨多局域网的连通方法及装置 |
CN113342468A (zh) * | 2021-06-23 | 2021-09-03 | 山石网科通信技术股份有限公司 | 容器数据处理方法及装置 |
CN113342468B (zh) * | 2021-06-23 | 2023-08-08 | 山石网科通信技术股份有限公司 | 容器数据处理方法及装置 |
CN114143258A (zh) * | 2021-11-22 | 2022-03-04 | 苏州博纳讯动软件有限公司 | 一种在Kubernetes环境下基于Open vSwitch的服务代理方法 |
CN114500279A (zh) * | 2021-12-30 | 2022-05-13 | 天翼云科技有限公司 | 一种插件配置方法及装置 |
CN114500279B (zh) * | 2021-12-30 | 2024-03-08 | 天翼云科技有限公司 | 一种插件配置方法及装置 |
CN114448937A (zh) * | 2022-01-28 | 2022-05-06 | 浙江大华技术股份有限公司 | 访问请求的响应方法和装置、存储介质 |
CN114422456A (zh) * | 2022-03-31 | 2022-04-29 | 阿里云计算有限公司 | 任务处理方法以及装置 |
CN114422456B (zh) * | 2022-03-31 | 2022-08-16 | 阿里云计算有限公司 | 任务处理方法以及装置 |
CN115189948A (zh) * | 2022-07-11 | 2022-10-14 | 北京志凌海纳科技有限公司 | 一种CaaS平台中容器网络插件的实现方法和系统 |
CN115277568A (zh) * | 2022-07-20 | 2022-11-01 | 重庆星环人工智能科技研究院有限公司 | 一种数据发送方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111049796B (zh) | 2022-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111049796B (zh) | 一种基于Open vSwitch实现Overlay多租户CNI容器网络的方法 | |
CN111756785B (zh) | 一种配置负载平衡器的系统及方法 | |
US11870642B2 (en) | Network policy generation for continuous deployment | |
CN110875848B (zh) | 控制器和用于配置虚拟执行元件的虚拟网络接口的方法 | |
US11171834B1 (en) | Distributed virtualized computing infrastructure management | |
KR101692890B1 (ko) | 범용 흐름을 변환하는 섀시 제어기 | |
US8959215B2 (en) | Network virtualization | |
CN110875844A (zh) | 用于虚拟执行元件的多虚拟网络接口支持 | |
WO2017173952A1 (zh) | 一种实现虚拟机统一管理及互通的方法、装置和系统 | |
JP7113006B2 (ja) | 分散顧客構内機器 | |
US20230107891A1 (en) | User interface for cloud native software-defined network architectures | |
CN105052113A (zh) | 针对网络设备的共同代理框架 | |
US20230104368A1 (en) | Role-based access control autogeneration in a cloud native software-defined network architecture | |
CN115801669A (zh) | 针对虚拟专用网的容器化路由协议进程 | |
EP4160409A1 (en) | Cloud native software-defined network architecture for multiple clusters | |
US20230336414A1 (en) | Network policy generation for continuous deployment | |
US11444836B1 (en) | Multiple clusters managed by software-defined network (SDN) controller | |
US20240223454A1 (en) | Network policy validation | |
US20230046070A1 (en) | Application awareness in a data network with network address translation | |
EP4160410A1 (en) | Cloud native software-defined network architecture | |
CN118282881A (zh) | 网络策略验证 | |
CN117099082A (zh) | 用于云原生软件定义网络架构的用户界面 | |
WO2023018552A1 (en) | Application awareness in a data network | |
CN115941593A (zh) | 用于云本地软件定义网络架构的虚拟网络路由器 | |
CN117278428A (zh) | 用于软件定义网络架构的度量组 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |