Network policy generation for continuous deployment
By introducing policy controllers into the SDN architecture, network policies are automatically generated and applied, and the problem of difficulty in managing network policies in the existing technology is solved, and efficient network policy management and automated deployment of distributed applications are realized.
Patent Information
- Application Number
- CN202510078697.2
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Priority Date
- 2022-03-31
- Filing Date
- 2022-05-31
- Publication Date
- 2025-04-29
AI Technical Summary
The prior art is difficult to achieve automated and unified management of network policies in a software-defined network (SDN) architecture, especially in multiple deployment scenarios of distributed applications.
The automatic generation of network policies is integrated with the deployment of configuration data through a policy controller, including determining the expected traffic patterns of distributed applications in the SDN architecture and automatically generating network policies that can be used by the data plane. This policy controller submits the network policy as configuration data to the configuration repository and applies it to the SDN architecture through the deployment system.
It realizes automated generation and verification of network policies in the SDN architecture, supports continuous deployment and integration of distributed applications, reduces the need for manual policy determination and configuration, and is suitable for larger application deployments with hundreds of different workloads.
Smart Images

Figure CN119906631A_ABST
Abstract
Description
[0001] This application is a divisional application with the application date of May 31, 2022, application number 202210612441.1, and invention name “Network policy generation for continuous deployment”, and all its contents are incorporated herein by reference.
[0002] CROSS-REFERENCE TO RELATED APPLICATIONS
[0003] This application claims the benefit of U.S. Patent Application No. 17 / 657,613, filed on March 31, 2022, which claims the benefit of Indian Provisional Patent Application No. 202141044924, filed on October 4, 2021, the entire contents of which are incorporated herein by reference. Technical Field
[0004] The present disclosure relates to a virtualized computing infrastructure, and more particularly, to a cloud native networking. Background Art
[0005] In a typical cloud data center environment, there is a large collection of interconnected servers that provide computing and / or storage capabilities to run various applications. For example, a data center may include facilities that host applications and services for users (i.e., customers of the data center). For example, a data center may host all infrastructure equipment, such as networking and storage systems, redundant power supplies, and environmental controls. In a typical data center, clusters of storage systems and application servers are interconnected via a high-speed switching fabric provided by one or more layers of physical network switches and routers. More sophisticated data centers provide user support equipment located in various physical hosting facilities for infrastructures located throughout the world.
[0006] Virtualized data centers are becoming the core foundation of modern information technology (IT) infrastructure. Specifically, modern data centers have a widely used virtualized environment in which virtual hosts such as virtual machines or containers, also referred to herein as virtual runtime elements, are deployed on and run on the underlying computing platforms of physical computing devices.
[0007] Virtualization within a data center or any environment including one or more servers can provide several advantages. One advantage is that virtualization can provide significantly improved efficiency. As the underlying physical computing devices (i.e., servers) become increasingly powerful with the advent of multi-core microprocessor architectures with a large number of cores per physical CPU, virtualization becomes easier and more efficient. A second advantage is that virtualization provides effective control over the computing infrastructure. As physical computing resources in computing environments such as cloud-based computing become replaceable resources, the provision and management of computing infrastructure becomes easier. As a result, enterprise IT staff often prefer virtualized computing clusters in data centers due to their management advantages in addition to the efficiency and increased return on investment (ROI) provided by virtualization.
[0008] Containerization is a virtualization solution based on operating system-level virtualization. Containers are lightweight and portable runtime elements for applications that are isolated from each other and from the host. Because containers are not tightly coupled to the host hardware computing environment, applications can be bound to container images and run as a single lightweight package on any host or virtual host that supports the underlying container architecture. Therefore, containers solve the problem of how to make software work in different computing environments. Containers provide a guarantee of continuous operation from one computing environment to another virtual or physical environment.
[0009] Due to the inherent lightweight nature of containers, a single host can typically support more container instances than traditional virtual machines (VMs). Typically, short-lived containers can be created and moved more efficiently than VMs, and containers can also be managed as groups of logically related elements (sometimes called "pods" for some orchestration platforms, such as Kubernetes). These container characteristics affect the demand for container networking solutions: the network should be agile and scalable. In the same computing environment, VMs, containers, and bare metal servers may need to coexist and enable communication between multiple deployed applications. Container networks should also not be aware of working with multiple types of orchestration platforms for deploying containerized applications.
[0010] Managing the deployment and infrastructure of computing infrastructure for application execution may involve two main roles: (1) Orchestration - used to automate the deployment, scaling, and operation of applications across a cluster of hosts and to provide computing infrastructure, which may include container-centric computing infrastructure; and (2) Network management - used to create virtual networks in the network infrastructure to enable packetized communications between applications running in virtual execution environments such as containers or VMs and between applications running in legacy (e.g., physical) environments. Software-defined networking facilitates network management. Summary of the invention
[0011] In general, techniques for generating and validating continuously deployed network policies are described. In some embodiments, a policy controller integrates automatic generation of network policies with deployment of configuration data, including network policies for a software defined network architecture. The policy controller can determine expected traffic patterns for distributed applications deployed to an SDN architecture, wherein the data plane does not apply firewall policies to packet flows between workloads of the distributed applications. Based on these traffic patterns, the policy controller can automatically generate network policies that can be used by the data plane to allow expected traffic patterns for distributed applications while rejecting other traffic patterns. The policy controller can submit the network policies as configuration data to a configuration repository, which prompts the deployment system to apply the configuration data including the network policies to the SDN architecture. In some cases, the configuration data is integrated with application deployment in the repository, thereby enabling consistent push-button deployment of application workloads and SDN architecture configurations to computing infrastructure.
[0012] The technology can provide one or more technical advantages that enable at least one practical application. For example, the technology can allow a policy controller and deployment system to provide integrated policy generation, management, and deployment with an SDN architecture system to facilitate continuous deployment and continuous integration relative to the configuration of the SDN architecture to support distributed applications. In this way, the technology can supplement existing DevOps (Development Operations) best practices for application development and apply them to network policy automation for distributed application deployment and configuration. This can reduce the need for manual policy determination and configuration and promote more scalable infrastructure configuration for larger application deployments that may have hundreds of different workloads. By integrating with a configuration repository, the technology generates the same SDN architecture environment for distributed applications for each deployment.
[0013] In an embodiment, a policy controller includes processing circuitry and is configured to: obtain flow metadata about packet flows exchanged between workloads of a distributed application deployed to the first SDN architecture system from a first software defined network (SDN) architecture system; identify a source endpoint workload and a destination endpoint workload of the packet flow using the flow metadata about a packet flow in the packet flow; generate a network policy rule to allow the packet flow from the source endpoint workload of the packet flow to the destination endpoint workload; and when the distributed application is deployed to a second SDN architecture system, add the network policy rule as configuration data of the second SDN architecture system to a configuration repository to cause the deployment system to configure the second SDN architecture system to have the network policy rule that allows the packet flow from the source endpoint workload to the destination endpoint workload.
[0014] In an embodiment, the method includes: obtaining, by a policy controller, flow metadata about packet flows exchanged between workloads of a distributed application deployed to the first SDN architecture system from a first software defined network (SDN) architecture system; using, by the policy controller, the flow metadata about a packet flow in the packet flow, identifying a source endpoint workload and a destination endpoint workload of the packet flow; generating, by the policy controller, a network policy rule to allow packet flows from the source endpoint workload of the packet flow to the destination endpoint workload; and when deploying the distributed application to a second SDN architecture system, adding, by the policy controller, the network policy rule as configuration data of the second SDN architecture system to a configuration repository, so that the deployment system configures the second SDN architecture system to have the network policy rule that allows packet flows from the source endpoint workload to the destination endpoint workload.
[0015] In an embodiment, a non-volatile computer-readable medium includes instructions for causing a processing circuit of a policy controller to: obtain flow metadata about packet flows exchanged between workloads of a distributed application deployed to the first SDN architecture system from a first software defined network (SDN) architecture system; identify a source endpoint workload and a destination endpoint workload of the packet flow using the flow metadata about a packet flow in the packet flow; generate a network policy rule to allow the packet flow from the source endpoint workload of the packet flow to the destination endpoint workload; and when the distributed application is deployed to a second SDN architecture system, add the network policy rule as configuration data of the second SDN architecture system to a configuration repository to cause the deployment system to configure the second SDN architecture system to have the network policy rule that allows the packet flow from the source endpoint workload to the destination endpoint workload.
[0016] The details of one or more embodiments of the disclosure are set forth in the accompanying drawings and the description below. Other features, objects, and advantages will be apparent from the description and drawings, and in the claims. BRIEF DESCRIPTION OF THE DRAWINGS
[0017] Figure 1 is a block diagram illustrating an exemplary computing infrastructure in which embodiments of the techniques described herein may be implemented.
[0018] Figure 2 is a block diagram illustrating an embodiment of a cloud-native SDN architecture for a cloud-native network in accordance with the techniques of this disclosure.
[0019] Figure 3 is a block diagram illustrating another view of components of SDN architecture 200 in further detail in accordance with techniques of this disclosure.
[0020] Figure 4is a block diagram illustrating example components of an SDN architecture in accordance with techniques of this disclosure.
[0021] Figure 5 is a block diagram of an exemplary computing device in accordance with the techniques described in this disclosure.
[0022] Figure 6 is a block diagram of an exemplary computing device operating as a computing node for one or more clusters of an SDN architecture system in accordance with the techniques of this disclosure.
[0023] Fig. 7A is a block diagram illustrating a control / routing plane for underlay and overlay network configuration using an SDN architecture in accordance with the techniques of this disclosure.
[0024] Figure 7B is a block diagram illustrating a configured virtual network connecting a pool of containers using tunnels configured in an underlying network in accordance with the techniques of this disclosure.
[0025] Figure 8 is a block diagram illustrating an example of a custom controller for custom resources configured for an SDN architecture according to the techniques of this disclosure.
[0026] Fig. 9 is a block diagram illustrating an exemplary flow of creating, viewing, and coordinating between custom resource types that depend on different custom resource types.
[0027] Fig.10 is a block diagram illustrating an exemplary distributed application deployed to the data plane of an SDN architecture in accordance with the techniques of this disclosure.
[0028] Fig.11 is a flow chart illustrating an exemplary mode of operation of an SDN architecture according to the techniques of this disclosure.
[0029] Fig.12 is a flow chart illustrating an exemplary mode of operation of an SDN architecture according to the techniques of this disclosure.
[0030] Fig.13 is a flow chart illustrating an exemplary mode of operation of an SDN architecture according to the techniques of this disclosure.
[0031] Like reference characters refer to like elements throughout the description and drawings. DETAILED DESCRIPTION
[0032] Figure 1is a block diagram of an exemplary computing infrastructure 8 that illustrates an example of the techniques described herein. Current implementations of software defined network (SDN) architectures for virtual networks present challenges to cloud-native adoption due to, for example, complexity of lifecycle management, high mandatory nature of resource analysis components, limited scalability of configuration modules, and no command line interface (CLI)-based (e.g., kubectl) interfaces. The computing infrastructure 8 includes a cloud-native SDN architecture system (or more simply, “SDN architecture”) described herein that addresses these challenges and modernizes the telecom cloud-native era. Exemplary use cases for cloud-native SDN architectures include 5G mobile networks and cloud and enterprise cloud-native use cases. The SDN architecture may include data plane elements implemented in computing nodes (e.g., servers 12) and network devices such as routers or switches, and the SDN architecture may also include an SDN controller (e.g., network controller 24) for creating and managing virtual networks. The SDN architecture configuration and control plane are designed as a scale-out cloud-native software with a container-based microservice architecture that supports hot upgrades.
[0033] Therefore, SDN architecture components are microservices, and in contrast to existing network controllers, the SDN architecture assumes an underlying container orchestration platform that manages the lifecycle of SDN architecture components. The container orchestration platform is used to build SDN architecture components; the SDN architecture uses cloud-native monitoring tools that can be integrated with cloud-native options provided by customers; the SDN architecture uses an aggregated API of SDN architecture objects to provide a declarative way of resources (i.e., custom resources). SDN architecture upgrades can follow a cloud-native model, and the SDN architecture can leverage Kubernetes constructs such as Multus, Authentication & Authorization, Cluster API, KubeFederation, KubeVirt, and Kata containers. The SDN architecture can support a pool of Data Plane Development Kit (DPDK) containers, and the SDN architecture can be extended to support Kubernetes with virtual network policies and global security policies.
[0034] For service providers and enterprises, the SDN architecture automates network resource configuration and orchestration to dynamically create highly scalable virtual networks and link virtualized network functions (VNFs) with physical physical functions (PNFs) to form differentiated service chains on demand. The SDN architecture can be integrated with an orchestration platform (e.g., orchestrator 23), such as Kubernetes, OpenShift, Mesos, OpenStack, VMware vSphere, and can be integrated with a service provider operations support system / business support system (OSS / BSS).
[0035] The SDN architecture described here implements a firewall policy framework. The firewall policy framework supports the use of tags to help simplify and abstract container workloads, such as Kubernetes container pools. While significantly enhancing user visibility and analytics capabilities, the firewall policy framework allows routing to be decoupled from security policies and provides multi-dimensional segmentation and policy portability. The firewall policy framework uses tags to enable multi-dimensional traffic segmentation between entities with security characteristics. Tags are key-value pairs associated with different entities in a deployment. Tags can be predefined or customized.
[0036] In some container orchestration platforms such as Kubernetes, network policies are pool-specific and apply to a pool or a group of pools. Network policies are specifications for how groups of pools are allowed to communicate with each other and with other network endpoint workloads. Network policy resources use labels to select pools and define rules that dictate what traffic is allowed to the selected pools. In Kubernetes:
[0037] Network policies can define traffic rules for a container pool in the ingress, egress, or both directions. By default, network policies are applied in the ingress direction if no direction is explicitly specified.
[0038] When applying a network policy to a container pool, the policy must have explicit rules that specify an allow list for permitted traffic in both the ingress and egress directions. Deny and drop all traffic that does not match an allow list rule.
[0039] Ability to apply multiple network policies to any container pool. Traffic matching any network policy must be allowed.
[0040] Network policies act on connections, not individual packets. For example, if the configured policy allows traffic from container pool A to container pool B, then return packets from container pool B to container pool A are allowed, even if the appropriate policy does not allow container pool B to initiate a connection to container pool A.
[0041] Ingress policy: Ingress rules consist of a source identifier and a protocol: the port type of traffic from the source that is allowed to be forwarded to the container pool. The source identifier can be of the following types:
[0042] ο Non-Conventional Internet Area Routing (CIDR) blocks - If the source IP address is from a CIDR block and the traffic matches the protocol:port, then traffic is forwarded to the container pool.
[0043] οKubernetes namespace - The namespace selector identifies the namespace whose container pool can send defined protocol:port traffic to the ingress pod.
[0044] ο Container Pool - The container pool selector identifies the container pool in the namespace that corresponds to the network policy. The pod can send matching protocol:port traffic to the ingress container pool.
[0045] ο Egress policy: This specifies an allowlist CIDR of specific protocol:port types that are permitted from the container pool targeted by the network policy to traffic of specific protocol:port types. The destination identifier can be of the following types:
[0046] ο CIDR Block - If the destination IP address is from a CIDR block and the traffic matches the protocol:port, then the traffic is forwarded to the destination.
[0047] οKubernetes Namespace - The namespace selector identifies the namespace whose container pools can send defined protocol:port traffic to the egress container pool.
[0048] o Container Pool - The container pool selector identifies the container pool in the namespace corresponding to the network policy that can receive matching protocol:port traffic from the egress container pool.
[0049] The techniques described above with respect to container pools can be applied to other types of workloads and workload deployment structures on other container orchestration platforms.
[0050] Kubernetes network policy and SDN architecture can be different in terms of the semantics of each semantically specified network policy. The key to effectively implementing Kubernetes network policy through SDN architecture firewall policy is to map corresponding configuration constructs between these two entities, as shown below:
[0051] Tags → Custom tags (one tag per tag)
[0052] Namespace → Custom Tag (one tag per namespace)
[0053] Network Policy → Firewall Policy (one firewall policy per network policy)
[0054] Rules Firewall Rules → (one firewall rule per network policy rule)
[0055] CIDR rules → address group
[0056] Cluster Default → Application Policy Set.
[0057] Parsing of Kubernetes network policy labels is straightforward. The representation of a pod in a firewall policy is exactly the same as in the corresponding Kubernetes network policy. Firewall policies process labels or tags, which are terms in the SDN architecture. They do not extend labels to IP addresses. For example, in the default namespace, if the network policy podSelectorspecifies:role=db, the corresponding firewall rule specifies the container pool as (role=db&&namespace=default). No other translations are performed to the container pool IP address or other addresses.
[0058] If the same network policy also has a namespaceSelector such as namespace=myproject, then the corresponding firewall rule represents the namespace as (namespace=myproject). No other transformations or rules representing the container pool are performed in the "myproject" namespace.
[0059] Likewise, each CIDR is represented by a rule. In effect, Kubernetes network policies are converted 1:1 to firewall policies. There is only one additional firewall rule created for each Kubernetes network policy. The purpose of this rule is to implement the implicit deny requirements of the network policy and no additional rules are created.
[0060] The cloud-based deployment and configuration implemented by the SDN architecture described herein can facilitate automatic generation and verification of network policies for continuous deployment. The network policy can be a Kubernetes resource and / or a firewall policy specified by the firewall policy framework implemented by the SDN architecture described in the present disclosure.
[0061] Typically, one or more data centers 10 provide an operating environment for applications and services at customer sites 11 (shown as "customer 11"), which have one or more customer networks coupled to the data centers through service provider networks 7. For example, each data center 10 may host infrastructure equipment such as networking and storage systems, redundant power supplies, and environmental controls. Service provider networks 7 are coupled to public networks 15, which may represent one or more networks managed by other providers, and thus, may form part of a large-scale public network infrastructure (e.g., the Internet). For example, public network 15 may represent a local area network (LAN), a wide area network (WAN), the Internet, a virtual LAN (VLAN), an enterprise LAN, a layer 3 virtual private network (VPN), an Internet Protocol (IP) intranet operated by a service provider operating service provider network 7, an enterprise IP network, or some combination thereof.
[0062] Although the customer sites 11 and the public network 15 are primarily shown and described as edge networks of the service provider network 7, in some embodiments, the customer sites 11 and one or more of the public network 15 may be tenant networks within any data center 10. For example, the data center 10 may host multiple tenants (customers) each associated with one or more virtual private networks (VPNs), wherein each tenant may implement one or more customer sites 11.
[0063] The service provider network 7 provides packet-based connectivity to attached customer sites 11, data centers 10, and public networks 15. The service provider network 7 may represent a network owned and operated by a service provider to interconnect multiple networks. The service provider network 7 may implement multi-protocol label switching (MPLS) forwarding, and in this instance, may be referred to as an MPLS network or MPLS backbone. In some instances, the service provider network 7 represents multiple interconnected autonomous systems, such as the Internet, that provide services from one or more service providers.
[0064] In some embodiments, each data center 10 may represent one of a plurality of geographically distributed network data centers that may be connected to each other via a service provider network 7, dedicated network links, dark fiber, or other connections. Figure 1 As shown in the example of , data center 10 may include facilities that provide network services to customers. Customers of the service provider may be collective entities such as businesses and governments or individuals. For example, a network data center may host network services for several enterprises and end users. Other exemplary services may include data storage, virtual private networks, traffic engineering, file services, data mining, science or supercomputing, etc. Although shown as a discrete edge network of the service provider network 7, elements in the data center 10 such as one or more physical network functions (PNFs) or virtualized network functions (VNFs) may be included in the core of the service provider network 7.
[0065] In this example, data center 10 includes storage and / or computing servers (or "nodes") interconnected via a switching fabric 14 provided by one or more layers of physical network switches and routers, and servers 12A-12X (herein, referred to as "servers 12") are depicted as coupled to top-of-rack TOR switches 16A-16N. Servers 12 are computing devices and may also be referred to herein as "computing nodes," "hosts," or "host devices." Although in Figure 1Only server 12A coupled to TOR switch 16A is shown in detail, however, data center 10 may include multiple additional servers coupled to other TOR switches 16 in data center 10.
[0066] In the illustrated example, the switch fabric 14 includes interconnected top-of-rack (TOR) (or other "leaf") switches 16A-16N (collectively, "TOR switches 16") coupled to a distribution layer of chassis (or "spine" or "core") switches 18A-18M (collectively, "chassis switches 18"). Although not shown, for example, the data center 10 may also include one or more non-edge switches, routers, hubs, gateways, security devices (such as firewalls, intrusion detection, and / or intrusion prevention devices), servers, computer terminals, laptops, printers, databases, wireless mobile devices such as cellular phones or personal digital assistants, wireless access points, bridges, cable modems, application accelerators, or other network devices. The data center 10 may also include one or more physical network functions (PNFs), such as physical firewalls, load balancers, routers, route reflectors, broadband network gateways (BNGs), mobile core network elements, and other PNFs.
[0067] In this example, the TOR switch 16 and the chassis switch 18 provide redundant (multi-homed) connections to the IP structure 20 and the service provider network 7 to the server 12. The chassis switch 18 aggregates traffic flows and provides connections between the TOR switches 16. The TOR switch 16 can be a network device that provides Layer 2 (MAC) and / or Layer 3 (e.g., IP) routing and / or switching functions. The TOR switch 16 and the chassis switch 18 can each include one or more processors and memories and can run one or more software processes. The chassis switch 18 is coupled to the IP structure 20, which can perform Layer 3 routing to route network traffic between the data center 10 and the customer site 11 through the service provider network 7. The switching architecture of the data center 10 is only an example. For example, other switching architectures can have more or fewer switching layers. The IP structure 20 may include one or more gateway routers.
[0068] The term "packet flow", "traffic flow", or simply "flow" refers to a collection of packets originating from a specific source device or endpoint and being sent to a specific destination device or endpoint. For example, a single flow of packets can be identified by a 5-tuple: <source network address, destination network address, source port, destination port, protocol>. Typically, the 5-tuple identifies the packet flow corresponding to the received packets. An n-tuple refers to any n items extracted from the 5-tuple. For example, a 2-tuple for a packet can refer to a combination of <source network address, destination network address> or <source network address, source port> for that packet.
[0069] Each server 12 may represent a computing server or a storage server. For example, each server 12 may represent a computing device configured to operate according to the techniques described herein, such as a server based on an x86 processor. The server 12 may provide a network function virtualization infrastructure (NFVI) for the NFV architecture.
[0070] Any of the servers 12 may be configured with a virtual execution element, such as a container pool or a virtual machine, by virtualizing the server's resources to provide a degree of isolation between one or more processes (applications) running on the server. "Hypervisor-based," or "hardware-level," or "platform" virtualization refers to the creation of virtual machines that each include a guest operating system for running one or more processes. Typically, a virtual machine provides a virtualized / guest operating system for executing applications in an isolated virtual environment. Because the virtual machines are visualized from the physical hardware of the host server, the executing applications are isolated from the host's hardware and other virtual machines. Each virtual machine may be configured with one or more virtual network interfaces for communicating on a corresponding virtual network.
[0071] A virtual network refers to a logical structure implemented on top of a physical network. A virtual network can be used to replace VLAN-based isolation and provide multi-tenancy in a virtualized data center, such as data center 10. Each tenant or application can have one or more virtual networks. Unless explicitly allowed by security policy, each virtual network must be isolated from all other virtual networks.
[0072] Virtual networks can use the data center 10 gateway router ( Figure 1 The virtual network is connected to the physical multi-protocol label switching (MPLS) layer 3 virtual private network (L3VPN) and Ethernet virtual private network (EVPN) network and extended on the physical multi-protocol label switching (MPLS) layer 3 virtual private network (L3VPN) and Ethernet virtual private network (EVPN) network. The virtual network can also be used to implement network function virtualization (NFV) and service chaining.
[0073] A variety of mechanisms can be used to implement virtual networks. For example, each virtual network can be implemented as a virtual local area network (VLAN), a virtual private network (VPN), etc. A virtual network can also be implemented using two networks - a physical underlying network consisting of an IP structure 20 and a switching structure 14 and a virtual overlay network. The role of the physical underlying network is to provide an "IP structure" that provides a unicast IP connection from any physical device (server, storage device, router, or switch) to any other physical device. The underlying network can provide a unified low-latency, non-blocking, high-bandwidth connection from any point in the network to any other point in the network.
[0074] As further described below with respect to virtual router 21 (illustrated as and also referred to herein as "vRouter 21"), the virtual router running in server 12 creates a virtual overlay network on top of the physical underlying network using its own dynamic "tunnel" mesh. For example, these overlay tunnels may be MPLS over GRE / UDP tunnels, or VXLAN tunnels, or NVGRE tunnels. For virtual machines or other virtual execution elements, the underlying physical routers and switches may not store arbitrary state for each tenant, such as arbitrary media access control (MAC) addresses, IP addresses, or policies. For example, the forwarding tables of the underlying physical routers and switches may contain only the IP prefix or MAC address of the physical server 12. (The gateway router or switch that connects the virtual network to the physical network is an exception and may contain tenant MAC or IP addresses.)
[0075] The virtual router 21 of the server 12 typically contains per-tenant state. For example, the virtual router may contain a separate forwarding table (routing instance) for each virtual network. The forwarding table contains the IP prefixes (in the case of a layer 3 overlay) or MAC addresses (in the case of a layer 2 overlay) of the virtual machines or other virtual execution elements (e.g., a container pool of containers). A single virtual router 21 does not need to contain all IP prefixes or all MAC addresses of all virtual machines in the entire data center. A given virtual router 21 only needs to contain those routing instances that are locally present on the server 12 (i.e., have at least one virtual execution element present on the server 12.)
[0076] "Container-based" or "operating system" virtualization refers to the virtualization of an operating system running multiple isolated systems on a single machine (virtual or physical). The isolated systems represent containers such as those provided by the open source DOCKER container application or by CoreOS Rkt ("Rocket"). Like virtual machines, each container is virtualized and can be kept isolated from the host and other containers. However, unlike virtual machines, each container can omit an independent operating system and instead provide an application suite and application-specific libraries. Typically, containers are run by a host as isolated user-space instances and the containers can share an operating system and common libraries with other containers running on the host. As a result, containers may require less processing power, storage, and network resources than virtual machines. A group of one or more containers can be configured to share one or more virtual network interfaces for communicating on a corresponding virtual network.
[0077] In some examples, containers are managed by their host kernel to allow for limiting and prioritizing resources (CPU, memory, block I / O, network, etc.) in some cases without launching arbitrary virtual machines using namespace isolation capabilities, which allow applications (e.g., a given container) to view the operating environment completely isolated, including process trees, networking, user identifiers, and mounted file systems. In some embodiments, containers can be deployed according to Linux Containers (LXC), an operating system-level virtualization method that uses a single Linux kernel to run multiple isolated Linux systems (containers) on a control host.
[0078] Servers 12 host virtual network endpoints of one or more virtual networks operating on a physical network represented here by IP fabric 20 and switch fabric 14. Although primarily described with respect to data center based switched networks, other physical networks such as service provider network 7 may underlie one or more virtual networks.
[0079] Each server 12 can host one or more virtual execution elements, each of which has at least one virtual network endpoint of one or more virtual networks configured in the physical network. The virtual network endpoint of a virtual network can represent one or more virtual execution elements that share the virtual network interface of the virtual network. For example, the virtual network endpoint can be a virtual machine, one or more container sets (e.g., a container pool), or another virtual execution element such as a layer 3 endpoint of a virtual network. The term "virtual execution element" covers virtual machines, containers, and other virtualized computing resources that provide at least partially independent operating environments for applications. The term "virtual execution element" can also cover container pools of one or more containers. A virtual execution element can represent an application workload. As Figure 1As shown in , server 12A hosts a virtual network endpoint in the form of a container pool 22 having one or more containers. However, in practice, given the hardware resource limitations of server 12, server 12 can be executed as multiple virtual execution elements. Each virtual network endpoint can use one or more virtual network interfaces to perform packet I / O or other processing on packets. For example, a virtual network endpoint can use a virtual hardware component (e.g., an SR-IOV virtual function) enabled by NIC13A to perform packet I / O and receive / send packets on one or more communication links with TOR switch 16A. Other examples of virtual network interfaces are described below.
[0080] The servers 12 each include at least one network interface card (NIC) 13, each of which includes at least one interface for exchanging packets with the TOR switch 16 via a communication link. For example, server 12A includes NIC 13A. Any NIC 13 can provide one or more virtual hardware components 21 for virtualized input / output (I / O). The virtual hardware component of I / O can be a virtualization of a physical NIC ("physical function"). For example, in single root I / O virtualization (SR-IOV) described by the Peripheral Component Interface Special Interest Group SR-IOV specification, the PCIe physical function of a network interface card (or "network adapter") is virtualized to provide one or more virtual network interfaces as "virtual functions" for use by corresponding endpoints running on the server 12. In this way, the virtual network endpoints can share the same PCIe physical hardware resources and the virtual functions are examples of virtual hardware components 21. As another example, one or more servers 12 can implement Virtio, a paravirtualization framework available for example in the Linux operating system, Virtio provides emulated NIC functions as a type of virtual hardware component to provide virtual network interfaces to virtual network endpoints. As another example, one or more servers 12 may implement Open vSwitch to perform distributed virtual multilayer switching between one or more virtual NICs (vNICs) of hosted virtual machines, where the vNIC may also represent a type of virtual hardware component that provides a virtual network interface to a virtual network endpoint. In some instances, the virtual hardware component is a virtual I / O (e.g., NIC) component. In some instances, the virtual hardware component is an SR-IOV virtual function. In some examples, any of the servers 12 may implement a Linux bridge that emulates a hardware bridge and forwards packets between the server's virtual network interfaces or between the server's virtual network interfaces and the server's physical network interfaces. For Docker implementations of containers hosted by servers, a Linux bridge or other operating system bridge running on the server that switches packets between containers may be referred to as a "Docker bridge." As used herein, the term “virtual router” may encompass a Contrail or Tungsten Fabric virtual router, Open vSwitch (OVS), an OVS bridge, a Linux bridge, a Docker bridge, or other device and / or software that resides on a host device and performs switching, bridging, or routing packets between virtual network endpoints of one or more virtual networks, in which the virtual network endpoints are hosted by one or more servers 12.
[0081] Any NIC 13 may include an internal device switch that switches data between virtual hardware components associated with the NIC. For example, for a NIC that supports SR-IOV, the internal device switch may be a virtual Ethernet bridge (VEB) that switches between SR-IOV virtual functions and, correspondingly, between endpoints configured to use SR-IOV virtual functions, where each endpoint may include a guest operating system. Alternatively, the internal device switch may be referred to as a NIC switch, or, for an SR-IOV implementation, may be referred to as an SR-IOV NIC switch. The virtual hardware components associated with the NIC 13A may be associated with a layer 2 destination address assigned by the NIC 13A or a software process responsible for configuring the NIC 13A. Physical hardware components (or "physical functions" for SR-IOV implementations) are also associated with a layer 2 destination address.
[0082] One or more servers 12 may each include a virtual router 21 that executes one or more routing instances for a corresponding virtual network within the data center 10 to provide a virtual network interface and route packets between virtual network endpoints. Each routing instance may be associated with a network forwarding table. Each routing instance may represent a virtual routing and forwarding instance (VRF) of an Internet Protocol-Virtual Private Network (IP-VPN). For example, a packet received by the virtual router 21 of the server 12A from the underlying physical network structure of the data center 10 (i.e., the IP structure 20 and the switching structure 14) may include an outer header to allow the physical network structure to tunnel the payload or "inner packet" to the physical network address of the network interface card 13A of the server 12A executing the virtual router. The outer header may include not only the physical network address of the server's network interface card 13A, but also a virtual network identifier such as a VxLAN tag or a multi-protocol label switching (MPLS) label that identifies a virtual network and the corresponding routing instance executed by the virtual router 21. The inner packet includes an inner header having a destination network address that conforms to the virtual network addressing space of the virtual network identified by the virtual network identifier.
[0083] The virtual router 21 terminates the virtual network overlay tunnel and determines the virtual network of the received packet based on the tunnel encapsulation header of the packet, and forwards the packet to the appropriate destination virtual network endpoint of the packet. For example, for server 12A, for each packet outbound from a virtual network endpoint (e.g., container pool 22) hosted by server 12A, the virtual router 21 appends a tunnel encapsulation header indicating the virtual network to the packet to generate an encapsulated or "tunnel" packet, and the virtual router 21 outputs the encapsulated packet to a physical destination computing device such as another server 12 via the overlay tunnel of the virtual network. As used herein, the virtual router 21 can perform the operation of a tunnel endpoint to encapsulate an internal packet originating from a virtual network endpoint to generate a tunnel packet, and decapsulate the tunnel packet to obtain an internal packet for routing to other virtual network endpoints.
[0084] In some examples, virtual router 21 may be kernel-based and may run as part of the kernel of an operating system of server 12A.
[0085] In some examples, the virtual router 21 can be a virtual router that supports the Data Plane Development Kit (DPDK). In this example, the virtual router 21 uses DPDK as a data plane. In this mode, the virtual router 21 runs as a user space application linked to the DPDK library (not shown). This is the execution version of the virtual router and is typically used by telecommunications companies, where VNFs are typically DPDK-based applications. The execution of the virtual router 21 as a DPDK virtual router can achieve a throughput ten times higher than that of a virtual router operating as a kernel-based virtual router. The physical interface is used by the polling mode driver (PMD) of the DPDK, rather than the interrupt-based driver of the Linux kernel.
[0086] A User-I / O (UIO) kernel module such as vfio or uio_pci_generic can be used to expose the registers of the physical network interface to user space so that the DPDK PMD can access the registers. When NIC 13A is bound to the UIO driver, NIC 13A is moved from Linux kernel space to user space and is therefore no longer managed or visible to the Linux OS. Therefore, the DPDK application (i.e., in this example, virtual router 21A) fully manages NIC 13. This includes packet polling, packet processing, and packet forwarding. The user packet processing steps can be performed by the virtual router 21DPDK data plane, and the kernel (in Figure 1The kernel (not shown) has limited or no involvement. The nature of this "polling mode" makes virtual router 21DPDK data plane packet processing / forwarding more efficient compared to interrupt mode, particularly when the packet rate is high. There are limited or no interrupts during packet I / O, and there are context switches.
[0087] Additional details on the DPDK vRouter example are found in “DAY ONE: CONTRAIL DPDKvROUTER,” Kiran KN et al., Juniper Networks, 2021, which is incorporated herein by reference in its entirety.
[0088] The computing infrastructure 8 implements an automation platform for automating the deployment, expansion, and operation of virtual execution elements across servers 12 to provide a virtualized infrastructure for executing application workloads and services. In some examples, the platform can be a container orchestration system that provides a container-centric infrastructure to automate the deployment, expansion, and operation of containers, thereby providing a container-centric infrastructure. In the context of virtualized computing infrastructure, "orchestration" generally refers to the provisioning, scheduling, and management of virtual execution elements and / or applications and services running on the virtual execution elements by the orchestration platform. Specifically, for example, container orchestration permits container coordination and refers to the deployment, management, expansion, and configuration of containers to host servers by the container orchestration platform. Exemplary instances of orchestration platforms include Kubernetes (container orchestration system), Docker swarm, Mesos / Marathon, OpenShift, OpenStack, VMware, and Amazon ECS.
[0089] The elements of the automation platform of the computing infrastructure 8 include at least a server 12, an orchestrator 23, and a network controller 24. Containers can be deployed to a virtualized environment using a cluster-based framework in which a cluster master node of the cluster manages the deployment and operation of containers to one or more cluster slave nodes of the cluster. The terms "master node" and "slave node" used herein encompass different orchestration platform terms that distinguish between the master management element of the cluster and the analog device of the cluster's master container hosting device. For example, the Kubernetes platform uses the terms "cluster master node" and "slave node", while the Docker Swarm platform refers to the cluster manager and cluster nodes.
[0090] The orchestrator 23 and the network controller 24 may run on separate computing devices or on the same computing device. Each of the orchestrator 23 and the network controller 24 may be a distributed application running on one or more computing devices. The orchestrator 23 and the network controller 24 may implement the respective master nodes of one or more clusters, each of which has one or more slave nodes (also referred to as "computing nodes") implemented by the respective servers 12.
[0091] In general, for example, network controller 24 controls network configuration of the fabric of data center 10 to establish one or more virtual networks for packetized communications between virtual network endpoints. Network controller 24 provides a logically centralized and, in some cases, physically centralized controller that facilitates operation of one or more virtual networks within data center 10. In some examples, network controller 24 may operate in response to configuration input received from orchestrator 23 and / or an administrator / operator. Additional information regarding exemplary operation of network controller 24 operating in conjunction with other devices of data center 10 or other software defined networks is found in International Application No. PCT / US2013 / 044378, filed on June 5, 2013, and entitled “PHYSICAL PATH DETERMINATION FOR VIRTUALNETWORK PACKET Flows,” and in U.S. Patent Application No. 14 / 226,509, filed on May 26, 2014, and entitled “Tunneled Packet Aggregation for Virtual Networks,” each of which is incorporated by reference as fully set forth herein.
[0092] Typically, the orchestrator 23 controls the deployment, scaling, and operation of containers across a cluster of servers 12 and provides computing infrastructure, which may include container-centric computing infrastructure. The orchestrator 23, and in some cases, the network controller 24 may implement a corresponding cluster master for one or more Kubernetes clusters. As an example, Kubernetes is a container management platform that provides portability across public and private clouds, where each cloud can provide a virtualized infrastructure to the container management platform. Figure 3 Describe example components of the Kubernetes orchestration system.
[0093] Kubernetes operates using various Kubernetes objects-entities that represent the state of a Kubernetes cluster. Kubernetes objects may include any combination of names, namespaces, labels, annotations, field selectors, and recommended labels. For example, a Kubernetes cluster may include one or more "namespace" objects. Each namespace of a Kubernetes cluster is isolated from other namespaces of the Kubernetes cluster. A namespace object may include at least one of the organization, security, and performance of a Kubernetes cluster. As an example, a container pool may be associated with a namespace, thereby associating the container pool with a feature (e.g., a virtual network) of the namespace. This feature enables multiple newly created container pools to be organized by associating the container pool with a common feature set. A namespace may be created based on namespace specification data that defines the features of a namespace (including a namespace name). In one example, a namespace may be named "namespace A", and each newly created container pool may be associated with a feature set represented by "namespace A". In addition, Kubernetes includes a "default" namespace. If a newly created container pool does not specify a namespace, the newly created container pool may be associated with the features of the "default" namespace.
[0094] Namespaces enable multiple users, user teams, or a single user with multiple applications to use a Kubernetes cluster. In addition, each user, user team, or application can be isolated from every other user of the cluster within a namespace. Therefore, each user of the Kubernetes cluster operates as if it is the only user of the Kubernetes cluster within the namespace. Multiple virtual networks can be associated with a single namespace. Therefore, a container pool belonging to a specific namespace has the ability to access each virtual network in the virtual network associated with the namespace, including other container pools used as virtual network endpoints in the group of virtual networks.
[0095] In one example, container pool 22 is a Kubernetes container pool and is an example of a virtual network endpoint. A container pool is a group of one or more logically related containers ( Figure 1), shared memory for containers, and options on how to run containers. Alternatively, if instantiated for execution, the container pool may be referred to as a "container pool replica". Each container of the container pool 22 is an example of a virtual execution element. The containers of the container pool are always co-located on a single server, co-scheduled, and run in a shared context. The shared context of the container pool may be a collection of Linux namespaces, cgroups, and other isolation aspects. In the context of the container pool, individual applications may further apply sub-isolation. Typically, containers within a container pool have a common IP address and port space and are able to detect each other via the local host. Because they have a shared context, containers within the container pool also communicate with each other using inter-process communication (IPC). Examples of IPC include SystemV semaphores or POSIX shared memory. Typically, containers that are members of different container pools have different IP addresses, and in the absence of a configuration for enabling this feature, containers cannot communicate via IPC. Instead, containers that are members of different container pools typically communicate with each other via the container pool IP address.
[0096] Server 12A includes a container platform 19 for running containerized applications such as those in container pool 22. Container platform 19 receives requests from orchestrator 23 to obtain containers and causes the containers to be hosted in server 12A. Container platform 19 obtains and runs containers.
[0097] The container network interface (CNI) 17 configures a virtual network interface for a virtual network endpoint. The orchestrator 23 and the container platform 19 use the CNI 17 to manage the network of the container pool (including the container pool 22). For example, the CNI 17 creates a virtual network interface that connects the container pool to the virtual router 21 and enables the containers of the container pool to communicate to other virtual network endpoints on the virtual network via the virtual network interface. For example, the CNI 17 can insert a virtual network interface for a virtual network into the network namespace of the container of the container pool 22 and configure (or request configuration) a virtual network interface for a virtual network in the virtual router 21 so that the virtual router 21 is configured to send packets received from the virtual network via the virtual network interface to the container of the container pool 22 and to send packets received via the virtual network interface on the virtual network from the container of the container pool 22. The CNI 17 can assign a network address (e.g., a virtual IP address for a virtual network) and can set up routes for the virtual network interface. In Kubernetes, by default, all container pools can communicate with all other container pools without using network address translation (NAT). In some cases, the orchestrator 23 and the network controller 24 create a service virtual network and a container pool virtual network shared by all namespaces, and allocate service and container pool network addresses from the namespaces, respectively. In some cases, all container pools generated in the Kubernetes cluster in all namespaces can communicate with each other, and the network addresses of all container pools can be allocated from the container pool subnet specified by the orchestrator 23. When a user creates an isolated namespace for a container pool, the orchestrator 23 and the network controller 24 can create a new container pool virtual network and a new shared service virtual network for the new isolated namespace. The container pool generated in the Kubernetes cluster in the isolated namespace obtains a network address from the new container pool virtual network, and the corresponding service of the container pool obtains a network address from the new service virtual network.
[0098] CNI 17 may represent a library, plugin, module, runtime, or other executable code for server 12A. CNI 17 may be at least partially compliant with the Container Network Interface (CNI) specification or the rkt network proposal. CNI 17 may represent Contrail, OpenContrail, Multus, Calico, cRPD, or other CNI. Alternatively, CNI 17 may be referred to as a network plugin or CNI plugin or CNI instance. For example, a separate CNI may be called by the Multus CNI to establish different virtual network interfaces for the container pool 22.
[0099] The CNI 17 may be called by the orchestrator 23. For the purposes of the CNI specification, containers may be considered to be synchronized with the Linux network namespace. The unit corresponding to this depends on the specific container runtime implementation: for example, in implementations of application container specifications such as rkt, each container pool runs in a unique network namespace. However, in Docker, there is typically a network namespace for each individual Docker container. For the purposes of the CNI specification, a network refers to a set of entities that are uniquely addressable and capable of communicating with each other. This may be a single container, a machine / server (real or virtual), or some other network device (e.g., a router). Containers may be conceptually added to or removed from one or more networks. The CNI specification specifies many considerations for conforming plugins ("CNI plugins").
[0100] Container pool 22 includes one or more containers. In some examples, container pool 22 includes a containerized DPDK workload that is designed to use DPDK to speed up packet processing, for example, by using a DPDK library to exchange data with other components to speed up packet processing. In some examples, virtual router 21 can run as a containerized DPDK workload.
[0101] The container pool 22 is configured with a virtual network interface 26 for sending and receiving packets through the virtual router 21. The virtual network interface 26 may be a default interface for the container pool 22. The container pool 22 may implement the virtual network interface 26 as an Ethernet interface (e.g., named "eth0"), while the virtual router 21 may implement the virtual network interface 26 as a tap interface, a virtio user interface, or other types of interfaces.
[0102] The container pool 22 and the virtual router 21 use a virtual network interface 26 to exchange data packets. The virtual network interface 26 may be a DPDK interface. The container pool 22 and the virtual router 21 may use vhost to set up the virtual network interface 26. The container pool 22 may operate according to an aggregation model. The container pool 22 may use a virtual device such as a virtio device with a vhost-user adapter for user space container process communication of the virtual network interface 26.
[0103] CNI 17 can be combined with Figure 1 One or more other components shown in FIG. 2 configure a virtual network interface 26 for the container pool 22. Any container in the container pool 22 can utilize (ie, share) the virtual network interface 26 of the container pool 22.
[0104] The virtual network interface 26 may represent a virtual Ethernet ("veth") pair, where each end of the pair is an independent device (e.g., a Linux / Unix device), and one end of the pair is assigned to the container pool 22 and one end of the pair is assigned to the virtual router 21. A veth pair or one end of a veth pair is sometimes referred to as a "port". The virtual network interface may represent a macvlan network with media access control (MAC) addresses assigned to the container pool 22 and the virtual router 21 to communicate between the containers of the container pool 22 and the virtual router 21. Alternatively, for example, the virtual network interface may be referred to as a virtual machine interface (VMI), a container pool interface, a container network interface, a tap interface, a veth interface, or simply a network interface (in a specific context).
[0105] exist Figure 1 In the exemplary server 12A of FIG. 1 , the container pool 22 is a virtual network endpoint in one or more virtual networks. The orchestrator 23 may store or otherwise manage configuration data for application deployment, the configuration data specifying the virtual network and specifying that the container pool 22 (or one or more containers therein) is a virtual network endpoint of the virtual network. For example, the orchestrator 23 may receive the configuration data from a user, an operator / administrator, or another machine system.
[0106] As part of the process of creating a container pool 22, the orchestrator 23 requests the network controller 24 to create corresponding virtual network interfaces for one or more virtual networks (indicated in the configuration data). The container pool 22 may have different virtual network interfaces for each virtual network to which it belongs. For example, the virtual network interface 26 may be a virtual network interface for a specific virtual network. Additional virtual network interfaces (not shown) may be configured for other virtual networks. The network controller 24 processes the request to generate interface configuration data for the virtual network interfaces of the container pool 22. The interface configuration data may include a container or container pool unique identifier and a list or other data structure specifying network configuration data for configuring the virtual network interface for each virtual network interface. The network configuration data for the virtual network interface may include a network name, an assigned virtual network address, a MAC address, and / or a domain name server value. The following is an example of interface configuration data in JavaScript Object Notation (JSON) format.
[0107] Network controller 24 sends the interface configuration data to server 12A, and more specifically, in some cases, to virtual router 21. To configure the virtual network interface for container pool 22, orchestrator 23 may call CNI 17. CNI 17 obtains the interface configuration data from virtual router 21 and processes it. CNI 17 creates each virtual network interface specified in the interface configuration data. For example, CNI 17 may attach one end of a veth pair that implements management interface 26 to virtual router 21 and may attach the other end of the same veth pair that implements management interface 26 using virtio user to container pool 22.
[0108] The following is exemplary interface configuration data for a virtual network interface 26 of a container pool 22 .
[0109] [{
[0110] / / virtual network interface 26
[0111] "id":"fe4bab62-a716-11e8-abd5-0cc47a698428",
[0112] "instance-id":"fe3edca5-a716-11e8-822c-0cc47a698428",
[0113] "ip-address":"10.47.255.250",
[0114] "plen":12,
[0115] "vn-id":"56dda39c-5e99-4a28-855e-6ce378982888",
[0116] "vm-project-id":"00000000-0000-0000-0000-000000000000",
[0117] "mac-address":"02:fe:4b:ab:62:a7",
[0118] "system-name":"tapeth0fe3edca",
[0119] "rx-vlan-id":65535,
[0120] "tx-vlan-id":65535,
[0121] "vhostuser-mode":0,
[0122] “v6-ip-address”: “::“,
[0123] "v6-plen":,
[0124] “v6-dns-server”: “::”,
[0125] “v6-gateway”: “::”,
[0126] "dns-server":"10.47.255.253",
[0127] "gateway":"10.47.255.254",
[0128] "author":" / usr / bin / contrail-vrouter-agent",
[0129] "time":"426404:56:19.863169"
[0130] }]
[0131] A conventional CNI plugin is invoked by a container platform / runtime, receives an Add command from the container platform to add a container to a single virtual network, and the plugin may subsequently be invoked to receive a Del(ete) command from the container / runtime and remove the container from the virtual network. The term "invocation" may refer to the instantiation of a software component or module in memory as executable code to be executed by a processing circuit.
[0132] The network controller 24 is a cloud-native distributed network controller for software-defined networking (SDN) implemented using one or more configuration nodes 30 and one or more control nodes 32. Each configuration node 30 itself can be implemented using one or more cloud-native component microservices. Each control node 32 itself can be implemented using one or more cloud-native component microservices.
[0133] In some examples, and as described in further detail below, the configuration node 30 can be implemented by extending the local orchestration platform to support custom resources for the orchestration platform for software-defined networks, and more specifically, for example, by configuring virtual network interfaces of virtual execution elements, configuring underlying network connection servers 12, and configuring overlay routing functions including overlay tunnels for virtual networks and overlay trees for multicast Layer 2 and Layer 3, thereby providing a northbound interface to the orchestration platform to support purpose-driven / declarative creation and management of virtual networks.
[0134] As Figure 1 As part of the SDN architecture shown in , the network controller 24 can be multi-tenant aware and support multi-tenancy of the orchestration platform. For example, the network controller 24 can support Kubernetes role-based access control (RBAC) constructs, local identity access management (IAM), and external IAM integration. The network controller 24 can also support Kubernetes-defined network constructs and advanced network features such as virtual networks, BGPaaS, network policies, service chaining, and other telecommunications features. The network controller 24 can support network isolation using virtual network constructs and can support layer 3 networks.
[0135] In order to interconnect multiple virtual networks, the network controller 24 can use (and configure in the underlying layer and / or virtual router 21) a network policy called a virtual network policy (VNP) and alternatively referred to herein as a virtual network router or virtual network topology. The VNP defines the connection policy between virtual networks. A single network controller 24 can support multiple Kubernetes clusters, and thus, the VNP allows multiple virtual networks to be connected in a namespace, in a Kubernetes cluster, and across Kubernetes clusters. The VNP can also be extended to support virtual network connections across multiple instances of the network controller 24.
[0136] The network controller 24 is capable of supporting multi-layer security using network policies. The default behavior of Kubernetes is that container pools communicate with each other. In order to apply network security policies, the SDN architecture implemented by the network controller 24 and the virtual router 21 can be operated as the CNI of Kubernetes through the CNI 17. For Layer 3, network-level isolation occurs and virtual networks operate at L3. Virtual networks are connected through policies. Kubernetes local network policies provide security at Layer 4. The SDN architecture can support Kubernetes network policies. Kubernetes network policies operate at the boundaries of Kubernetes namespaces. The SDN architecture can add custom resources for enhancing network policies. The SDN architecture can support application-based security. (In some cases, these security policies can be based on meta tags to apply granular security policies in an extensible manner). In some examples, for Layer 4+, the SDN architecture can support integration with containerized security devices and / or Istio and can provide encryption support.
[0137] As Figure 1As part of the SDN architecture shown in FIG. 1 , the network controller 24 can support multi-cluster deployments that are important for telco cloud and high-end enterprise use cases. For example, the SDN architecture can support multiple Kubernetes clusters. The cluster API can be used to support life cycle management of Kubernetes clusters. KubefedV2 can be used to configure node 32 federation across Kubernetes clusters. The cluster API and KubefedV2 are optional components for supporting a single instance of the network controller 24, which supports multiple Kubernetes clusters.
[0138] SDN architectures can provide insights into infrastructure, clusters, and applications using network user interfaces and telemetry components. Telemetry nodes can be cloud-native and include microservices that support insights.
[0139] Due to the above and other features described elsewhere herein, the computing infrastructure 8 implements a cloud-native SDN architecture and can provide one or more of the following technical advantages. For example, the network controller 24 is a cloud-native, lightweight distributed application with a simplified installation footprint. This also facilitates easier and modular upgrading of the various component microservices of the configuration node 30 and the control node 32 (as well as any other components of other examples of the network controller described in this disclosure). The present technology can further implement optional cloud-native monitoring (telemetry) and user interfaces, high-performance data planes for containers using DPDK-based virtual routers connected to a DPDK-enabled container pool, and cloud-native configuration management that in some cases takes advantage of the configuration framework of existing orchestration platforms (such as Kubernetes or Openstack). As a cloud-native architecture, the network controller 24 is a scalable and elastic architecture that addresses and supports multiple clusters. In some cases, the network controller 24 can also support the scalability and performance requirements of key performance indicators (KPIs).
[0140] For example, an SDN architecture with features and technical advantages such as those described herein can be used to implement a cloud-native telecom cloud to support 5G mobile networks (and subsequent generations) and edge computing, as well as an enterprise Kubernetes platform including, for example, high-performance cloud-native application hosting. Telecom cloud applications are rapidly moving towards containerized cloud-native solutions. 5G fixed and mobile networks are driving the need to deploy workloads as microservices with significant disaggregation, specifically, in 5G next-generation RAN (5GNR). The 5G next-generation core network (5GNC) may be deployed as a set of microservice-based applications corresponding to the various components described by 3GPP. When viewed as a microservice group delivering an application, the 5GNC may be a highly complex combination of a pool of containers with complex network, security, and policy requirements. For such use cases, a cloud-native SDN architecture with well-defined structures for network, security, and policy as described herein can be utilized. The network controller 24 may provide relevant APIs that can create these complex structures.
[0141] Similarly, the user plane function (UPF) within the 5GNC is an ultra-high performance application. It can be delivered as a highly distributed set of high-performance container pools. The SDN architecture described here is capable of providing a very high throughput data plane (in terms of bits per segment (bps) and packets per second (pps)). Integration with a DPDK virtual router with recent performance enhancements eBPF and with smart NICs will help achieve the required throughput. The DPDK-based virtual router is further described in detail in U.S. application No. 17 / 649,632, entitled “CONTAINERIZED ROUTER WITH VIRTUAL NETWORKING,” filed on February 1, 2022, the entire contents of which are incorporated herein by reference.
[0142] High performance processing may also be relevant in GiLAN as workloads migrate from more traditional virtualized workloads to containerized microservices. In the data plane of the UPF and GiLAN services, such as the GiLAN firewall, intrusion detection and prevention, virtualized IP multimedia subsystem (vIMS) voice / video, etc., throughput is high and sustained in terms of bps and pps. For the control plane of 5GNC functions, such as the access and mobility management function (AMF), session management function (SMF), etc., and for some GiLAN services (e.g., IMS), the advantage of small packets is that pps will remain high while the absolute traffic can be moderate in terms of bps. In some examples, the SDN controller and data plane provide millions of packets per second for each virtual router 21 implemented on the server 12. In 5G radio access networks (RAN), in order to move away from proprietary vertically integrated RAN stacks provided by traditional radio vendors, open RAN decouples RAN hardware and software in multiple components, including non-RT radio intelligent controllers (RIC), near real-time RIC, centralized unit (CU) control plane and user plane (CU-CP and CU-UP), distributed units (DU), and radio units (RU). If necessary, the software components are deployed on commercial server architectures implemented with programmable accelerators. The SDN architecture described here can support O-RAN specifications.
[0143] Edge computing may be mainly targeted at two different use cases. The first case is as a support for containerized telecommunications infrastructure (e.g., 5G RAN, UPF, security functions), and the second case is for containerized service workloads for telecommunications and third parties such as suppliers or enterprise customers. In both cases, edge computing is actually a special case of GiLAN, where traffic is interrupted for special processing at highly distributed locations. In many cases, these locations will have limited resources (power, cooling, space). The SDN architecture described here may be very suitable for supporting very lightweight footprint requirements, can support computing and storage resources in sites that are far away from the associated control functions, and can be aware of location by deploying workloads and storage. Some sites may have as few as one or two computing nodes, which deliver very specific service sets to highly localized users or other service sets. There may be a hierarchy of sites, where central sites are densely connected to multiple paths, regional sites are multiply connected to two or four uplink paths, and remote edge sites may have connections to only one or two upstream sites. This requires extreme flexibility in how the SDN architecture can be deployed and how (and where) tunneled traffic within the overlay is terminated and bound to the core transport network (SRv6, MPLS, etc.). Similarly, in sites hosting telco cloud infrastructure workloads, the SDN architecture described here can support specialized hardware (GPUs, smart NICs, etc.) required for high-performance workloads. There may also be workloads that require SR-IOV. Because, the SDN architecture can also support the creation of VTEPs at the ToR and have the VTEPs link back to the overlay as VXLAN.
[0144] It is expected that there will be a mix of fully distributed Kubernetes micro-clusters with each site running its own master cluster, and the SDN architecture can support scenarios like remote computing.
[0145] For use cases involving enterprise Kubernetes platforms, high-performance cloud-native application power financial services platforms, online gaming services, and hosted application service providers, the cloud platforms that deliver these applications must provide high performance, resilience to failures, high security, and visibility. Applications hosted on these platforms tend to be developed internally. Application developers and platform owners work with infrastructure teams to deploy and operate instances of organizational applications. These applications tend to require high throughput (>20Gbps per server) and low latency. Some applications can also use multicast for signaling or payload traffic. Additional hardware and network infrastructure can be used to ensure availability. Applications and microservices are partitioned using command spaces within the cluster. In a highly secure environment, isolation between namespaces is critical. When the default deny policy is a standard posture in a zero-trust application deployment environment, additional network segmentation using virtual routing and forwarding instances (VRF) adds an additional layer of security and allows the use of overlapping network ranges. Overlapping network ranges are a key requirement for managing application hosting environments, which tend to standardize the reachable endpoint sets of all managed customers.
[0146] Complex microservices-based applications tend to utilize complex network filters. The SDN architecture described herein can deliver high-performance firewall filtering at scale. The filtering can exhibit consistent forwarding performance, as well as lower latency degradation, regardless of rule set length or sequence. Some customers may also have some of the same regulatory pressures as telecommunications for application segmentation not only at the network layer, but also in the kernel. Specifically, when running on public clouds, financial, but also other services have requirements for data plane encryption. In some examples, the SDN architecture described herein can include features that meet these requirements.
[0147] In some examples, when the SDN architecture is automated by applying a dev / test / stage / prod continuous integration / continuous deployment (CI / CD) pipeline, the SDN architecture can provide a GitOps-friendly UX for strict change management control, auditing, and reliability for products that change several times or even hundreds of times a day.
[0148] According to the technology of the present disclosure, the system 8 includes a development system 52 for dynamically generating and verifying network policies, a policy controller 54, and a configuration repository 50. The configuration repository 50 can implement one or more repositories such as a Git repository to store and manage configuration data for application deployment to the SDN architecture 200. The configuration repository 50 may include one or more storage systems for storing configuration data. The configuration repository 50 may include software for tracking the creation and modification of configuration data to facilitate collaborative updating and development of the configuration of applications deployed using the configuration repository 50. The software for the configuration repository 50 can implement version control and development branches, wherein a repository with submitted configuration data can be branched to create alternative configuration data in another "branch" using subsequent submissions including updates to previously submitted configuration data. Therefore, the configuration repository 50 can store multiple configuration data sets for the same application, each configuration data set representing a different configuration and causing the operation of the application in the SDN architecture 200 to be different. A given configuration data set for an application can be considered as a true source for defining the desired application state of the application. An application may be a set of workloads deployable to a computing infrastructure, and the SDN architecture 200 may be configured using the network controller 24 to enable network communications between the workloads of the application. For example, configuration data for an application can include a Kubernetes manifest, a network policy (whether included in the Kubernetes manifest or defined elsewhere), a container pool description, a network configuration, and other configuration data for defining the operation of the SDN architecture 200 in support of the application, and in particular, for supporting network communications between the workloads of the application.
[0149] The deployment system 52 utilizes the configuration repository to configure applications deployed to the computing infrastructure 8 and more specifically to the SDN architecture 200. The deployment system 52 can facilitate continuous delivery (CD) of applications deployable to the SDN architecture 200. For example, the deployment system 52 can automatically deploy configuration data of an application from the configuration repository 50. The deployment system 52 can track updates to the configuration data in the configuration repository 50, and in response to the updates, can obtain the updated configuration data and provide the updated configuration data to the configuration node 30 of the network controller 24 to configure the SDN architecture 200 of the application. In some examples, the deployment system 52 is integrated with the orchestrator 23.
[0150] In some cases, the configuration data in the configuration repository 50 is integrated with application deployment, thereby enabling consistent push-button deployment of application workloads and SDN architecture 200 configurations to the computing infrastructure 8. Thus, in this case, the configuration repository operates as a complete application deployment repository.
[0151] Fig.10 1 is a block diagram showing an exemplary distributed application 1050 deployed to the data plane of the SDN architecture 200 according to the technology of the present disclosure. Application 1050 includes various microservice components, such as "EmailService" and "AdService", deployed to server 12 using container pool 22. The microservice components are intended to communicate with each other in the manner shown. For example, CartService receives service requests from CheckoutService and Frontend, and CartService issues service requests to Cache. The network policy for application 1050 allows the deployed container pools to communicate in such a way that the expected communication between the microservice components included in these container pools is facilitated. For example, the container pool 22 on server 12A can include a container for CheckoutService and should be allowed to communicate with the container pool 22 including the container for CartService on server 12X. The application can include components deployed using container pools, virtual machines, bare metal server processes, or a combination thereof.
[0152] Return now Figure 1 As described in further detail below, the virtual router 21 applies the configured policy 1000. For example, the policy 1000 may be implemented using one or more firewall rules downloaded to the virtual router 21 via the control node 32.
[0153] Once deployed by orchestrator 23 and configured by network controller 24, applications (e.g., application 1050) run in the data plane of SDN architecture 200 as workloads (e.g., container pool 22) executed by servers 12. According to the techniques of this disclosure, policy controller 54 dynamically generates network policies 1010 for distributed applications including workloads. Fig.11 1100 is a flow chart illustrating an exemplary mode of operation 1100 of an SDN architecture. In this example, the policy controller 54 may obtain a first configuration data set from the configuration repository 50 (1102). The first configuration data set may include a network policy. The policy controller 54 may apply the first configuration data set to an application deployed to the SDN architecture 200, and the SDN architecture 200 may call an interface of the configuration node 30 to program the SDN architecture 200 with the network policy of the first configuration data set (1104). Since the policy controller 54 may generate a new network policy without an existing network policy being programmed into the SDN architecture 200, steps 1102 and 1104 are optional. In some examples, the policy controller 54 obtains a current network policy from the configuration node 30, and the configuration node 30 may store the current network policy in a configuration memory.
[0154] The policy controller 54 then turns on monitoring on the packet flow in the data plane of the SDN architecture 200 (1106). To turn on monitoring, the policy controller 54 may send a request to the configuration node 30 to disable the firewall policy 1000 configured in the virtual router 21. As a result, the virtual router 21 allows all traffic between the workloads of the deployed applications. (This may be consistent with the default Kubernetes network policy).
[0155] The policy controller 54 may receive user input indicating test parameters for dynamically generating network policies (1108). The test parameters may narrow the scope of analysis along one or more dimensions of application execution. For example, an application may have different layers (e.g., application, network, database, etc.), be executed at different sites, and be executed according to different roles. The application may represent a plurality of different applications, and the test parameters may specify only the analysis of a subset of different applications. The test parameters may include a time range. In some cases, the monitoring turned on in step 1106 may be constrained by the test parameters so that the virtual router 21 only stops applying these firewall policies 1000 that affect the workload covered by the test parameters, for example, only specific applications or workloads located at specific sites.
[0156] Distributed applications run in the SDN architecture 200 and generate packet flows (1110) that the virtual router 21 routes between the servers 12. The virtual router 21 may also receive packet flows from external sources via the service provider network 7 for forwarding to the application workload, and the virtual router 21 may also send packet flows generated by the application workload to external destinations via the service provider network 7. The virtual router 21 generates and stores session records of the packet flows.
[0157] The policy controller 54 obtains telemetry data from the SDN architecture 200, the telemetry data including flow metadata (1114) about packet flows between workloads of the distributed application. In some examples, the flow metadata may be a session record of traffic statistics for packet flows processed by the virtual router 21 (e.g., for forwarding between workloads). The policy controller 54 associates the session record of traffic statistics for the packet flows with the session record of traffic statistics for the workloads. The flow metadata indicates flows from a workload to other workloads.
[0158] In one example, in order to associate the session record of the packet flow with the session record of the workload, the policy controller 54 provides the session record of the traffic statistics of the packet flow to the user or administrator via the user interface device. Further, the policy controller 54 receives input specifying which packet flows correspond to a given workload via the user interface device and aggregates the session record of the packet flow into the session record of the workload based on the input.
[0159] In another example, the policy controller 54 associates the session record of the packet flow to the session record of the workload based on one or more tags specified by the session record of the packet flow. For example, the session record of the packet flow may specify one or more tags corresponding to the tags with which the workload is tagged. The policy controller 54 may use the tags to match the workload to some specific session records of the packet flow and aggregate the session record of the packet flow into the session record of the workload based on the matching tags.
[0160] As described herein, in another example, the policy controller 54 associates the session record of the packet flow to the session record of the workload. Further, the policy controller 54 can generate one or more tags corresponding to the tags with which the workload is marked from the session record of the packet flow and apply the generated tags to the session record. For example, the policy controller 54 can use metadata in the session record to generate one or more tags corresponding to the tags with which the workload is marked and apply the generated tags to the session record. The policy controller 54 can aggregate the session record of the packet flow into the session record of the workload based on the tags. Further, as described in more detail below, the policy controller 54 can use the generated tags to generate one or more application policies to apply to packet flows between instances of the workload.
[0161] In another example, the policy controller 54 associates the session records of the packet flow to the session records of the workload by applying a clustering algorithm to the session records of the packet flow. For example, the policy controller 54 may use a clustering algorithm to identify a relationship between the packet flow and the session records of a specified workload, and aggregate the session records of the packet flow into the session records of the workload based on the relationship. In some examples, the clustering algorithm is one of a K-means clustering algorithm, a Mean-Shift clustering algorithm, a density-based spatial clustering application with noise (DBSCAN) clustering algorithm, an expectation maximization (EM) clustering algorithm that may use a Gaussian mixture model (GMM), and an aggregated hierarchical clustering algorithm.
[0162] In the above examples of obtaining or generating flow metadata, the flow metadata may be constrained to packet flows that match the test parameters obtained in the testing step 1108. For example, the flow metadata may be used only for packet flows that are deployed at a specific site, or that conform to a specific role or roles, or between workloads that are within a specific time range.
[0163] The policy controller 54 dynamically generates a policy 1010 (1116) for the SDN architecture 200 based on an analysis of the flow metadata of the packet flows exchanged when monitoring is turned on. To generate the policy, the endpoints of the flow records in the flow metadata can be associated with the endpoint workloads, where, for example, the endpoint workloads can implement specific microservice components or processes. The endpoints of the flow records can be represented as virtual network addresses. For example, a specific flow record can indicate a packet flow between a container pool A (a first endpoint) that implements workload A and a container pool B (a second endpoint) that implements workload B. Therefore, the policy controller 54 can generate a new network policy rule to allow traffic from workload A to workload B. Any characteristics of the workload can be used to express the new network policy rules, such as labels, namespaces, network addresses / subnets, clusters, sites, roles, etc. The policy controller 54 can combine policy rules and can merge network policy rules based on one or more network policies 1010.
[0164] In some examples, the policy controller 54 may optionally determine whether to apply the new network policy based on user input (1118). The policy controller 54 outputs an indication of the new network policy 1010 for display at the user interface device display. If the user does not approve the new network policy 1010 (no branch in 1120), the policy controller 54 may end the operation (1126). In some cases, the policy controller 54 may receive user input instead of modifying the new network policy 1010.
[0165] If the user approves (with or without modification) the network policy 1010 or the policy controller 54 applies the new network policy 1010 without user approval (a branch in 1120), the policy controller 54 modifies the first configuration data set using the new network policy 1010 to generate a second configuration data set, and the policy controller 54 submits the second configuration data set as a new branch of the project to the configuration repository 50 (1122). Alternatively, the policy controller 54 may create the second configuration data set as new configuration data without modifying the first configuration data set.
[0166] The deployment system 52 can detect modifications to the configuration repository 50, and in response to the modifications, send a second configuration data set including the network policy 1010 to the configuration node 30 of the network controller 24, and the network controller 24 configures the policy 1000 in the virtual router 21 to implement the network policy 1010 for the application deployment (1124).
[0167] In some examples, the application deployment may be a different SDN architecture than the SDN architecture used to generate the network policy 1010. For example, a testbed SDN architecture may be used to generate the network policy 1010, while a production SDN architecture may run a production application and be configured with the network policy 1010.
[0168] In some cases, the network policy 1010 represents the network policy of the orchestrator 23. For example, the network policy 1010 can be a Kubernetes local resource, that is, a Kubernetes network policy. The configuration node 30 can convert the network policy 1010 representing the local resource of the orchestrator 23 into a custom resource configured by the SDN architecture. For example, the custom resource can be a firewall policy understood by the virtual router 21. The process is described in further detail below. In this example, the policy 1000 can represent an SDN architecture configuration object that is instantiated in the virtual router 21 and corresponds to the custom resource. Different virtual routers 21 operating on different servers 12 can implement different policy sets, and according to different policy sets, the workload operates on the server where the virtual router is located.
[0169] The policy controller 54 and the deployment system 52 can each represent a computing system separate from the SDN architecture 200. Each of the policy controller 54 and the deployment system 52 can include one or more applications executed by the processing circuit of a server or a dedicated device. In some examples, the policy controller 54 can include one or more applications executed by the processing circuit of the server 12. In some examples, the deployment system 52 and the policy controller 54 can be combined into a policy controller. The policy controller 54 and the deployment system 52 can be implemented in a public cloud or a private cloud.
[0170] Figure 2 2 is a block diagram illustrating an example of a cloud-native SDN architecture for a cloud-native network according to the techniques of the present disclosure. The SDN architecture 200 is illustrated by abstracting the underlying connections between the various components. In this example, the network controller 24 of the SDN architecture 200 includes configuration nodes 230A-230N ("configuration nodes" or "config nodes" and collectively referred to as "configuration nodes 230") and control nodes 232A-232K (collectively referred to as "control nodes 232"). The configuration nodes 230 and the control nodes 232 may represent Figure 1 2. Although shown as being separate from the server 12, the configuration node 230 and the control node 232 may be executed as one or more workloads on the server 12.
[0171] Configuration node 230 provides a northbound representational state transfer (REST) interface 248 to support intent-driven configuration of SDN architecture 200. Exemplary platforms and applications for pushing intent to configuration node 230 include a virtual machine orchestrator 240 (e.g., Openstack), a container orchestrator 242 (e.g., Kubernetes), a user interface 244, or other one or more applications 246. In some examples, SDN architecture 200 uses Kubernetes as its underlying platform.
[0172] The SDN architecture 200 is divided into a configuration plane, a control plane, a data plane, and an optional telemetry (or analysis) plane. The configuration plane is implemented using a horizontally scalable configuration node 230, the control plane is implemented using a horizontally scalable control node 232, and the data plane is implemented using a computing node.
[0173] At a high level, the configuration node 230 uses the configuration store 224 to manage the configuration resource state of the SDN architecture 200. Typically, a configuration resource (or more simply a "resource") is a named object schema that includes data and / or methods that describe a custom resource, and defines an application programming interface (API) for creating and manipulating data through an API server. A kind is the name of an object schema. Configuration resources may include Kubernetes native resources such as a container pool, an entry, a configuration map, a service, a role, a namespace, a node, a network policy, or a load balancing. According to the technology of the present disclosure, configuration resources also include custom resources that are used to extend the Kubernetes platform by defining an application programming interface (API) that is not available in the default installation of the Kubernetes platform. In the example of the SDN architecture 200, the custom resources may describe the physical infrastructure, virtual infrastructure, configuration, and / or other resources of the SDN architecture 200. As part of configuring and operating the SDN architecture 200, various custom resources may be instantiated. The instantiated resources (whether local or custom) can be referred to as objects or instances of resources, i.e., persistent entities in the SDN architecture 200 that represent the intent (desired state) and status (actual state) of the SDN architecture 200. The configuration node 230 provides an aggregate API for performing operations (i.e., create, read, update, and delete) on the configuration resources of the SDN architecture 200 in the configuration storage 224. The load balance 226 represents one or more load balancing objects that load balance configuration requests between the configuration nodes 230. The configuration storage 224 can represent one or more etcd databases. The configuration node 230 can be implemented using Nginx.
[0174] The SDN architecture 200 can provide networking for Openstack and Kubernetes. Openstack uses a plug-in architecture to support networking. Using the virtual machine orchestrator 240, i.e., Openstack, the Openstack networking plug-in driver converts the Openstack configuration objects into configuration objects (resources) of the SDN architecture 200. The computing nodes run Openstack nova to build virtual machines.
[0175] Utilizing the container orchestrator 242, i.e., Kubernetes, the SDN architecture 200 is used as a Kubernetes CNI. As described above, Kubernetes native resources (container pools, services, ingress, external load balancing, etc.) can be supported, and the SDN architecture 200 can support custom resources for Kubernetes for advanced networking and security of the SDN architecture 200.
[0176] Configuration nodes 230 provide REST monitoring to control nodes 232 to monitor changes in configuration resources, and control nodes 232 affect configuration resource changes within the computing infrastructure. Control nodes 232 receive configuration resource data from configuration nodes 230 by monitoring resources and build a complete configuration graph. A given control node in control nodes 232 consumes configuration resource data associated with the control node and communicates it to virtual router 21 (i.e., virtual router proxy- Figure 1 The control interface 254 of the control plane (not shown in the figure) distributes the required configuration to the computing nodes (servers 12). Any control node 232 may receive only a partial graph as required for processing. The control interface 254 may be XMPP. The number of deployed configuration nodes 230 and control nodes 232 may be a function of the number of supported clusters. To support high availability, the configuration plane may include 2N+1 configuration nodes 230 and 2N control nodes 232.
[0177] The control node 232 distributes routes between the computing nodes. The control node 232 uses the internal border gateway protocol (iBGP) to exchange routes between the control nodes 232, and the control node 232 can peer with any external BGP-supported gateway or other router. The control node 232 can use a route reflector.
[0178] Container pool 250 and virtual machines 252 are examples of workloads that can be deployed to compute nodes by virtual machine orchestrator 240 or container orchestrator 242 and interconnected by SDN architecture 200 using one or more virtual networks.
[0179] Figure 32 is a block diagram illustrating another view of components of an SDN architecture 200 according to the techniques of the present disclosure and further illustrating in detail. Configuration node 230, control node 232, and user interface 244 are shown with their corresponding component microservices to implement network controller 24 and SDN architecture 200 as a cloud-native SDN architecture. Each component microservice can be deployed to a compute node.
[0180] Figure 3 A single cluster is shown partitioned into network controller 24, user interface 244, compute nodes (servers 12), and telemetry 260 features. Configuration node 230 together with control node 232 make up network controller 24.
[0181] Configuration node 230 may include component microservice API server 300 (or "Kubernetes API server 300" - corresponding controller 406, Figure 3 ), custom API server 301, custom resource controller 302, and SDN controller manager 303 (sometimes referred to as "kube-manager" or "SDN kube-manager", where the orchestration platform for network controller 24 is Kubernetes). Contrail-kube-manager is an example of SDN controller manager 303. Configuration node 230 extends the interface of API server 300 with custom API server 301 to form an aggregation layer to support the data model of SDN architecture 200. As described above, the configuration intent of SDN architecture 200 can be a custom resource.
[0182] The control node 232 may include a component microservice control 320. Figure 2 As described, control 320 performs configuration distribution and route learning and distribution.
[0183] The computing node is represented by server 12. Each computing node includes a virtual router agent 316 and a virtual router forwarding component (vRouter) 318. Either of the virtual router agent 316 and the vRouter 318 can be a component microservice or both can be component microservices. Typically, the virtual router agent 316 performs functions related to control. The virtual router agent 316 receives configuration data from the control node 232 and converts the configuration data into forwarding information for the vRouter 318. The virtual router agent 316 can also perform firewall rule processing, set the flow of the vRouter 318, and dock with the orchestration plug-in (CNI for Kubernetes and Nova plug-in for Openstack). When a workload (container pool or VM) is called out on the computing node, the virtual router agent 316 generates a route, and the virtual router agent 316 exchanges the route with the control node 232 to distribute to other computing nodes (the control node 232 uses BGP to distribute routes between the control nodes 232). When the workload is terminated, the virtual router agent 316 also withdraws the route. vRouter 318 may support one or more forwarding modes, such as kernel mode, DPDK, smart NIC offload, etc. In some examples of container architectures or virtual machine workloads, the compute nodes may be Kubernetes worker / slave nodes or Openstack nova-compute nodes, depending on the specific orchestrator used.
[0184] One or more optional telemetry nodes 260 provide metrics, alerts, logging, and streaming analytics. Telemetry for the SDN architecture 200 leverages cloud native monitoring services such as Prometheus, Elastic, Fluentd, Kinaba stack (EFK), and Influx TSDB. The SDN architecture component microservices of the configuration node 230, control node 232, compute node, user interface 244, and analysis node (not shown) can generate telemetry data. The services of the telemetry node 260 can use the telemetry data. The telemetry node 260 can expose REST endpoints for users and can support insights and event correlation.
[0185] Optionally, the user interface 244 includes a network user interface (UI) 306 and a UI backend 308 service. In general, the user interface 244 provides configuration, monitoring, visualization, security, and troubleshooting for SDN architecture components.
[0186] Each of telemetry 260, user interface 244, configuration node 230, control node 232, and server 12 / compute node can be considered a node of SDN architecture 200, in that each of these nodes is an entity that implements the functions of configuration plane, control plane, or data plane, or UI and telemetry node. The node scale is configured during the "build" process, and SDN architecture 200 supports automatic expansion of nodes of SDN architecture 200 using an orchestration system operator such as a Kubernetes operator.
[0187] Figure 4 is a block diagram illustrating exemplary components of an SDN architecture according to the techniques of the present disclosure. In this example, the SDN architecture 400 extends and uses the Kubernetes API server for network configuration objects to implement user intent for the network configuration. In Kubernetes terminology, the configuration objects are called custom resources, and when persisted in the SDN architecture, they are simply referred to as objects. Configuration objects are primarily user intent (e.g., virtual networks, BGPaaS, network policies, service chains, etc.).
[0188] The configuration node 230 of the SDN architecture 400 can use the Kubernetes API server for configuration objects. In Kubernetes terminology, this is called a custom resource.
[0189] Kubernetes provides two ways to add custom resources to the cluster:
[0190] Custom Resource Definitions (CRDs) are simple and can be created without any programming.
[0191] API aggregation requires programming, but allows more control over API behavior, such as control over how data is stored and control over transitions between API versions.
[0192] The aggregate API is a slave API server that sits behind the main API server and acts as a proxy. This arrangement is called API Aggregation (AA). To the user, it appears to be just an extension of the Kubernetes API. CRD allows users to create new types of resources without adding another API server. Regardless of how it is installed, the new resources are called Custom Resources (CR) to distinguish them from local Kubernetes resources (e.g., container pools). CRDs are used in the initial Config prototype. The architecture can use the API Server Builder Alpha library to implement the aggregate API. API Server Builder is a general term for libraries and tools for building local Kubernetes aggregate extensions.
[0193] Typically, each resource in the Kubernetes API requires code to handle REST requests and manage persistent storage of objects. The main Kubernetes API server 300 (implemented by API server microservices 300A-300J) handles local resources and is also able to perform general processing of custom resources through CRDs. Aggregate API 402 represents an aggregation layer that extends the Kubernetes API server 300 to allow dedicated implementations of custom resources by writing and deploying custom API servers 301 (using custom API server microservices 301A-301M). The main API server 300 delegates requests for custom resources to the custom API server 301, thereby making the resource available to all its clients.
[0194] In this way, the API server 300 (e.g., kube-api server) can receive Kubernetes configuration objects, local objects (container pools, services), and custom resources. Custom resources for the SDN architecture 400 can include configuration objects that, when the expected state of the configuration object is achieved in the SDN architecture 400, implement the expected network configuration of the SDN architecture 400. The custom resource can correspond to a configuration scheme that is traditionally defined for network configuration but in accordance with the technology of the present disclosure, and the custom resource is extended to be manipulated through the aggregate API 402. Alternatively, the custom resource can be named and referred to herein as a "custom resource for SDN architecture configuration". Each custom resource for SDN architecture configuration can correspond to a configuration object type that is typically exposed by an SDN controller but in accordance with the technology described herein, using a custom resource to expose the configuration object and merge the configuration object with Kubernetes local / built-in resources. These configuration objects may include virtual networks, BGP as a service (BGPaaS), subnets, virtual routers, service instances, projects, physical interfaces, logical interfaces, nodes, network ipams, floating ips, alarms, alias ips, access control lists, firewall policies, firewall rules, network policies, routing targets, routing instances, etc. Therefore, the SDN architecture system 400 supports a unified intent model exposed by the aggregate API 402, i.e., through the Kubernetes controllers 406A-406N and through the custom resource controller 302 (in Figure 4 302L), Kubernetes controllers 406A-406N and custom resource controller 302 are dedicated to making the actual state of the computing infrastructure including network elements consistent with the expected state.
[0195] The aggregation layer of API server 300 sends the API custom resources to its corresponding registered custom API server 301. There may be multiple custom API servers / custom resource controllers supporting different kinds of custom resources. Custom API server 301 processes custom resources for SDN architecture configuration and writes custom resources to configuration storage 304 (which may be etcd). Custom API server 301 can be a host and exposes the SDN controller identifier allocation service required by custom resource controller 302.
[0196] The custom resource controller 302 starts applying business logic to satisfy the user intent configured with the user intent. The business logic is implemented as a coordination loop. Figure 8 814 is a block diagram illustrating an example of a custom controller for custom resources configured for an SDN architecture according to the techniques of the present disclosure. Custom controller 814 may represent an exemplary instance of custom resource controller 302. Figure 8 In the example shown, the custom controller 814 can be associated with a custom resource 818. The custom resource 818 can be any custom resource for SDN architecture configuration. The custom controller 814 can include a coordinator 816, which includes logic to perform a coordination loop, wherein the custom controller 814 observes 834 (e.g., monitors) a current state 832 of the custom resource 818. In response to determining that the desired state 826 does not match the current state 832, the coordinator 816 can perform an action to adjust 838 the state of the custom resource so that the current state 832 matches the desired state 836. The request can be received by the API server 300 and relayed to the custom API server 301 to change the current state 832 of the custom resource 818 to the desired state 836.
[0197] In the case where the request is a creation request for a custom resource, the coordinator 816 can act on a creation event for instance data of the custom resource. The coordinator 816 can create instance data of the custom resource on which the requested custom resource depends. As an example, an edge node custom resource can depend on a virtual network custom resource, a virtual interface custom resource, and an IP address custom resource. In this example, when the coordinator 816 receives a creation event for an edge node custom resource, the coordinator 816 can also create custom resources on which the edge node custom resource depends, such as a virtual network custom resource, a virtual interface custom resource, and an IP address custom resource.
[0198] By default, the custom resource controller 302 runs in active-passive mode and uses master election for consistency. When the controller container pool starts, it attempts to create a ConfigMap resource in Kubernetes using the specified key. If the creation is successful, the container pool becomes the master and starts handling coordination requests; otherwise, the container pool blocks the attempt to create an infinite loop of ConfigMaps.
[0199] The custom resource controller 302 can track the status of the custom resources it creates. For example, a virtual network (VN) creates a routing instance (RI), and a routing instance (RI) creates a routing target (RT). If the creation of a routing target fails, the routing instance status degrades, and thus, the virtual network status also degrades. Therefore, the custom resource controller 302 can output a custom message indicating the status of these custom resources to troubleshoot. Fig. 9 An exemplary flow of creating, observing, and coordinating between custom resource types that depend on different custom resource types is shown in FIG.
[0200] The configuration plane implemented by the configuration node 230 is highly available. The configuration node 230 can be based on Kubernetes, including a kube-api server service (e.g., API server 300) and a storage backend etcd (e.g., configuration storage 304). In fact, the aggregated API 402 implemented by the configuration node 230 operates as a front end to the control plane implemented by the control node 232. The main implementation of the API server 300 is a kube-api server designed to scale horizontally by deploying more instances. As shown, several instances of the API server 300 can be run to load balance API requests and processing.
[0201] Configuration storage 304 may be implemented as etcd. etcd is a consistent and highly available key-value store used as a Kubernetes backing store for cluster data.
[0202] exist Figure 4 In the example of , the servers 12 in the SDN architecture 400 each include an orchestration agent 420 and a containerized (or "cloud native") routing protocol daemon 324. These components of the SDN architecture 400 are described in further detail below.
[0203] The SDN controller manager 303 can operate as an interface between Kubernetes core resources (services, namespaces, container pools, network policies, network attachment definitions) and the extended SDN architecture resources (virtual networks, routing instances, etc.). The SDN controller manager 303 monitors the Kubernetes API for changes on the custom resources configured by the Kubernetes core network and SDN architecture and is therefore able to perform CRUD operations on the relevant resources.
[0204] In some examples, the SDN controller manager 303 is a collective term for one or more Kubernetes custom controllers. In some examples, in a single or multiple cluster deployments, the SDN controller manager 303 can run on the Kubernetes cluster it manages.
[0205] The SDN controller manager 303 listens to the following Kubernetes objects for create, delete, and update events:
[0206] ·Container pool
[0207] ·Serve
[0208] Node port
[0209] ·Entrance
[0210] Endpoints
[0211] Namespace
[0212] ·deploy
[0213] Network strategy.
[0214] When these events are generated, the SDN controller manager 303 creates appropriate SDN architecture objects, which in turn are defined as custom resources of the SDN architecture configuration. In response to detecting an event on an instance of a custom resource, whether instantiated by the SDN controller manager 303 and / or through the custom API server 301, the control node 232 obtains configuration data about the instance of the custom resource and configures a corresponding instance of the configuration object in the SDN architecture 400.
[0215] For example, the SDN controller manager 303 monitors the container pool creation event, and accordingly, the following SDN architecture objects may be created: virtual machine (workload / container pool), virtual machine interface (virtual network interface), and instance IP (IP address). Then, in this case, the control node 232 may instantiate the SDN architecture objects in the selected computing node.
[0216] As an example, based on monitoring (watch), the control node 232A can detect an event on an instance of a first custom resource exposed by the custom API server 301A, wherein the first custom resource is used to configure a certain aspect of the SDN architecture system 400 and corresponds to a configuration object type of the SDN architecture system 400. For example, the type of the configuration object can be a firewall rule corresponding to the first custom resource. In response to the event, the control node 232A can obtain configuration data about the firewall rule instance (e.g., a firewall rule specification) and provide the firewall rule in a virtual router for the server 12A. The configuration node 230 and the control node 232 can use the configuration object of the corresponding type of the SDN architecture to perform similar operations on other custom resources, such as virtual networks, BGP as a service (BGPaaS), subnets, virtual routers, service instances, projects, physical interfaces, logical interfaces, nodes, network ipams, floating ips, alarms, alias ips, access control lists, firewall policies, firewall rules, network policies, routing targets, routing instances, etc.
[0217] Figure 5 is a block diagram of an exemplary computing device in accordance with the techniques described in this disclosure. Figure 5 The computing device 500 in the example may represent an actual server or a virtual server and may represent an exemplary example of any server 12 and may be referred to as a computing node, a master / slave node, or a host. In this example, the computing device 500 includes a bus 542 coupled to hardware components in the hardware environment of the computing device 500. The bus 542 is coupled to a network interface card (NIC) 530, a storage disk 546, and one or more microprocessors 510 (hereinafter referred to as "microprocessors 510"). The NIC 530 may support SR-IOV. In some cases, the front side bus may be coupled to the microprocessor 510 and the memory device 544. In some examples, the bus 542 may be coupled to the memory device 544, the microprocessor 510, and the NIC 530. The bus 542 may represent a peripheral component interface (PCI) express (PCIe) bus. In some examples, a direct memory access (DMA) controller may control DMA transfers between components coupled to the bus 542. In some examples, components coupled to the bus 542 control DMA transfers between components coupled to the bus 542.
[0218] The microprocessor 510 may include one or more processors, each of which includes an independent execution unit that executes instructions consistent with an instruction set architecture, instructions stored to a storage medium. The execution units may be implemented as independent integrated circuits (ICs) or may be combined in one or more multi-core processors (or "multi-core" processors) each implemented using a single IC (i.e., a chip microprocessor).
[0219] Disk 546 represents a computer-readable storage medium, including volatile and / or nonvolatile, removable and / or non-removable media implemented in any method or technology for storing information such as processor-readable instructions, data structures, program modules, or other data. Computer-readable storage media include, but are not limited to, random access memory (RAM), read-only memory (ROM), EEPROM, flash memory, CD-ROM, digital versatile disk (DVD), or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, or other magnetic storage devices, or any other medium that can be used to store the desired information and can be accessed by microprocessor 510.
[0220] The main memory 544 includes one or more computer-readable storage media, which may include random access memory (RAM) such as various forms of dynamic RAM (DRAM) (e.g., DDR2 / DDR3 SDRAM), or static RAM (SRAM), flash memory, or any other form of fixed or removable storage media that can be used to carry or store the required program code and program data in the form of instructions or data structures and that can be accessed by the computer. The main memory 544 provides a physical address space consisting of addressable memory locations.
[0221] The network interface card (NIC) 530 includes one or more interfaces 532 configured to exchange packets using the links of the underlying physical network. The interface 532 may include a port interface card having one or more network ports. The NIC 530 may also include, for example, on-card memory for storing packet data. Direct memory access transmissions between the NIC 530 and other devices coupled to the bus 542 may be read from the NIC memory, or direct memory access transmissions between the NIC 530 and other devices coupled to the bus 542 may be written to the NIC memory.
[0222] Memory 544, NIC 530, storage disk 546, and microprocessor 510 can provide an operating environment for a software stack including an operating system kernel 580 executed in kernel space. For example, kernel 580 can represent Linux, Berkeley Software Distribution (BSD), a kernel of another Unix variant, or a Windows server operating system kernel purchased from Microsoft. In some examples, the operating system can run a hypervisor and one or more virtual machines managed by the hypervisor. Exemplary hypervisors include kernel-based virtual machines (KVM) for Linux kernels, Xen, ESXi commercially available from VMware, Windows Hyper-V commercially available from Microsoft, and other open source and proprietary hypervisors. The term hypervisor can cover virtual machine managers (VMMs). The operating system including kernel 580 provides an execution environment for one or more processes in user space 545.
[0223] Kernel 580 includes physical drivers 525 using network interface card 530. Network interface card 530 may also implement SR-IOV to enable communication between containers such as container 529A or one or more virtual machines ( Figure 5 530). A shared virtual device such as a virtual function may provide dedicated resources so that each virtual execution element can access the dedicated resources of the NIC 530, so that the NIC 530 appears to be a dedicated NIC to each virtual execution element. A virtual function may represent a lightweight PCIe function that shares physical resources with the physical function used by the physical driver 525 and with other virtual functions. For a NIC 530 that supports SR-IOV, the NIC 530 may have thousands of available virtual functions that comply with the SR-IOV standard, however, for I / O intensive applications, the number of configured virtual functions is typically much smaller.
[0224] Computing device 500 may be coupled to a physical network switch fabric that includes an overlay network that extends the switch fabric from physical switches to software or "virtual" routers (including virtual router 506) of physical servers coupled to the switch fabric. A virtual router may be a physical server (e.g., Figure 1A virtual router dynamically creates and manages one or more virtual networks that can be used for communication between virtual network endpoints, using a process or thread executed by a server 12 in the server, or a combination thereof. In one example, the virtual routers each implement a virtual network using an overlay network that provides the ability to decouple the virtual address of an endpoint from the physical address (e.g., IP address) on the server executing the endpoint. Each virtual network can use its own addressing and security scheme and can be considered orthogonal to the physical network and its addressing scheme. Various techniques can be used to transmit packets within and across virtual networks on top of a physical network. As used herein, the term "virtual router" can cover Open vSwitch (OVS), OVS bridge, Linux bridge, Docker bridge, or other device and / or software that is located on a host device and performs switching, bridging, or routing packets between virtual network endpoints of one or more virtual networks, where the virtual network endpoints are hosted by one or more servers 12. In Figure 5 In the exemplary computing device 500 of FIG. 5 , the virtual machine router 506 runs as a DPDK-based virtual router in user space, but the virtual router 506 can run in a hypervisor, a host operating system, a host application, or a virtual machine through various implementations.
[0225] The virtual router 506 can replace and include the virtual routing / bridging functionality of the Linux bridge / OVS module that is typically used by the Kubernetes deployment of the container pool 502. The virtual router 506 can perform bridging (e.g., E-VPN) and routing (e.g., L3VPN, IP-VPN) for virtual networks. The virtual router 506 can perform network services such as application security policies, NAT, multicast, mirroring, and load balancing.
[0226] The virtual router 506 can run as a kernel module or as a user space DPDK process (here, the virtual router 506 located in the user space 545 is shown). A virtual router agent 514 can also be run in the user space. In the exemplary computing device 500, the virtual router 506 runs as a DPDK-based virtual router in the user space, but the virtual router 506 can run in a hypervisor, a host operating system, a host application, or a virtual machine in various implementations. The virtual router agent 514 connects to the network controller 24 using a channel, which is used to download configuration and forwarding information. The virtual router agent 514 programs the forwarding state into the virtual router data (or "forwarding") plane represented by the virtual router 506. The virtual router 506 and the virtual router agent 514 can be processes. The virtual router 506 and the virtual router agent 514 are containerized / cloud-native.
[0227] Virtual router 506 can be multithreaded and run on one or more processor cores. Virtual router 506 can include multiple queues. Virtual router 506 can implement a packet processing pipeline. Depending on the operation applied to the packet, virtual router agent 514 stitches the pipeline in the simplest way to the most complex way. Virtual router 506 can maintain multiple instances of the forwarding base. Virtual router 506 can access and update the table using RCU (read copy update) locks.
[0228] To send packets to other computing nodes or switches, virtual router 506 uses workloads, injected into VM or container pool 502. Virtual router 506 has multiple virtual network interfaces (e.g., vifs). These interfaces may include a kernel interface vhost0 that exchanges packets with the host operating system, an interface pkt0 that exchanges packets with a virtual router agent 514 to obtain forwarding state from a network controller and send exception packets. There may be one or more virtual network interfaces corresponding to one or more physical network interfaces 532. Other virtual network interfaces of virtual router 506 are used to exchange packets with workloads.
[0229] In a kernel-based deployment of virtual router 506 (not shown), virtual router 506 is installed as a kernel module in the operating system. Virtual router 506 registers itself through the TCP / IP stack to receive packets from any desired operating system interface it desires. Interfaces can be bound, physicalized, tapped (for VM), veth (for containers), etc. In this mode, virtual router 506 relies on the operating system to send packets to different interfaces and receive packets from different interfaces. For example, the operating system can expose a tapped interface supported by a vhost network driver to communicate with the VM. Once virtual router 506 registers packets from the tapped interface, the TCP / IP stack sends all packets to the virtual router. Virtual router 506 sends packets via the operating system. In addition, NIC queues (physical or virtual) are processed by the operating system. Packet processing can operate in interrupt mode, which generates interrupts and may cause frequent context switching. When there is a higher packet rate, the total overhead associated with frequent interrupts and context switching may overwhelm the operating system and cause poor performance.
[0230] In a DPDK-based deployment of virtual router 506 ( Figure 5), the virtual router 506 is installed as a user space 545 application linked to the DPDK library. Specifically, this may result in faster performance than a kernel-based deployment when there are higher packet rates. The physical interface 532 is used by the DPDK's polling mode driver (PMD) rather than the kernel's interrupt-based driver. The registers of the physical interface 532 can be exposed to the user space 545 so that the PMD can access them; the physical interface 532 bound in this way is no longer managed by the host operating system or is invisible to the host operating system, and the DPDK-based virtual router 506 manages the physical interface 532. This includes packet polling, packet processing, and packet forwarding. In other words, the user packet processing steps are performed by the DPDK data plane of the virtual router 506. Compared with the interrupt mode, the nature of this "polling mode" makes the DPDK data plane packet processing / forwarding of the virtual router 506 more efficient when the packet rate is high. Compared to kernel mode virtual router 506, there are relatively fewer interrupts and context switches during packet I / O, and in some cases, interrupts and context switches during packet I / O can be avoided altogether.
[0231] In general, each of the container pools 502A-502B may be assigned one or more virtual network addresses for use within a corresponding virtual network, wherein each virtual network may be associated with a different virtual subnet provided by the virtual router 506. For example, the container pool 502B may be assigned its own virtual layer 3 (L3) IP address to send and receive communications, but the container pool 502B may not be aware of the IP address of the computing device 500 on which the container pool 502B is running. Thus, the virtual network address may be different from the logical address of the underlying physical computer system (e.g., the computing device 500).
[0232] The computing device 500 includes a virtual router agent 514 that controls the overlay of the virtual network of the computing device 500 and coordinates the routing of data packets within the computing device 500. In general, the virtual router agent 514 communicates with the network controller 24 for the virtualization infrastructure, which generates commands to create virtual networks and configure network virtualization endpoints, such as the computing device 500, and more specifically, the virtual router 506, and virtual network interfaces. By configuring the virtual router 506 based on information received from the network controller 24, the virtual router agent 514 can support the configuration of network isolation, policy-based security, gateways, source network address translation (SNAT), load balancers, and service chaining capabilities for orchestration.
[0233] In one example, a network packet, such as a Layer 3 (L3) IP packet or a Layer 2 (L2) Ethernet packet generated and used by containers 529A-529B located within a virtual network domain, can be encapsulated in another packet (e.g., another IP or Ethernet packet) transmitted by a physical network. Packets transmitted in the virtual network may be referred to herein as "inner packets", while physical network packets may be referred to herein as "outer packets" or "tunnel packets". Encapsulation and / or decapsulation of virtual network packets within physical network packets may be performed by a virtual router 506. This function is referred to herein as tunneling and may be used to create one or more overlay networks. In addition to IPinIP, other exemplary tunneling protocols that may be used include Multi-Protocol Label Switching (MPLS) based on GRE, MPLS based on User Datagram Protocol (UDP), and the like. The virtual router 506 performs tunnel encapsulation / decapsulation on packets originating from / destined for any container of the container pool 502 , and the virtual router 506 exchanges packets with the container pool 502 via the bus 542 and / or the bridge of the NIC 530 .
[0234] As described above, the network controller 24 may provide a logically centralized controller that facilitates the operation of one or more virtual networks. For example, the network controller 24 may maintain a routing information base, such as one or more routing tables that store routing information about a physical network and one or more overlay networks. The virtual router 506 implements one or more virtual routing and forwarding instances (VRFs), such as VRF 222A, for the corresponding virtual networks for which its virtual router 506 operates as a corresponding tunnel endpoint. Generally, each VRF stores forwarding information about the corresponding virtual network and identifies where a data packet is forwarded to and whether the packet is encapsulated in a tunnel protocol, such as with a tunnel header that may include one or more headers of different layers of the virtual network protocol stack. Each VRF may include a network forwarding table that stores routing and forwarding information about the virtual network.
[0235] NIC 530 may receive a tunnel packet. Virtual router 506 processes the tunnel packet to determine the virtual networks of the source endpoint and the destination endpoint of the inner packet from the tunnel encapsulation header. Virtual router 506 may strip off the Layer 2 header and the tunnel encapsulation header to forward only the inner packet internally. The tunnel encapsulation header may include a virtual network identifier, such as a VxLAN tag or an MPLS label, indicating a virtual network (e.g., a virtual network corresponding to VRF 222A). VRF 222A may include forwarding information about the inner packet. For example, VRF 222A may map the destination Layer 3 address of the inner packet to a virtual network interface. Accordingly, VRF 222A forwards the inner packet via the virtual network interface of container pool 502A.
[0236] Container 529A may also originate internal packets as a source virtual network endpoint. For example, container 529A may generate a layer 3 internal packet that is dispatched to a destination virtual network endpoint executed by another computing device (i.e., non-computing device 500) or to another container. Container 529A may send the layer 3 internal packet to virtual router 506 via a virtual network interface attached to VRF 222A.
[0237] The virtual router 506 receives the inner packet and the layer 2 header and determines the virtual network of the inner packet. The virtual router 506 may determine the virtual network using any of the virtual network interface implementation technologies described above (e.g., macvlan, veth, etc.). The virtual router 506 uses the VRF 222A corresponding to the virtual network of the inner packet to generate an outer header for the inner packet, an outer header including an outer IP header for covering the tunnel, and a tunnel encapsulation header identifying the virtual network. The virtual router 506 encapsulates the inner packet with the outer header. The virtual router 506 may encapsulate the tunnel packet with a new layer 2 header having a destination layer 2 address associated with a device located outside the computing device 500 (e.g., a TOR switch 16 or a server 12). If located outside the computing device 500, the virtual router 506 outputs the tunnel packet with the new layer 2 header to the NIC 530 using a physical function. The NIC 530 outputs the packet on the outbound interface. If the destination is another virtual network endpoint executing on computing device 500 , virtual router 506 routes the packet to an appropriate one of the virtual network interfaces.
[0238] In some examples, a controller for computing device 500 (e.g., Figure 1 The network controller 24 in the NIC 530 configures the default route in each container pool 502 to cause the container pool to use the virtual router 506 as the initial next hop for outbound packets. In some examples, the NIC 530 is configured with one or more forwarding rules that cause all packets received from the container pool to be switched to the virtual router 506.
[0239] Container pool 502A includes one or more application containers 529A. Container pool 502B includes an instance of containerized routing protocol daemon (cRPD) 560. Container platform 588 includes container engine 590, orchestration agent 592, service agent 593, and CNI 570.
[0240] The container engine 590 includes code executed by the microprocessor 510. The container engine 590 can be one or more computer processes. The container engine 590 runs containerized applications in the form of containers 529A-529B. The container engine 590 can represent Docker, rkt, or other container engines for managing containers. Typically, the container engine 590 receives requests and manages objects such as images, containers, networks, and capacities. An image is a template with instructions for creating a container. A container is an executable instance of an image. Based on instructions from the orchestration agent 592, the container engine 590 can obtain an image and instantiate it as an executable container in the container pool 502A-502B.
[0241] The service agent 593 includes code that can be executed by the microprocessor 510. The service agent 593 can be one or more computer processes. The service agent 593 monitors the addition and removal of services and endpoint objects, and, for example, uses services to maintain the network configuration of the computing device 500 to ensure communication between the container pool and the container. The service agent 593 can also manage the management ip table to capture the traffic of the virtual IP address and port of the service and redirect the traffic to the proxy port of the proxy backup container pool. The service agent 593 can represent the kube agent of the slave node of the Kubernetes cluster. In some examples, the container platform 588 does not include the service agent 593, or the service agent 593 is disabled by the CNI 570 to facilitate the configuration of the virtual router 506 and the container pool 502.
[0242] Orchestration agent 592 includes code that can be executed by microprocessor 510. Orchestration agent 592 can be one or more computer processes. Orchestration agent 592 can represent a kubelet of a slave node of a Kubernetes cluster. Orchestration agent 592 is an agent that receives container-specific data of a container and ensures that the container is executed by computing device 500. For example, Figure 1 The container-specifying data may be in the form of a manifest file sent from the orchestrator 23 to the orchestration agent 592 or received indirectly via a command line interface, an HTTP endpoint, or an HTTP server. The container-specifying data may be a container pool specification (e.g., PodSpec - YAML (yet another markup language) or a JSON object describing a container pool) of a container pool 502 of containers. Based on the container-specifying data, the orchestration agent 592 directs the container engine 590 to obtain a container image of the container 529 and instantiate the container image for the computing device 500 to execute the container 529.
[0243] Orchestration agent 592 instantiates CNI 570 and otherwise calls CNI 570 to configure one or more virtual network interfaces of each container pool 502. For example, orchestration agent 592 receives container-specific data for container pool 502A and directs container engine 590 to create container pool 502A with container 529A based on the container-specific data for container pool 502A. Orchestration agent 592 also calls CNI 570 to configure a virtual network interface of a virtual network corresponding to VRF 222A for container pool 502A. In this example, container pool 502A is a virtual network endpoint of a virtual network corresponding to VRF 222A.
[0244] CNI 570 may obtain interface configuration data for configuring the virtual network interface of container pool 502. Virtual router agent 514 operates as a virtual network control plane module that enables network controller 24 to configure virtual router 506. Unlike the orchestration control plane (including container platform 588 for slave nodes and master nodes, e.g., orchestrator 23) that manages provisioning, scheduling, and managing virtual execution elements, the virtual network control plane (including network controller 24 and virtual router agent 514 for slave nodes) manages the configuration of the virtual network partially implemented in the data plane by the virtual router 506 of the slave node. Virtual router agent 514 communicates interface configuration data about the virtual network interface to CNI 570 to enable the orchestration control plane element (i.e., CNI 570) to configure the virtual network interface according to the configuration state determined by network controller 24, thereby bridging the gap between the orchestration control plane and the virtual network control plane. Furthermore, this enables the CNI 570 to obtain interface configuration data for multiple virtual network interfaces of a container pool and configure the multiple virtual network interfaces, which can reduce the communication and resource overhead inherent in invoking a separate CNI 570 for configuring each virtual network interface.
[0245] A containerized routing protocol daemon is described in U.S. application Ser. No. 17 / 649,632, filed on Feb. 1, 2022, the entire contents of which are incorporated herein by reference.
[0246] The virtual router 506 implements the policy 1000 configured by the control node 32 based on the network policy received by the configuration node 30. The policy 1000 may include one or more application firewall policy rules, and each of the one or more application firewall policy rules defines whether a virtual router 21 should allow or deny the packet flow of the corresponding workload. For example, the policy controller 54 can use the 5-tuple of the session record of the workload to define the 5-tuple of the application firewall policy rule. Further, the policy controller 54 can define the rules of the firewall policy rules based on the session record (e.g., allow, block, record, or report the traffic corresponding to the rule). In some examples, each firewall policy rule specifies a default rule that allows the corresponding network traffic and blocks all other network traffic that does not match the generated firewall policy rule.
[0247] In the example, the policy controller 54 uses the SDN architecture configuration objects to implement the network policy 1010. As an example, the policy controller 54 applies a first set of configuration objects at the global level. The first set of configuration objects includes a global application policy set, a global firewall policy, a global firewall rule, and a global tag across multiple levels and / or categories. For example, the policy controller 54 assigns the first set of configuration objects at the global level to a virtual router. The policy controller 54 matches the global tag associated with the global application policy set, the global firewall policy, and the global firewall rule to an object marked with the global tag. Based on the global application policy set, the global firewall policy, and the global firewall rule, the policy controller 54 allows or blocks network traffic between virtual network interfaces of objects marked with the global tag. For example, the interface can be a virtual machine interface (VMI).
[0248] Further, in this example, the policy controller 54 applies a second configuration object set at the project level. The second configuration object set may include a project-specified application policy set, a firewall policy, a firewall rule, and a tag across multiple levels. The policy controller 54 allocates the second configuration object set at the project level. The policy controller 54 matches the project tag associated with the project-specified application policy set, the firewall policy, and the firewall rule to an object tagged with the project tag. Based on the project-specified application policy set, the firewall policy, and the firewall rule, the policy controller 54 allows or blocks network traffic between object interfaces tagged with the project tag.
[0249] In a further example, the policy controller 54 can specify low-level configuration objects, such as application policy sets, firewall policies, firewall rules, and tags defined at a virtual network-specific level, a virtual machine-specific level, and / or an interface-specific level. Thus, the policy controller 54 can apply a hierarchical policy set to multiple objects within one or more data centers 10. Thus, the technology of the present disclosure allows for the allocation of simplified traffic policies that are scalable and robust across a variety of different types of deployment and execution environments. Additional descriptions are found in U.S. patent application Ser. No. 15 / 819,522, filed on Nov. 22, 2017, and entitled “Scalable Policy Management for Virtual Networks,” and in U.S. Publication No. US2020 / 0106744, published on April 2, 2020, and entitled “Intent-based Policy Generation for Virtual Networks,” the entire contents of which are incorporated herein by reference.
[0250] In some examples, Figure 1 The network policy 1000 in may be a Kubernetes network policy. An exemplary Kubernetes network policy "test-network-policy" is as follows:
[0251]
[0252] cidr:17x.xx.0.0 / 16
[0253] except:
[0254] -17x.xx.1.0 / 24
[0255] -namespaceSelector:
[0256] matchLabels:
[0257] project:myproject
[0258] -podSelector:
[0259] matchLabels:
[0260] role:frontend
[0261] ports:
[0262] -protocol:TCP
[0263] port:6379
[0264] egress:
[0265] -to:
[0266] -ipBlock:
[0267] cidr:10.0.0.0 / 24
[0268] ports:
[0269] -protocol:TCP
[0270] port:5978.
[0271] As described above, the SDN controller manager 303 binds the orchestrator to the SDN architecture. As one aspect of this binding, the SDN controller manager 303 listens to updates to the network policy 1010 as a local resource of the orchestration platform and converts these network policy events into SDN architecture configuration objects. This may include the SDN controller manager 303 calling the custom API server 301 to create a custom resource in the form of a firewall policy corresponding to the network policy.
[0272] In an exemplary set of operations for performing this conversion on a network policy, the SDN controller manager 303 may create tags for each Kubernetes label, create address groups, create firewall policies for each Kubernetes network policy, and create an application policy set (APS) to represent the cluster (all firewall policies created in the cluster are attached to the application policy set). Modifications to existing Kubernetes network policies cause the SDN controller manager 303 to update the corresponding firewall policies. Tags, firewall policies, and APS are all custom resources according to the technology of this disclosure.
[0273] For the exemplary Kubernetes network policy "test-network-policy" above, if it does not exist yet, the SDN controller manager 303 can create the following tags: {role:db,namespace:default}; if it does not exist yet (name:prefix), the following address groups can be created: {17x.xx.1.0 / 24:17x.xx.1.0 / 24,17x.xx.0.0 / 16:17x.xx.0.0 / 16,10.0.0.0 / 24:10.0.0.0 / 24}; and if it does not exist yet, the following firewall rules can be created: (Rule name,action,services,endpoint1,direction,endpoint2){default-ingress-test-network-policy-0-ipBlock-0-17x.xx.1.0 / 24-0,deny,tcp:6379,Address Group:17x.xx.1.0 / 24,>,role=db&&namespace=default;;default-ingress-test-network-policy-0-ipBlock-0-cidr-17x.xx.0.0 / 16-0,pass,tcp:6379,Address Group:17x.xx.0.0 / 16,>,role=db&&namespace=default;;default-ingress-test-network-policy-0-namespaceSelector-1-0,pass,tcp:6379,project=myproject,>,role=db&&namespace=default;;default-ingress-test-network-policy-0-podSe lector-2-0,pass,tcp:6379,namespace=default&&role=frontend,>,role=db&&namespace=default;;default-egress-test -network-policy-ipBlock-0-cidr-10.0.0.0 / 24-0,pass,tcp:5978,role=db&&namespace=default,>,Address10.0.0.0 / 24}. The designator "pass" means allow.An Endpoint in this context is an endpoint workload that matches the criteria listed for Endpoints, for example, an address in a prefix range or a workload tagged with a listed tag. In contrast, a Kubernetes endpoint is a resource of an IP address and port of a container pool.
[0274] The SDN controller manager 303 can create a firewall security policy including the above rules again using the custom API server 301. The control node 232 can obtain the firewall rules and program them into the virtual router via the virtual router agent, which implements the firewall policy rules as policy 1000.
[0275] Due to the above techniques, the policy controller 54, deployment system 52, configuration repository 50, and network controller 24 provide integrated policy generation and management and deployment to facilitate continuous deployment and continuous integration with respect to configuration of an SDN architecture supporting distributed applications.
[0276] Figure 6 1300 is a block diagram of an exemplary computing device that operates as a computing node of one or more clusters of an SDN architecture system according to the techniques of the present disclosure. The computing device 1300 can represent one or more actual or virtual servers. In some instances, the computing device 1300 can implement one or more master nodes of a corresponding cluster or multiple clusters.
[0277] Although shown and described as being executed by a single computing device 1300, the scheduler 1322, API server 300A, controller 406A, custom API server 301A, custom resource controller 302A, controller manager 1326, SDN controller manager 1325, control node 232A, and configuration storage 1328 may be distributed among multiple computing devices that make up a computing system or hardware / server cluster. In other words, each of the multiple computing devices may provide a hardware operating environment for one or more instances of any one or more of the scheduler 1322, API server 300A, controller 406A, custom API server 301A, custom resource controller 302A, controller manager 1326, network controller, SDN controller manager 1325, control node 232A, or configuration storage 1328.
[0278] In this example, computing device 1300 includes a bus 1342 coupled to hardware components in a hardware environment of computing device 1300. Bus 1342 is coupled to a network interface card (NIC) 1330, a storage disk 1346, and one or more microprocessors 1310 (hereinafter referred to as "microprocessors 1310"). In some cases, a front-side bus can couple microprocessor 1310 to a memory device 1344. In some examples, bus 1342 can couple memory device 1344, microprocessor 1310, and NIC 1330. Bus 1342 can represent a peripheral component interface (PCI) express (PCIe) bus. In some examples, a direct memory access (DMA) controller can control DMA transfers between components coupled to bus 1342. In some examples, components coupled to bus 1342 control DMA transfers between components coupled to bus 1342.
[0279] The microprocessor 1310 may include one or more processors, each of which includes an independent execution unit that executes instructions consistent with an instruction set architecture, instructions stored to a storage medium. The execution units may be implemented as independent integrated circuits (ICs) or may be combined in one or more multi-core processors (or "multi-core" processors) each implemented using a single IC (i.e., a chip multiprocessor).
[0280] Disk 1346 represents a computer-readable storage medium, including volatile and / or nonvolatile, removable and / or non-removable media implemented in any method or technology for storing information such as processor-readable instructions, data structures, program modules, or other data. Computer-readable storage media include, but are not limited to, random access memory (RAM), read-only memory (ROM), EEPROM, flash memory, CD-ROM, digital versatile disk (DVD), or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, or other magnetic storage devices, or any other medium that can be used to store the desired information and can be accessed by microprocessor 1310.
[0281] The main memory 1344 includes one or more computer-readable storage media, which may include random access memory (RAM) such as various forms of dynamic RAM (DRAM) (e.g., DDR2 / DDR3 SDRAM), or static RAM (SRAM), flash memory, or any other form of fixed or removable storage media that can be used to carry or store the required program code and program data in the form of instructions or data structures and that can be accessed by the computer. The main memory 1344 provides a physical address space consisting of addressable memory locations.
[0282] The network interface card (NIC) 1330 includes one or more interfaces 1332 configured to exchange packets using the links of the underlying physical network. The interface 1332 may include a port interface card having one or more network ports. The NIC 1330 may also include, for example, on-card memory for storing packet data. Direct memory access transmissions between the NIC 1330 and other devices coupled to the bus 1342 may be read from the NIC memory, or direct memory access transmissions between the NIC 1330 and other devices coupled to the bus 1342 may be written to the NIC memory.
[0283] Memory 1344, NIC 1330, storage disk 1346, and microprocessor 1310 can provide an operating environment for a software stack including an operating system kernel 1314 executed in kernel space. For example, kernel 1314 can represent Linux, Berkeley Software Distribution (BSD), a kernel of another Unix variant, or a Windows server operating system kernel commercially available from Microsoft. In some instances, the operating system can run a hypervisor and one or more virtual machines managed by the hypervisor. Exemplary hypervisors include a kernel-based virtual machine (KVM) for the Linux kernel, Xen, ESXi commercially available from VMware, Windows Hyper-V commercially available from Microsoft, and other open source and proprietary hypervisors. The term hypervisor can cover a virtual machine manager (VMM). An operating system including kernel 1314 provides an execution environment for one or more processes in user space 1345. Kernel 1314 includes a physical driver 1327 using a network interface card 1330.
[0284] Computing device 1300 may be coupled to a physical network switching fabric that includes software or an overlay network of virtual routers that extend the switching fabric from physical switches to physical servers coupled to the switching fabric, such as virtual router 21. Computing device 1300 may configure slave nodes of a cluster using one or more dedicated virtual networks.
[0285] API server 300A, scheduler 1322, controller 406A, custom API server 301A, custom resource controller 302A, controller manager 1326, and configuration store 1328 may implement a master node of a cluster and may be referred to alternatively as a “master component.” The cluster may be a Kubernetes cluster, and the master node may be a Kubernetes master node, in which case the master component is a Kubernetes master component.
[0286] Each of the API server 300A, the controller 406A, the custom API server 301A, and the custom resource controller 302A includes code that can be executed by the microprocessor 1310. The custom API server 301A verifies and configures data about custom resources configured for the SDN architecture. A service can be an abstraction of a logical collection of defined container pools and policies for accessing the container pools. A set of container pools that implement the service is selected based on the service definition. A service can be partially implemented as a load balancer or include a load balancer by other means. The API server 300A and the custom API server 301A can implement a representational state transfer (REST) interface to process REST operations and provide a front end as part of the configuration plane of the SDN architecture to a corresponding cluster shared state stored in the configuration storage 1328. The API server 300A can represent a Kubernetes API server.
[0287] Configuration storage 1328 is a backup storage for all cluster data. Cluster data may include cluster state and configuration data. Configuration data may also provide a backend for service discovery and / or provide locking services. Configuration storage 1328 may be implemented as a key value store. Configuration storage 1328 may be a central database or a distributed database. Configuration storage 1328 may represent etcd storage. Configuration storage 1328 may represent Kubernetes configuration storage.
[0288] Scheduler 1322 includes code that can be executed by microprocessor 1310. Scheduler 1322 can be one or more computer processes. Scheduler 1322 monitors newly created or requested virtual execution elements (e.g., container pools in containers) and selects slave nodes for virtual execution elements to run. Scheduler 1322 can select slave nodes based on resource requirements, hardware constraints, software constraints, policy constraints, locality, etc. Scheduler 1322 can represent a Kubernetes scheduler.
[0289] Typically, the API server 300 may call the scheduler 1322 to schedule the container pool. The scheduler 1322 may select a slave node and return an identifier for the selected slave node to the API server 300A, and the API server 300 may write the identifier to the configuration storage 1328 associated with the container pool. The API server 300 may call the orchestration agent for the selected slave node, so that the container engine for the selected slave node obtains the container pool from the storage server and creates a virtual execution element on the slave node. The orchestration agent for the selected slave node may update the status of the container pool to the API server 300A, and the API server 300A persists the new state to the configuration storage 1328. In this way, the computing device 1300 instantiates the new container pool in the computing infrastructure 8.
[0290] Controller manager 1326 includes code that can be executed by microprocessor 1310. Controller manager 1326 can be one or more computer processes. Controller manager 1326 can be embedded in the kernel control loop to monitor the shared state of the cluster by obtaining notifications from API server 300A. Controller manager 1326 can try to move the state of the cluster toward the desired state. Exemplary controller 406A and custom resource controller 302A can be managed by controller manager 1326. Other controllers can include replication controllers, endpoint controllers, namespace controllers, and service account controllers. Controller manager 1326 can perform lifecycle functions such as namespace creation and lifecycle, event garbage collection, termination container pool garbage collection, cascade deletion garbage collection, node garbage collection, etc. Controller manager 1326 can represent a Kubernetes controller manager for a Kubernetes cluster.
[0291] The network controller for the SDN architecture described herein can provide cloud networks for computing architectures operating on top of the network infrastructure. Cloud networks can include private clouds for enterprises or service providers, infrastructure as a service (IaaS), and virtual private clouds (VPC) for cloud service providers (CSPs). Private clouds, VPCs, and IaaS use cases may involve references such as Figure 1 The multi-tenant virtualized data center described. In this case, multiple tenants located in the data center share the same physical resources (physical servers, physical storage, physical networks). Each tenant is allocated its own logical resources (virtual machines, containers, or other forms of virtual execution elements; virtual storage; virtual networks). These logical resources are isolated from each other unless explicitly allowed by security policies. Virtual networks located in the data center can also be interconnected with physical IP VPNs or L2VPNs.
[0292] A network controller (or "SDN controller") can provide network function virtualization (NFV) for networks such as business edge networks, broadband user management edge networks, and mobile edge networks. NFV involves the orchestration and management of network functions in virtual machines, containers, or other virtual execution elements rather than physical hardware devices, such as firewalls, intrusion detection or prevention systems (IDS / IPS), deep packet inspection (DPI), caching, wide area network (WAN) optimization, etc.
[0293] The SDN controller manager 1325 includes code that can be executed by the microprocessor 1310. The SDN controller manager 1325 can be one or more computer processes. The SDN controller manager 1325 operates as an interface between orchestration-oriented elements (e.g., scheduler 1322, API server 300A and custom API server 301A, controller manager 1326, and configuration storage 1328). Typically, the SDN controller manager 1325 monitors clusters of new Kubernetes local objects (e.g., container pools and services). The SDN controller manager 1325 can isolate container pools in virtual networks and connect container pools to services.
[0294] The SDN controller manager 1325 can run as a container of the master node of the cluster. As described herein, in some cases, using the SDN controller manager 1325 can enable disabling the service agent (e.g., Kubernetes kube-agent) of the slave node so that all container pool connections are achieved using a virtual router.
[0295] The components of the network controller 24 can operate as a CNI for Kubernetes and can support multiple deployment modes. CNI 17, CNI 750 are the compute node interfaces of the entire CNI framework for managing the network of Kubernetes. The deployment modes can be divided into two categories: (1) an SDN architecture cluster as a CNI integrated into the workload Kubernetes cluster; and (2) an SDN architecture cluster as a CNI separated from the workload Kubernetes cluster.
[0296] Integrate with workload Kubernetes clusters
[0297] The components of the network controller 24 (e.g., custom API server 301, custom resource controller 302, SDN controller manager 1325, and control node 232) run in a management Kubernetes cluster on a master node close to the Kubernetes controller components. In this mode, the components of the network controller 24 are actually part of the same Kubernetes cluster as the workload.
[0298] Separation from workload Kubernetes cluster
[0299] Components of the network controller 24 are executed by a separate Kubernetes cluster from the workload Kubernetes cluster.
[0300] The SDN controller manager 1325 can use the controller framework for the orchestration platform to listen to (or otherwise monitor) changes to objects defined in the Kubernetes native API and add annotations to some of these objects. An annotation can be a label or other identifier that indicates the characteristics of the object (e.g., "virtual network green"). The SDN controller manager 1325 is a component of the SDN architecture, that is, it listens to Kubernetes kernel resource (such as, container pools, network policies, services, etc.) events and converts these events into custom resources configured by the SDN architecture as needed. The CNI plugin (e.g., CNI 17, 570) is an SDN architecture component that supports the Kubernetes network plugin standard: container network interface.
[0301] The SDN controller manager 1325 can create a network solution for an application using the REST interface exposed by the aggregate API 402 to define network objects such as virtual networks, virtual network interfaces, and access control policies. For example, the network controller 24 component can implement a network solution in a computing infrastructure by configuring one or more virtual networks and virtual network interfaces in a virtual router. (This is just one example of an SDN configuration).
[0302] The following exemplary deployment configuration for the application consists of a container pool and virtual network information for the container pool:
[0303] apiVersion:v1
[0304] kind:Pod
[0305] metadata:
[0306] name:multi-net-pod
[0307] annotations:
[0308] networks:'[
[0309] {"name":"red-network"},
[0310] {"name":"blue-network"},
[0311] {"name":"default / extns-network"}
[0312] ]'
[0313] spec:
[0314] containers:
[0315] -image:busybox
[0316] command:
[0317] -sleep
[0318] -"3600"
[0319] imagePullPolicy:IfNotPresent
[0320] name:busybox
[0321] stdin:true
[0322] tty:true
[0323] restartPolicy:Always.
[0324] This metadata information may be replicated to each container pool replica created by the controller manager 1326. When the SDN controller manager 1325 is informed of these container pools, the SDN controller manager 1325 may create the virtual networks listed in the annotations ("red-network", "blue-network", and "default / extns-network" in the above embodiment) and create a virtual network interface for each container pool replica (e.g., container pool 202A) for each virtual network using a unique private virtual network address from the virtual network's cluster-wide address block (e.g., 10.0 / 16).
[0325] Additional techniques according to the present disclosure are described below. Contrail is an exemplary network controller architecture. Contrail CNI may be a CNI developed for Contrail. A cloud-native Contrail controller may be an example of a network controller described in the present disclosure, such as network controller 24.
[0326] Fig. 7A is a block diagram illustrating the control / routing plane of an underlay network and an overlay network configuration using an SDN architecture according to the techniques of this disclosure. Figure 7B is a block diagram illustrating a configured virtual network connecting a pool of containers using tunnels configured in an underlying network in accordance with the techniques of this disclosure.
[0327] The network controller 24 for the SDN architecture can use a distributed or centralized routing plane architecture. The SDN architecture can use a containerized routing protocol daemon (process).
[0328] In terms of network signaling, the routing plane can work according to a distributed model, where cRPD runs on each compute node in the cluster. Essentially, this means that intelligence is built into the compute nodes and the intelligence involves complex configuration at each node. In this model, route reflectors (RRs) may not be able to make intelligent routing decisions, but are used as relays to reflect routes between nodes. A distributed container routing protocol daemon (cRPD) is a routing protocol process that can be used, where each compute node runs its own instance of the routing daemon. At the same time, a centralized cRPD master instance can be used as a RR to relay routing information between compute nodes. Routing and configuration intelligence is distributed across nodes using RRs at a central location.
[0329] Alternatively, the routing plane can work according to a more centralized model, where components of the network controller run centrally and absorb the intelligence required to process configuration information, build network topology, and program the forwarding plane into virtual routers. The virtual router agent is a local agent that processes the information programmed by the network controller. This design results in facilitating more limited intelligence required at the compute nodes and tends to produce simpler configuration states.
[0330] The centralized control plane provides the following:
[0331] Allows the proxy routing framework to be simpler and more lightweight. Hides the complexity and limitations of BGP from the proxy. The proxy does not need to understand concepts like route distinguishers, route targets, etc. The proxy simply exchanges prefixes and builds its corresponding forwarding information.
[0332] There are indeed more control nodes than routes. Control nodes are built on virtual network concepts and can generate new routes using route replication and reorganization (e.g., supporting features like service chaining and intra-VM routing among other use cases).
[0333] Build a BUM tree for optimal broadcast and multicast forwarding.
[0334] It should be noted that the control plane has a distributed nature in certain aspects. As a control plane supporting distributed functions, it allows each local virtual router agent to publish its local routes and subscribe to configurations based on needs.
[0335] Therefore, it makes sense to think about control plane design from a tool POV and use the tool at hand appropriately. Consider the pros and cons of contrail-bgp and cRPD.
[0336] The following functions may be provided by the cRPD or control node of the network controller 24.
[0337] Routing daemon / process
[0338] The control node and cRPD can act as routing daemons that implement different protocols and have the ability to program routing information in the forwarding plane.
[0339] cRPD implements routing protocols with a rich routing stack including Interior Gateway Protocol (IGP) (e.g., Intermediate System to Intermediate System (IS-IS)), BGP-LU, BGP-CT, SR-MPLS / SRv6, Bidirectional Forwarding Detection (BFD), Path Computation Element Protocol (PCEP), etc. It can also be deployed to provide services such as route reflectors only for the control plane and is popular in Internet routing use cases due to these capabilities.
[0340] The control node 232 also implements routing protocols, but is primarily based on BGP. The control node 232 understands overlay networks. The control node 232 provides a rich feature set when overlaying virtualization and caters to SDN use cases. Overlay features such as virtualization (abstraction using virtual networks) and service chaining are very popular among telecom and cloud providers. In some cases, cRPD may not include support for this overlay functionality. However, the rich feature set of cRPD provides strong support for the underlying network.
[0341] Network Orchestration / Automation
[0342] The routing function is only part of the control node 232. An integral part of the overlay network is orchestration. In addition to providing overlay routing, the control node 232 helps model the orchestration function and provides network automation. The core of the orchestration capability of the control node 232 is the ability to model network virtualization using abstractions based on virtual networks (and related objects). The control node 232 interfaces with the configuration node 230 to relay configuration information to the control plane and the data plane. The control node 232 also helps build an overlay tree for multicast layer 2 and layer 3. For example, the control node can build a virtual topology of its cluster for this purpose. Typically, cRPD does not include this orchestration capability.
[0343] High availability and horizontal scalability
[0344] The control node design is more centralized, while cRPD is more distributed. There are cRPD worker nodes running on each computing node. On the other hand, the control node 232 does not run on the computing and can even run on a remote cluster (that is, independent and in some cases geographically far away from the workload cluster). The control node 232 also provides horizontal scalability for HA and runs in active-active mode. The computing load is shared between the control nodes 232. On the other hand, cRPD does not usually provide horizontal scalability. The control node 232 and cRPD can provide a smooth restart to HA and can allow data plane operation in headless mode-wherein, even if the control plane is restarted, the virtual router can also run.
[0345] The control plane should be more than just a routing daemon. The control plane should support overlay routing and network orchestration / automation, and cRPD is just as good as routing protocols in managing underlay routing, however, cRPD generally lacks network orchestration capabilities and does not provide strong support for overlay routing.
[0346] Accordingly, in some examples, the SDN architecture can be FIG. 7A to FIG. 7B The compute nodes shown in Figure 1 have cRPDs on them. Fig. 7A An SDN architecture 700 is shown that can represent an exemplary implementation SDN architecture 200 or 400. In the SDN architecture 700, the cRPD 324 runs on the compute nodes and provides underlying routing to the forwarding plane while running a centralized (and horizontally scalable) set of control nodes 232 that provide orchestration and overlay services. In some examples, instead of running the cRPD 324 on the compute nodes, a default gateway can be used.
[0347] The cRPD 324 on the computing node provides rich underlying routing to the forwarding plane by interacting with the virtual router agent 514 using an interface 540 (which can be a gRPC interface). The virtual router agent interface can allow programming of routing, configuration of virtual network interfaces for overlay, and configuration of the virtual router 506 by other means. This is further described in detail in U.S. Application No. 17 / 649,632. At the same time, one or more control nodes 232 operate as independent container pools that provide overlay services. Thus, the SDN architecture 700 can obtain rich overlays and orchestration provided by the control node 232 and modern underlying routing of the supplementary control node 232 provided by the cRPD 324 on the computing node. An independent cRPD controller 720 can be used to configure the cRPD 324. The cRPD controller 720 can be a device / element management system, a network management system, an orchestrator, a user interface / CLI, or other controller. The cRPD 324 runs a routing protocol and exchanges routing protocol messages with routers, including other cRPDs 324. Each cRPD 324 may be a centralized routing protocol process and in effect operates as a software-only version of the router control plane.
[0348] The enhanced underlay routing provided by cRPD 324 can replace the default gateway of the forwarding plane and provide a rich routing stack for supported use cases. In some examples where cRPD 324 is not used, virtual router 506 relies on the default gateway of the underlay routing. In some examples, cRPD 324 as an underlay routing process is limited to programming the default inet(6).0 structure with only control plane routing information. In this example, a non-default overlay VRF can be programmed by control node 232.
[0349] FIG. 7A to FIG. 7B The dual routing / control plane solution described above is shown in FIG. Fig. 7A In some aspects, cRPD 324 provides underlying routing / forwarding information to virtual router agent 514, similar to how a router control plane programs a router forwarding / data plane.
[0350] like Figure 7B, cRPD 324 exchanges routing information that can be used to create a tunnel through the underlying network 702 of the VRF. Tunnel 710 is an example and connects server 12A to the virtual router 506 of server 12X. Tunnel 710 can represent a segment routing (SR) or SRv6 tunnel, a generic routing encapsulation (GRE) tunnel, and an IP-in-IP tunnel, an LSP, or other tunnel. The control node 232 uses tunnel 710 to create a virtual network 712 that connects server 12A of the VRF attached to the virtual network with the container pool 22 of server 12X.
[0351] As described above, cRPD 324 and virtual router agent 514 can exchange routing information using a gRPC interface, and virtual router agent 514 can program virtual router 506 through configuration using a gRPC interface. It should also be noted that control node 232 can be used for overlay and orchestration, while cRPD 324 can be used to manage the underlying routing protocol. Virtual router agent 514 can use a gRPC interface with cRPD 324 while communicating with the control node and domain name service (DNS) using XMPP.
[0352] Because there may be workers running on various compute nodes, the gRPC model performs well for cRPD 324. And the virtual router proxy 514 acts as a gRPC server that exposes the services of the client (cRPD 324) for programming routing and configuration information (underlying). Thus, gRPC is an attractive solution when compared to XMPP. Specifically, gRPC transmits data as a binary stream and does not add overhead when encoding / decoding data sent through gRPC.
[0353] In some examples, the control node 232 can use XMPP to interface with the virtual router proxy 514. Since the virtual router proxy 514 acts as a gRPC server, the cRPD 324 acts as a gRPC client. This means that the client (cRPD) needs to initiate a connection to the server (vRouter proxy). In the SDN architecture 700, the virtual router proxy 514 selects the set of control nodes 232 to which it subscribes (because there are multiple control nodes). In this aspect, the control node 232 acts as a server and the virtual router proxy 514 connects as a client and subscribes for updates.
[0354] The control node 232 needs to select the virtual router agent 514 to which it needs to connect through gRPC and then subscribe as a client. Because the control node 232 does not run on each computing node, this requires the implementation of an algorithm for selecting the virtual router agent 514 to which it can subscribe. Further, the control nodes 232 need to synchronize this information with each other. When a restart occurs, this also complicates the situation, and synchronization is required between the control nodes 232 to select the agent it serves. Features such as smooth restart (GP) and fast convergence have been implemented on top of XMPP. XMPP is already lightweight and effective. Therefore, for communication from the control node 232 to the virtual router agent 514, XMPP may be superior to gRPC.
[0355] The additional enhancements of the control node 232 and its use are as follows. HA and horizontal scalability have three control nodes. As with any routing platform, it is sufficient to have only two control nodes 232 to meet the HA requirements. In many cases, this is advantageous. (However, one or more control nodes 232 can be used). For example, it provides a more deterministic infrastructure and is consistent with the best practices of standard routing. Each virtual router agent 514 is attached to a unique pair of control nodes 232 to avoid randomness. With two control nodes 232, debugging may be simpler. In addition, with only two control nodes 232, edge replication for building a multicast / broadcast tree can be simplified. Currently, because the vRouter agent 514 is only connected to two of the three control nodes, all control nodes may not have a complete picture of the tree at a certain time and rely on BGP to synchronize the state between the control nodes. Because the virtual router agent 514 can randomly select two, the three control nodes 232 exacerbate this situation. If there are only two control nodes 232, each virtual router agent 514 is connected to the same control node. This in turn means that the control node 232 does not need to rely on BGP to synchronize state and have the same picture of the multicast tree.
[0356] The SDN architecture 200 can provide ingress replication as an alternative to edge replication and provide an option for the user. Ingress replication can be considered as a special degenerate case of a general overlay multicast tree. However, in practice, the signaling of the ingress replication tree is simpler than that of the general overlay multicast tree. With ingress replication, each virtual router 21 ends up with a tree with itself as the root and each other vrouter as a leaf. A failed virtual router 21 should not theoretically lead to a reconstruction of the tree. It should be noted that the performance of ingress replication deteriorates due to larger clusters. However, ingress replication performs well for smaller clusters. Further, multicast is not a popular and common requirement for many customers. It is mainly limited to transmitting only the initial broadcast BUM traffic.
[0357] Configuration processing module enhancements
[0358] In a conventional SDN architecture, the network controller handles the orchestration of all use cases. The configuration node converts the intent into a configuration object based on the data model and writes the configuration object to a database (e.g., Cassandra). In some cases, for example, notifications are sent to all clients waiting for configuration via RabbitMQ at the same time.
[0359] The control node not only acts as a BGP speaker, but also has a configuration processing module that reads configuration objects from the database in the following way. First, when the control node starts (or restarts), it connects to the database and reads all configurations directly from the database. Secondly, the control node can also be a message client. When there is an update to the configuration object, the control node receives a message notification that lists the objects that have been updated. This again causes the configuration processing module to read the object from the database.
[0360] The configuration processing module reads the configuration objects of the control plane (BGP related configuration) and the vRouter forwarding plane. The configuration can be stored as a graph with objects as nodes and relationships as links. This graph can then be downloaded to the client (BGP / cRPD and / or vRouter agent).
[0361] According to the technology of the present disclosure, in some examples, the API server and message service of the conventional configuration are replaced by the kubeapi-server (API server 300 and custom API server 301) and the previous Cassandra database is replaced by etcd in Kubernetes. Due to this change, clients interested in configuration objects can directly make monitoring on the etcd database to obtain updates instead of relying on RabbitMQ notifications.
[0362] Controller Orchestration of CRPD
[0363] BGP configuration may be provided to cRPD 324. In some examples, cRPD controller 720 may be a Kubernetes controller that caters to a Kubernetes controller that develops its own controller that caters to the Kubernetes space and implements the CRDs needed to orchestrate and provision cRPD 324.
[0364] Distributed configuration processing
[0365] As mentioned before in this section, the configuration processing module can be part of the control node 232. The configuration processing module reads the configuration directly from the database, converts the data into JSON format, and stores it in its local IFMAP database as a graph with objects as nodes and the relationships between them as links. The graph is then downloaded to the interested virtual router agent 514 on the computing node via XMPP. The virtual router agent 514 also builds an IFMAP-based dependency graph locally to store these objects.
[0366] By having the virtual router proxy 514 monitor directly on the etcd server in the API server 300, the need for IFMAP as an intermediate module and the need to store the dependency graph can be avoided. The cRPD 324 running on the compute nodes can use the same model. This will avoid the need for an IFMAP-XMPP configuration channel. The Kubernetes configuration client (for controlling the nodes 232) can be used as part of this configuration. The virtual router proxy can also use this client.
[0367] However, this can increase the number of clients reading configuration from the etcd server, especially in clusters with hundreds of compute nodes. Adding more monitors eventually causes the write rate to drop and the event rate to drop to suboptimal values. etcd's gRPC proxy replays from one server monitor to multiple client monitors. The gRPC proxy merges multiple client monitors (c-monitors) for the same key or range into a single monitor (s-monitor) connected to the etcd server. The proxy broadcasts all events from the s-monitor to its c-monitor. Assuming N clients monitor the same key, a gRPC proxy can reduce the monitoring load on the etcd server from N to 1. Users can deploy multiple gRPC proxies to further distribute the server load. These clients share a server monitor; the proxy effectively offloads resources from the core cluster. With the addition of proxies, etcd can serve a million events per second.
[0368] DNS / Naming in SDN Architecture
[0369] In the previous architecture, DNS services were provided by contrail-dns and contrail-naming processes working together to provide DNS services to VMs in the network. Naming was used as a DNS server that provided an implementation of the BIND protocol, contrail-dns received updates from vrouter-agent and pushed these records to naming.
[0370] The system supports four DNS modes, and IPAM configuration can select the required DNS mode.
[0371] 1. None - No DNS support for the VM.
[0372] 2. Default DNS Server - DNS resolution for the VM is done based on the name server configuration in the server infrastructure. When the VM gets a DHCP response, the subnet default gateway is configured as the DNS server for the VM. DNS requests sent by the VM to the default gateway are resolved via the (fabric) name server configured on the corresponding compute node, and the response is sent back to the VM.
[0373] 3. Tenant DNS Servers - Tenants can use their own DNS servers using this mode. A list of servers can be configured in IPAM, and then sent as DNS servers in the DHCP response to the VM. DNS requests sent by the VM are routed like any other data packets based on the available routing information.
[0374] 4. Virtual DNS Server - In this mode, the system supports virtual DNS servers, thereby providing a DNS server to resolve DNS requests from VMs. A person skilled in the art can define multiple virtual domain name servers under each domain in the system. Each virtual domain name server is an authoritative server for the configured DNS domain.
[0375] The SDN architecture described here is effective in the DNS service it provides. Customers in the cloud-native world benefit from a variety of DNS services. However, with the move to a next-generation Kubernetes-based architecture, the SDN architecture can replace the core DNS with any DNS service.
[0376] Data plane
[0377] The data plane consists of two components: a virtual router agent 514 (aka agent) and a virtual router forwarding plane 506 (also known as a DPDK vRouter / kernel vRouter). The agent 514 in the SDN architecture solution is responsible for managing the data plane components. The agent 514 establishes an XMPP neighbor relationship with the two control nodes 232, and then exchanges routing information with the two control nodes 232. The vRouter agent 514 also dynamically generates flow entries and injects the flow entries into the virtual router 506. This gives instructions to the virtual router 506 on how to forward packets.
[0378] The responsibilities of the agent 514 may include: interfacing with the control node 232 to obtain configurations. Converting the received configurations into a form that the data path can understand (e.g., converting a data model from IFMAP into a data model used by the data path). Interfacing with the control node 232 to manage routing. And collecting statistics from the data path and exporting the statistics to a monitoring solution.
[0379] The virtual router 506 implements data plane functionality that can allow virtual network interfaces to be associated with VRFs. Each VRF has its own forwarding and flow tables, while the MPLS and VXLAN tables are global within the virtual router 506. The forwarding table can contain routes for the IP and MAC addresses of the destination and the IP to MAC association is used to provide proxy ARP capabilities. The label value in the MPLS table is selected by the virtual router 506 when the VM / container interface is started and is only important locally to the vRouter. The VXLAN network identifier is global to all VRFs of the same virtual network in different virtual routers 506 within a domain.
[0380] In some examples, each virtual network has a default gateway address assigned to it, and each VM or container interface receives this address in the DHCP response it receives when it is initialized. When a workload sends a packet to an address outside of its subnet, the ARP for the MAC will correspond to the IP address of the gateway, and the virtual router 506 will respond with its own MAC address. Thus, the virtual router 506 can support a fully distributed default gateway function for all virtual networks.
[0381] The following is an example of packet flow forwarding implemented by virtual router 506.
[0382] Packet flow between VM / container interfaces in the same subnet.
[0383] The worker node can be a VM or a container interface. In some examples, packet processing is performed as follows:
[0384] The VMI / Container Interface needs to send a packet to VM2, so the virtual router 506 first queries its own DNS cache for the IP address, but because this is the first packet, there is no entry.
[0385] When its interface comes up, VM1 sends a DNS request to the DNS server address supplied in the DHCP response.
[0386] The virtual router 506 intercepts the DNS request and forwards it to the DNS server running in the SDN architecture controller.
[0387] The DNS server in the controller responds with the IP address of VM2.
[0388] Virtual router 506 sends the DNS response to VM1.
[0389] VM1 needs to form an Ethernet frame and therefore needs the MAC address of VM2. VM1 checks its own ARP cache, but, because this is the first packet, no entry exists.
[0390] VM1 sends an ARP request.
[0391] • Virtual router 506 intercepts the ARP request and looks up the MAC address of IP-VM2 in its own forwarding table and finds the association in the L2 / L3 routing where the controller sent the MAC address for VM2.
[0392] Virtual router 506 sends an ARP reply to VM1 using the MAC address of VM2.
[0393] A TCP timeout occurred in VM1's network stack.
[0394] VM1's network stack retries to send the packet, and this time, finds VM2's MAC address in the ARP cache and is able to form an Ethernet frame and send it out.
[0395] Virtual router 506 queries VM2's MAC address and finds the encapsulation route. Virtual router 506 constructs the outer header and sends the generated packet to server S2.
[0396] • Virtual router 506 on server S2 decapsulates the packet and looks up the MPLS label to identify the virtual interface to send the original Ethernet frame into. The Ethernet frame is sent into the interface and is received by VM2.
[0397] Packet flow between VMs in different subnets
[0398] In some examples, the order of sending packets to destinations in different subnets is the same, except that virtual router 506 responds as the default gateway. VM1 sends packets in Ethernet frames with the MAC address of the default gateway, which IP address was provided in the DHCP response supplied by virtual router 506 when VM1 booted. When VM1 makes an ARP request for the gateway IP address, virtual router 506 responds with its own MAC address. When VM1 sends an Ethernet frame using the gateway MAC address, virtual router 506 uses the destination IP address of the packet in the frame to look up the forwarding table in the VRF to find a route to the host running the destination via the encapsulation tunnel.
[0399] Fig.12 200 is a flow chart illustrating an exemplary mode of operation of an SDN architecture. In this example, the network controller 24 may receive a new network policy (1202). The network controller configures the SDN architecture 200 with the current network policy, but modifies the current network policy to incorporate the new network policy (1204). For example, the new network policy may modify an existing policy rule, create a new policy rule, or delete an existing policy rule. Once the SDN architecture 200 is configured with the network policy modified by the new network policy, the distributed applications run and the workloads exchange packet flows.
[0400] The policy controller 54 obtains telemetry data from the SDN architecture 200, the telemetry data including flow metadata about packet flows between workloads of the distributed application (1206). Fig.11 Exemplary techniques for obtaining flow metadata are described.Policy controller 54 may obtain current network policies in SDN architecture 200, ie, network policies that do not add new network policies (1208).
[0401] The policy controller 54 can then compare the flow metadata with the current network policy to determine whether any packet flow violates the current network policy (1210). The packet flow may violate the network policy for various reasons: the virtual router may be misconfigured, there may be vulnerabilities in the component code of the SND architecture, the network policy may be irreconcilable, etc. However, for operation 1200, because the flow metadata is based on the configured network policy that integrates the new network policy, the packet flow may intentionally violate the current network policy because the new network policy rewrites an aspect of the current network policy. This is called discrepancy. For example, a network policy implemented as a firewall policy in the virtual router 21 may specify that app→database is allowed, that is, traffic is allowed from the application layer of the application to the database layer. In this example, the workload is marked with layer information, and the virtual router applies the policy to enforce the firewall policy. The new network policy may specify that app→database is denied, that is, traffic is not allowed from the application layer of the application to the database layer. Therefore, the flow metadata does not indicate that any packet flow is from a workload marked with an app tag to a workload marked with a database tag. This is an inconsistency with current network policy (although not new network policy).
[0402] The policy controller 54 may output inconsistent indications to a user input device display. The indication may include a mark of the flow metadata of the packet flow that violates the current network policy. The inconsistent indication may also indicate the network policy of the current network policy that is violated. The user may view the inconsistent indications and provide user input to the policy controller 54. The policy controller 54 may receive an indication of the user input to indicate whether the user wishes to apply a new network policy. If not (in 1214, no branch), the policy controller 54 may end the operation (1216).
[0403] If yes (in 1214, it is a branch), the policy controller 54 can update the current network policy with the new network policy to create an updated network policy (1218). Therefore, the policy controller 54 can modify the configuration data in the configuration repository 50 to be a new branch of the project.
[0404] The deployment system 52 can detect the modification to the configuration repository 50, and in response to the modification, send the modified configuration data including the network policy 1010 to the configuration node 30 of the network controller 24, and the network controller 24 configures the policy 1000 in the virtual router 21 to implement the updated network policy 1010 for application deployment (1220). The distributed application runs in the SDN architecture 200 configured with the network policy 1000.
[0405] Fig.13 1404 is a flow chart illustrating an exemplary mode of operation of an SDN architecture that performs configuration validation according to the techniques of the present disclosure. In this example, the network controller 24 configures the SDN architecture 200 with a network policy (1404). Once the SDN architecture 200 is configured with the network policy, the distributed applications run and the workloads exchange packet flows.
[0406] The policy controller 54 obtains telemetry data from the SDN architecture 200, the telemetry data including flow metadata about packet flows between workloads of the distributed application (1406). Fig.11 An exemplary technique for obtaining flow metadata is described. The policy controller 54 may obtain a network policy configured in the SDN architecture 200 (1408). The obtained network policy should be the network policy configured in the SDN architecture 200, and the packet statistics used to generate the flow metadata obtained in step 1406 are collected by the SDN architecture collector.
[0407] The policy controller 54 can then compare the flow metadata with the current network policy to determine whether any packet flow violates the network policy (1410). The packet flow may violate the network policy for various reasons: the virtual router may be misconfigured, there may be vulnerabilities in the component code of the SND architecture, the bottom layer may be misconfigured, etc. The following situation is called a configuration violation: there is a packet flow that violates the network policy that denies the packet flow, or there is a lack of the packet flow that allows the packet flow. For example, a network policy implemented as a firewall policy in the virtual router 21 can specify a denial of app→database, that is, traffic is not allowed from the application layer of the application to the database layer. In this example, the workload is marked with layer information, and the virtual router applies a policy to enforce the firewall policy. If the flow metadata indicates that the packet flow is from a workload marked with an app tag to a workload marked with a database tag, then because it violates the network policy, this is a configuration violation.
[0408] If the policy controller 54 does not detect a configuration violation (No branch in 1412), the operation ends. If the policy controller detects a configuration violation (Yes branch in 1412), the policy controller 54 may output an indication of the configuration violation to the user input device display. The indication may include a mark of flow metadata about the packet flow that violates the network policy and a mark of the missing packet flow. The inconsistent indication may also indicate the network policy in the network policy that was violated. The user can view the indication of the configuration violation, which can help the user identify the underlying problem. Therefore, the user can take remedial measures (1418).
[0409] The remediation may include the user resolving the misconfiguration of the underlying network, which may be a misconfigured cable, a misconfigured network switch, or other problem. The remediation may include modifying the code of one or more components in the SDN architecture 200, such as a component of the network controller 24 (e.g., a configuration node 230 or a control node 232) or a virtual router component. The code or modified compiled component may be submitted to the configuration repository 50. Thus, the deployment system 52 detects the changes and deploys the updated software to the computing infrastructure 8 according to the principle of continuous deployment.
[0410] The policy controller 54 may periodically run the pattern of operations 1400 to verify the configuration of the SDN architecture 200. If the remedial action in step 1418 is successful, then the configuration violation is no longer detected in the next run of operations 1400 (no branch in 1412), and the operation may end (1414) until it is performed again.
[0411] The techniques described herein may be implemented in hardware, software, firmware, or any combination thereof. The various features described as modules, units, or components may be implemented together in an integrated logic device, or individually as discrete, but interoperable, logic devices or other hardware devices. In some cases, the various features of the electronic circuitry may be implemented as one or more integrated circuit devices, such as an integrated circuit chip or chipset.
[0412] If implemented in hardware, the present disclosure may be directed to an apparatus such as a processor or an integrated circuit device such as an integrated circuit chip or chipset. Alternatively or in addition, if implemented in software or firmware, the technology may be implemented at least in part by a computer-readable data storage medium that includes instructions that, when executed, cause a processor to perform one or more of the methods described above. For example, a computer-readable data storage medium may store the instructions that are executed by a processor.
[0413] The computer-readable medium may constitute part of a computer program product including packaging materials. The computer-readable medium may include computer data storage media such as random access memory (RAM), read-only memory (ROM), non-volatile random access memory (NVRAM), electrically erasable programmable read-only memory (EEPROM), flash memory, magnetic or optical data storage media, etc. In some examples, an article of manufacture may include one or more computer-readable storage media.
[0414] In some examples, computer-readable storage media may include non-volatile media. The term "non-volatile" may indicate that the storage medium is not incorporated into a carrier wave or propagating signal. In a specific example, a non-volatile storage medium may store data that changes over time (e.g., stored in RAM or cache).
[0415] The code or instructions may be software and / or firmware executed by a processing circuit including one or more processors, such as one or more digital signal processors (DSPs), general-purpose microprocessors, application-specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or other equivalent integrated or discrete logic circuits. Accordingly, as used herein, the term "processor" may refer to any of the above structures or any other structure suitable for implementing the techniques described herein. In addition, in some aspects, the functions described in the present disclosure may be provided within a software module or a hardware module.
Claims
1. A network policy controller, the policy controller comprising a processing circuit and configured to: Obtaining, from a first software defined network (SDN) infrastructure system, flow metadata regarding packet flows exchanged between workloads of a distributed application deployed to the first SDN infrastructure system; identifying a source endpoint workload and a destination endpoint workload of a packet flow using flow metadata about a packet flow in the packet flows; generating a network policy rule that allows packet flow from the source endpoint workload to the destination endpoint workload of the packet flow; and When deploying the distributed application to a second SDN architecture system, adding the network policy rule as configuration data of the second SDN architecture system to a configuration repository, so that a deployment system configures the second SDN architecture system to have the network policy rule that allows packet flow from the source endpoint workload to the destination endpoint workload; In order to add the network policy rule to the configuration repository, the policy controller is configured to add a new branch to the configuration repository storing a configuration data set of the second SDN architecture system, wherein the configuration data set includes the network policy rule.
2. The policy controller according to claim 1, wherein: The first SDN architecture system is the second SDN architecture system.
3. The policy controller according to claim 1, wherein: The configuration repository stores the workload regarding the distributed application.
4. The policy controller according to claim 1, wherein: The policy controller is configured to: Configuring the first SDN architecture system to turn on monitoring to disable all firewall policies applied to the workload of the distributed application; Wherein, when the monitoring is turned on, the flow metadata is flow metadata about the packet flow exchanged between the workloads of the distributed application.
5. The policy controller according to claim 4, wherein: The policy controller is configured to: The first SDN architecture system is configured to disable the monitoring to enable all firewall policies applied to the workload of the distributed application.
6. The policy controller according to claim 4, wherein: The policy controller is configured to: Only the firewall policy applied to the workload of the distributed application is disabled.
7. A policy controller according to any one of claims 1 to 6, in, The policy controller is configured to receive from a user an indication of approval of the network policy rule by the user; and The policy controller is configured to add the network policy rule to the configuration repository in response to the user's approval indication of the network policy rule.
8. The policy controller according to any one of claims 1 to 6, wherein: The policy controller is configured to: Test parameters are received from a user, the test parameters constraining the flow metadata to packet flows matching the test parameters.
9. The policy controller according to claim 8, wherein: The test parameters include an application identifier, a time range, a role, a site, or an application layer.
10. The policy controller according to any one of claims 1 to 6, wherein: The second SDN architecture system includes a network controller, which includes a configuration node for configuring the second SDN architecture system. The network controller is implemented by a cluster including computing nodes of the second SDN architecture system.
Citation Information
Patent Citations
Scalable policy management for virtual networks
US10742690B2
Containerized router with virtual networking
US12160811B2
Intent-based policy generation for virtual networks
US20200106744A1
Tunneled packet aggregation for virtual networks
US9571394B1