启用 IP 交换矩阵转发和交换矩阵源 NAT
云原生 Contrail 网络支持 IP 交换矩阵转发和交换矩阵源 NAT。IP 交换矩阵转发为在叠加网络中运行的群集提供了通过外部虚拟网络访问底层网络的路径。交换矩阵源 NAT 使交换矩阵中的网关设备能够将退出交换矩阵的数据平面节点流量的源 IP 地址转换为公共端 IP 地址。
您可以在云网络环境中使用 IP 交换矩阵转发和交换矩阵源 NAT 来提供对底层网络的访问。IP 交换矩阵转发和交换矩阵源 NAT 提供的底层网络访问使 Pod 内的资源能够直接访问互联网或从底层网络拉取外部工件。提供这种底层网络访问时,不会像其他底层网络选项(例如复杂的 BGP 拓扑或防火墙设置)那样增加显著的网络复杂性。
概述:IP 交换矩阵转发
从版本 22.1 开始,云原生 Contrail 网络支持 IP 交换矩阵转发。
在有权访问外部网络的虚拟网络中启用 IP 交换矩阵转发。这些虚拟网络需要直接访问底层网络。
默认情况下,有权访问外部网络的虚拟网络被命名为 。 default-externalnetwork 如果愿意,可以创建自定义的用户定义的外部网络名称。启用 IP 交换矩阵转发后,底层网络的路径可通过此外部虚拟网络直接提供给在叠加网络中运行的群集。叠加网络和底层网络之间的这种直接连接使叠加网络中的主机能够访问底层网络。由于 IP 交换矩阵转发使虚拟网络能够同时跨越叠加网络和底层网络,因此不会对遍历这两个网络的数据包进行封装和解封装。因此,数据包处理效率更高。
IP 交换矩阵转发对于负载平衡网络流量也非常有用。对外部网络流量进行负载均衡时,负载均衡器服务会自动检测已启用 IP 交换矩阵转发的任何外部虚拟网络。
概述:结构源 NAT
从版本 22.1 开始,云原生 Contrail 网络支持结构源 NAT。结构源 NAT 提供了一种方法,让来自 Kubernetes 环境中数据平面节点的流量直接访问互联网,而无需遍历单独的 NAT 防火墙。您还可以在需要时使用源 NAT 将外部项目拉取到 Pod 中。
来自发往互联网的数据平面节点的流量必须遍历网关设备。此网关设备是交换矩阵中的成员设备,也至少有一个接口连接到公共网络。启用结构源 NAT 后,网关设备会将来自数据平面节点的始发数据包的源 IP 地址转换为其自己的公共端 IP 地址。此地址转换允许来自数据平面节点的流量访问互联网。
源 NAT 执行的 IP 地址转换也会更新数据包中的源端口。多个数据平面节点可以使用结构源 NAT 通过单个网关公共 IP 地址到达公共网络。
您需要结构源 NAT 将退出交换矩阵的流量的 IP 地址转换为互联网。您没有使用 NAT 通过此功能转换传入的互联网流量。
示例:配置结构源 NAT
默认情况下,在用户创建的虚拟网络中禁用结构源 NAT。
通过将对象中的VirtualNetwork变量设置为 fabricSNAT: true,可以在任何单个虚拟网络中手动启用结构源 NAT。您可以通过将此值设置为 false 来禁用结构源 NAT。
以下示例显示了已启用结构源 NAT 的虚拟网络对象。此示例假定在单独的 YAML 文件中配置了名为 virtual-network-subnet1 的子网对象。
apiVersion: core.contrail.juniper.net/v2 kind: VirtualNetwork metadata: name: virtualnetwork1 namespace: namespace1 labels: vn: virtualnetwork1 annotations: core.juniper.net/display-name: virtualnetwork1 core.juniper.net/description: Virtual Network 1 is a collection of end points that can communicate with each other. spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v2 kind: Subnet namespace: namespace1 name: virtual-network-subnet1 fabricSNAT: true
还可以将环境配置为在创建虚拟网络时在任何用户创建的虚拟网络中启用结构源 NAT。如果要在创建时在任何用户创建的虚拟网络中启用结构源 NAT,请在最初部署环境时将资源中的ApiServer变量设置为 enableSNAT true。
在初始部署期间,必须在资源中 ApiServer 设置此配置。应用部署 YAML 文件后,无法在环境中更改此设置。如果要在初始部署后更改单个虚拟网络的交换矩阵源 NAT 设置,则必须手动更改该虚拟网络的配置。
以下是具有代表性的 YAML 文件配置:
kind: ApiServer metadata: ... spec: enableSNAT: true common: containers: ...
当变量为 true 时,enableSNAT会在创建时在用户创建的任何虚拟网络中启用结构源 NAT。创建用户创建的虚拟网络时,可以通过将变量设置为 enableSNAT false 来禁用结构源 NAT。默认情况下,结构源 NAT 处于禁用状态。
结构源 NAT 会自动选择要转换的 IP 地址。在大多数云原生 Contrail 网络用例中,您无需为结构源 NAT 配置地址池。但是,可以使用资源中的GlobalVrouterConfig层次结构来portTranslationPools:配置地址池。
示例:使用 IP 交换矩阵转发配置外部网络
默认情况下,IP 交换矩阵转发处于禁用状态。
可以通过将 fabricForwarding: 变量设置为 true 来在任何虚拟网络中启用 IP 交换矩阵转发。
以下示例说明如何在通过 IPv4 网关访问互联网的外部虚拟网络中启用 IP 交换矩阵转发:
apiVersion: core.contrail.juniper.net/v2 kind: VirtualNetwork metadata: namespace: contrail name: external-vn labels: service.contrail.juniper.net/externalNetworkSelector: default-external annotations: core.juniper.net/display-name: Sample Virtual Network core.juniper.net/description: VirtualNetwork is a collection of end points (interface or ip(s) or MAC(s)) that can communicate with each other by default. It is a collection of subnets whose default gateways are connected by an implicit router. spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v2 kind: Subnet namespace: contrail name: external-subnet fabricForwarding: true
还可以在创建具有互联网路径的外部虚拟网络时启用 IP 交换矩阵转发。
在使用 CN2 的环境中,通过资源配置 Kubemanager 虚拟网络到外部网络的路径。
通过将虚拟网络连接到 IPv4 或 IPv6 网关 IP 子网地址,可以为虚拟网络启用外部访问。使用相同的资源为虚拟网络 Kubemanager 中的外部流量启用 IP 交换矩阵转发。
您必须在初始云原生 Contrail 部署期间配置外部网络子网和此 IP 交换矩阵转发设置。应用初始部署 YAML 文件后,无法配置这些参数。
以下示例显示了一个 YAML 文件,该文件用于配置 Kubemanager 创建具有外部网络访问权限的虚拟网络的资源。此示例中的虚拟网络使用 IP 交换矩阵转发运行。您必须在初始部署期间提交此 YAML 文件。
kind: Kubemanager metadata: ... spec: externalNetworkV4Subnet: # Fill V4 Subnet of an external network if any externalNetworkV6Subnet: # Fill V6 Subnet of an external network if any ipFabricFowardingExtSvc: true common: containers: ...
使用此 YAML 文件中的 or externalNetworkV6Subnet: 变量指定externalNetworkV4Subnet外部网络的 IPv4 子网或 IPv6 子网。子网地址是可通过网关设备从互联网访问的公共端 IP 地址。使用此 YAML 文件配置 Kubemanager 资源时,会创建一个连接到指定外部网络的新虚拟网络。此虚拟网络在 CN2 的默认命名空间中命名default-externalnetwork。
当变量为 true 时ipFabricFowardingExtSvc,IP 交换矩阵转发在具有外部网络访问权限的虚拟网络中运行。您可以通过将ipFabricFowardingExtSvc变量设置为 false 来禁用外部子网的 IP 交换矩阵转发。