你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 运营商关系(简称运营商关系)实例包括安装在客户本地的计算和网络硬件。 由多层物理和虚拟设备向此计算硬件上运行的工作负载提供网络连接和路由服务。 本文档详细介绍其中每个网络层。
拓扑
文中将描述运营商关系实例中硬件的拓扑。
客户拥有并管理提供商边缘 (PE) 路由器。 这些路由器代表客户的主干网络的边缘。
运营商关系负责管理客户边缘 (CE) 路由器。 这些路由器是运营商关系实例的一部分,包含在近边缘硬件物料清单 (BOM) 中。 每个多机架运营商关系实例中有两个 CE 路由器。 每个 CE 路由器都有一个指向每个 PE 路由器的上行链路。 CE 路由器是唯一物理连接到客户网络的运营商关系设备。
多机架 Azure 运营商关系实例中的每个计算服务器都有两个架顶 (TOR) 交换机。 每个 TOR 都有一个指向每个 CE 路由器的上行链接。 每个 TOR 都连接到机架中每个裸机计算服务器,并配置为简单的第 2 层交换机。
裸机
在此计算基础结构上运行的租户工作负载通常是虚拟或容器化网络功能。 虚拟网络功能 (VNF) 在计算服务器硬件上作为虚拟机 (VM) 运行。 容器化网络功能 (CNF) 在容器内运行。 这些容器在计算服务器硬件上运行的 VM 上运行。
提供最终用户数据平面服务的网络功能需要使用提供高级功能和高 I/O 速率的高性能网络接口。
在近边缘多机架运营商关系实例中,每个裸机计算服务器都是具有非一致性内存访问 (NUMA) 体系结构的双套接字计算机。
近边缘多机架 Azure 运营商关系实例中的裸机计算服务器针对每个 NUMA 单元包含了一个双端口网络接口卡 (pNIC)。 这些 pNIC 支持单根 I/O 虚拟化 (SR-IOV) 和其他高性能功能。 一个 NUMA 单元在内存和 CPU 方面与一个 pNIC 一致。
分配给租户工作负载的所有网络接口都是主机直通设备,并使用从 pNIC 分配的 SR-IOV 虚拟功能 (VF),该 pNIC 与容纳工作负载 VM 的 CPU 和内存资源的 NUMA 单元具有一致性。 这种安排可确保分配有前述 VF 的 VM 和容器内的网络堆栈保持最优性能。
计算机机架部署时配备一对架顶 (TOR) 交换机。 每个裸机计算服务器上的每个 pNIC 都连接到这两个 TOR。 多机箱链接聚合组 (MLAG) 提供高可用性,链接聚合控制协议 (LACP) 为链接提供更高的聚合吞吐量。
每个裸机计算服务器都有一个存储网络接口,该接口由一个绑定提供,后者聚合了两个连接到两个 pNIC 的“主机-本地”虚拟功能 (VF)(而不是 VM-本地 VF)。 这两个 VF 聚合在一个主动备份绑定中,以确保其中任一个 pNIC 发生故障时网络连接仍有效。
逻辑网络资源
与运营商关系网络云 API 和托管网络构造 API 交互时,用户将创建和修改一组逻辑资源。
托管网络结构 API 中的逻辑资源对应基础网络硬件(TOR 和 CE)上的网络和访问控制配置。 需要注意的是,ManagedNetworkFabric.L2IsolationDomain
和 ManagedNetworkFabric.L3IsolationDomain
资源包含低级别交换机和网络配置。
ManagedNetworkFabric.L2IsolationDomain
表示虚拟局域网标识符 (VLAN)。
ManagedNetworkFabric.L3IsolationDomain
表示 CE 路由器上的虚拟路由和转发配置 (VRF)。
阅读了解隔离域的概念。
网络云 API 中的逻辑资源对应计算基础结构。 有用于物理机架和裸机硬件的资源。 同样,还有用于该硬件上运行的 Kubernetes 群集和虚拟机以及连接它们的逻辑网络的资源。
NetworkCloud.L2Network
、NetworkCloud.L3Network
和 NetworkCloud.TrunkedNetwork
都表示工作负载网络,也即这些网络上的流量用于租户工作负载。
NetworkCloud.L2Network
表示第 2 层网络,主要包含指向 ManagedNetworkFabric.L2IsolationDomain
的链接。 此 L2IsolationDomain 包含 VLAN 标识符和最大传输单元 (MTU) 设置。
NetworkCloud.L3Network
表示第 3 层网络,包含 VLAN 标识符、网络上终结点的 IP 地址分配信息以及指向 ManagedNetworkFabric.L3IsolationDomain
的链接。
注意
为何 NetworkCloud.L3Network
资源包含 VLAN 标识符?
VLAN 不是一个第 2 层概念吗?
它们确实是! 这是因为 NetworkCloud.L3Network
必须要能够引用特定的 ManagedNetworkFabric.InternalNetwork
。
ManagedNetworkFabric.InternalNetwork
是在特定的 ManagedNetworkFabric.L3IsolationDomain
中创建的,并被授予 VLAN 标识符。
因此,为了引用特定的 ManagedNetworkFabric.InternalNetwork
,NetworkCloud.L3Network
必须同时包含 L3IsolationDomain 标识符和 VLAN 标识符。
网络云 API 中的逻辑网络资源,例如托管网络构造 API 中的 NetworkCloud.L3Network
参考逻辑资源,可提供物理计算基础结构和物理网络基础结构之间的逻辑连接。
创建运营商关系虚拟机时,可以在运营商关系虚拟机 NetworkAttachments
中指定零个或多个 L2、L3 和中继网络。 创建运营商关系 Kubernetes 群集时,可以在运营商关系 Kubernetes 群集 NetworkConfiguration.AttachedNetworkConfiguration
字段中指定零个或多个 L2、L3 和中继网络。
AgentPools 是运营商关系 Kubernetes 群集中相似的 Kubernetes 工作器节点的集合。 可以在 AgentPool 的 AttachedNetworkConfiguration
字段中配置每个代理池的附加的 L2、L3 和中继网络。
可以在独立的运营商关系虚拟机和运营商关系 Kubernetes 群集之间共享网络。 通过这种可组合性,可实现将 CNF 和 VNF 组合在一起,在同一逻辑网络中协同工作。
此图显示了一个包含两个代理池的运营商关系 Kubernetes 群集和一个独立的运营商关系虚拟机,二者连接到不同的工作负载网络。 代理池“AP1”没有额外的网络配置,因此继承了 KubernetesCluster 的网络信息。 另外注意,所有 Kubernetes 节点和所有独立的运营商关系虚拟机都配置为连接到同一云服务网络。 最后,代理池“AP2”和独立的 VM 配置为连接到“共享 L3 网络”。
CloudServicesNetwork
运营商关系虚拟机和运营商关系 Kubernetes 群集始终引用“云服务网络”(CSN)。 CSN 是一个专用网络,用于本地工作负载与一组外部或 Azure 托管的终结点之间的流量。
CloudServicesNetwork 上的流量通过代理进行路由,其中的出口流量通过允许列表进行控制。 用户可以使用网络云 API 优化此允许列表。
CNI 网络
创建运营商关系 Kubernetes 群集时,要在 NetworkConfiguration.CniNetworkId
字段中提供 NetworkCloud.L3Network
的资源标识符。
此“CNI 网络”有时称为“DefaultCNI 网络”,用于指定为运营商关系 Kubernetes 群集中的 Kubernetes 节点提供 IP 地址的第 3 层网络。
此图显示了一些网络云、托管网络构造和 Kubernetes 逻辑资源之间的关系。 在该关系图中,NetworkCloud.L3Network
是网络云 API 中表示第 3 层网络的逻辑资源。
NetworkCloud.KubernetesCluster
资源有一个字段 networkConfiguration.cniNetworkId
,包含对 NetworkCloud.L3Network
资源的引用。
NetworkCloud.L3Network
资源通过其 l3IsolationDomainId
和 vlanId
字段与单个 ManagedNetworkFabric.InternalNetwork
资源关联。
ManagedNetworkFabric.L3IsolationDomain
资源包含一个或多个 ManagedNetworkFabric.InternalNetwork
资源,由 vlanId
进行键控。 当用户创建 NetworkCloud.KubernetesCluster
资源时,会创建一个或多个 NetworkCloud.AgentPool
资源。
其中每个 NetworkCloud.AgentPool
资源都包含一个或多个虚拟机。 一个 Kubernetes Node
资源表示其中每个虚拟机。 这些 Kubernetes Node
资源必须获取 IP 地址,虚拟机上的容器网络接口 (CNI) 插件从与 NetworkCloud.L3Network
关联的 IP 地址池中获取 IP 地址。
NetworkCloud.KubernetesCluster
资源通过其 cniNetworkId
字段引用 NetworkCloud.L3Network
。 这些节点级 IP 地址的路由和访问规则包含在 ManagedNetworkFabric.L3IsolationDomain
中。
NetworkCloud.L3Network
通过其 l3IsoldationDomainId
字段引用 ManagedNetworkFabric.L3IsolationDomain
。
运营商关系 Kubernetes 网络
Kubernetes 中有三个逻辑网络层:
- 节点网络层
- Pod 网络层
- 服务网络层
节点网络层提供 Kubernetes 控制平面与 kubelet 工作器节点代理之间的连接。
Pod 网络层提供在运营商关系 Kubernetes 群集中运行的容器 (Pod) 之间的连接,以及 Pod 与一个或多个租户定义的网络之间的连接。
服务网络层为相关 Pod 集提供负载均衡和入口功能。
节点网络
运营商关系 Kubernetes 群集包含虚拟机 (VM) 上运行的一个或多个容器化网络功能 (CNF)。 Kubernetes 节点表示单个 VM。 Kubernetes 节点可以是控制平面节点,也可以是工作器节点。 控制平面节点包含 Kubernetes 群集的管理组件。 工作器节点容纳租户工作负载。
Kubernetes 工作器节点组称为代理池。 代理池是运营商关系构造,而不是 Kubernetes 构造。
运营商关系实例中的每个裸机计算服务器都有一个附属于裸机服务器上单个 NUMA 单元的 switchdev。 Switchdev 包含一组 SR-IOV VF 表示器端口,这些端口提供与一组用于容纳不同网络的路由表的桥设备的连接。
除了 defaultcni
接口,运营商关系在每个节点上建立 cloudservices
网络接口。
cloudservices
网络接口负责路由发往外部(到客户本地)终结点的流量。
cloudservices
网络接口对应用户在创建运营商关系 Kubernetes 群集之前定义的 NetworkCloud.CloudServicesNetwork
API 资源。 分配给 cloudservices
网络接口的 IP 地址是链接-本地地址,可确保外部网络流量始终遍历此特定接口。
除了 defaultcni
和 cloudservices
网络接口之外,运营商关系还在每个与“与运营商关系 Kubernetes 群集或 AgentPool 的 NetworkCloud.L2Network
、NetworkCloud.L3Network
和 NetworkCloud.TrunkedNetwork
关联”相对应的每个 Kubernetes 节点上创建一个或多个网络接口。
只有代理池 VM 具有这些额外的网络接口。 控制平面 VM 只有 defaultcni
和 cloudservices
网络接口。
节点 IP 地址管理 (IPAM)
代理池中的节点从与 NetworkCloud.KubernetesCluster
资源 networkConfiguration.cniNetworkId
字段中引用的 NetworkCloud.L3Network
资源关联的 IP 地址池接收 IP 地址。 此 defaultcni
网络是在该节点上运行的所有 Pod 的默认网关,充当运营商关系 Kubernetes 群集中东西向 Pod 到 Pod 通信的默认网络。
Pod 网络
Kubernetes Pod 是 Linux 命名空间中运行的一个或多个容器映像的集合。 此 Linux 命名空间将容器的进程和资源与主机上的其他容器和资源隔离开来。 对于运营商关系 Kubernetes 群集,此“主机”是表示为 Kubernetes 工作器节点的 VM。
在创建运营商关系 Kubernetes 群集之前,用户先创建一组资源,这些资源表示从中为租户工作负载分配地址的虚拟网络。 然后,在创建运营商关系 Kubernetes 群集时,在 cniNetworkId
、cloudServicesNetworkId
、agentPoolL2Networks
、agentPoolL3Networks
和 agentPoolTrunkedNetworks
字段中引用这些虚拟网络。
Pod 可以在运营商关系实例中的任何机架中的任何计算服务器上运行。 默认情况下,运营商关系 Kubernetes 群集中的所有 Pod 都可以通过 Pod 网络相互通信。 由每个运营商关系 Kubernetes 工作器节点中安装的多个容器网络接口 (CNI) 插件来管理 Pod 网络。
额外网络
在运营商关系 Kubernetes 群集中创建 Pod 时,可以通过指定k8s.v1.cni.cnf.io/networks
批注来声明 Pod 应附加到的任何额外网络。 批注的值是以逗号分隔的网络名称的列表。 这些网络名称对应于与运营商关系 Kubernetes 群集或代理池关联的任何中继、L3 或 L2 网络的名称。
运营商关系使用 NetworkAttachmentDefinition (NAD) 文件配置代理池 VM,这些文件包含单个额外网络的网络配置。
对于 Pod 关联网络中列出的每个中继网络,Pod 获取单个网络接口。 工作负载负责通过此接口发送标记的原始流量,或构建基于网络接口的标记的接口。
对于 Pod 关联网络中列出的每个 L2 网络,Pod 获取单个网络接口。 工作负载负责自己的静态 MAC 寻址。
Pod IP 地址管理
创建运营商关系 Kubernetes 群集时,要在 podCidrs
字段中为 Pod 网络指定 IP 地址范围。 启动 Pod 时,CNI 插件会在 Pod 中建立 eth0@ifXX
接口,并从该 podCidrs
字段中的一系列 IP 地址中分配一个 IP 地址。
对于 L3 网络,如果网络配置为使用运营商关系 IPAM,则与 L3 网络关联的 Pod 网络接口将接收为该网络配置的 IP 地址范围 (CIDR) 内的 IP 地址。 如果未将 L3 网络配置为使用运营商关系 IPAM,则工作负载负责将 IP 地址静态分配给 Pod 的网络接口。
路由
在每个 Pod 中,eth0
接口的流量会遍历一个虚拟以太网设备 (veth),该设备连接到主机上的 switchdev,该主机 (VM) 上承载着 defaultcni
、cloudservices
和其他节点级接口。
Pod 中的 eth0
接口具有一个简单的路由表,它有效地将工作器节点 VM 的路由表用于以下任何流量。
- Pod 到 Pod 流量:发往
podCidrs
地址范围内 IP 的流量会流向主机 VM 上的 switchdev,并流经节点级defaultcni
接口,并被路由到相应的目标代理池 VM 的 IP 地址。 - L3 OSDevice 网络流量:发往使用
OSDevice
插件类型的关联 L3 网络中 IP 的流量会流向主机 VM 上的 switchdev,并流经与该 L3 网络关联的节点级接口。 - 所有其他流量将传递到 Pod 中的默认网关,并路由到节点级
cloudservices
接口。 之后,与运营商关系 Kubernetes 群集关联的 CloudServicesNetwork 上配置的出口规则会确定应如何路由流量。
Pod 中的其他网络接口将使用 Pod 的路由表将流量路由到使用 SRIOV
和 DPDK
插件类型的其他 L3 网络。