9.4. 关于为 OpenShift Container Platform 集群重复使用 VNet
在 OpenShift Container Platform 4.14 中,您可以在 Microsoft Azure 中将集群部署到现有的 Azure Virtual Network(VNet)中。如果您这样做,还必须在 VNet 和路由规则中使用现有子网。
通过将 OpenShift Container Platform 部署到现有的 Azure VNet 中,您可以避免新帐户中的服务限制,或者更容易地利用公司所设置的操作限制。如果您无法获得创建 VNet 所需的基础架构创建权限,则可以使用这个选项。
9.4.1. 使用 VNet 的要求 复制链接链接已复制到粘贴板!
当使用现有 VNet 部署集群时,必须在安装集群前执行额外的网络配置。在安装程序置备的基础架构集群中,安装程序通常会创建以下组件,但在安装到现有 VNet 时不会创建它们:
- 子网
- 路由表
- VNets
- 网络安全组
安装程序要求您使用由云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,并导致安装失败。
如果使用自定义 VNet,您必须正确配置它及其子网,供安装程序和集群使用。安装程序不能为集群分配要使用的网络范围,为子网设置路由表,或者设置类似 DHCP 的 VNet 选项,因此您必须在安装集群前这样做。
集群必须能够访问包含现有 VNet 和子网的资源组。虽然集群创建的所有资源都放在它创建的单独资源组中,但有些网络资源则从单独的组中使用。有些集群 Operator 必须能够访问这两个资源组中的资源。例如,Machine API 控制器会为它创建的虚拟机附加 NICS,以便从网络资源组中进行子网。
您的 VNet 必须满足以下特征:
-
VNet 的 CIDR 块必须包含
Networking.MachineCIDR
范围,它是集群机器的 IP 地址池。 - VNet 及其子网必须属于同一资源组,子网必须配置为使用 Azure 分配的 DHCP IP 地址,而不是静态 IP 地址。
您必须在 VNet 中提供两个子网,一个用于 control plane 机器,一个用于计算机器。因为 Azure 在您指定的区域内的不同可用区中分发机器,所以集群将默认具有高可用性。
默认情况下,如果您在 install-config.yaml
文件中指定可用区,安装程序会在一个区(region)内的这些可用区间分发 control plane 机器和计算机器。要确保集群的高可用性,请选择至少含有三个可用区的区域。如果您的区域包含的可用区少于三个,安装程序将在可用区中放置多台 control plane 机器。
为确保您提供的子网适合,安装程序会确认以下数据:
- 所有指定的子网都存在。
- 有两个专用子网,一个用于 control plane 机器,一个用于计算机器。
- 子网 CIDR 属于您指定的机器 CIDR。机器不会在您不为其提供私有子网的可用区中置备。如果需要,安装程序会创建管理 control plane 和 worker 节点的公共负载均衡器,Azure 会为其分配一个公共 IP 地址。
如果您销毁了使用现有 VNet 的集群,则不会删除 VNet。
9.4.1.1. 网络安全组要求 复制链接链接已复制到粘贴板!
托管 compute 和 control plane 机器的子网的网络安全组需要特定的访问权限,以确保集群通信正确。您必须创建规则以允许访问所需的集群通信端口。
在安装集群前,必须先设置网络安全组规则。如果您试图在没有所需访问权限的情况下安装集群,安装程序无法访问 Azure API,安装会失败。
port | 描述 | Control plane(控制平面) | Compute |
---|---|---|---|
| 允许 HTTP 流量 | x | |
| 允许 HTTPS 流量 | x | |
| 允许与 control plane 机器通信 | x | |
| 允许内部与机器配置服务器通信以用于置备机器 | x |
- 如果您使用 Azure Firewall 来限制互联网访问,您可以将 Azure Firewall 配置为允许 Azure API。不需要网络安全组规则。
目前,不支持阻止或限制机器配置服务器端点。机器配置服务器必须公开给网络,以便新置备的机器没有现有配置或状态,才能获取其配置。在这个模型中,信任的根是证书签名请求 (CSR) 端点,即 kubelet 发送其证书签名请求以批准加入集群。因此,机器配置不应用于分发敏感信息,如 secret 和证书。
为确保机器配置服务器端点,端口 22623 和 22624 在裸机场景中是安全的,客户必须配置正确的网络策略。
由于集群组件不会修改 Kubernetes 控制器更新的用户提供的网络安全组,因此为 Kubernetes 控制器在不影响其余环境的情况下创建一个伪网络安全组。
协议 | port | 描述 |
---|---|---|
ICMP | N/A | 网络可访问性测试 |
TCP |
| 指标 |
|
主机级别的服务,包括端口 9 | |
| Kubernetes 保留的默认端口 | |
UDP |
| VXLAN |
| Geneve | |
|
主机级别的服务,包括端口 | |
| IPsec IKE 数据包 | |
| IPsec NAT-T 数据包 | |
|
UDP 端口 | |
TCP/UDP |
| Kubernetes 节点端口 |
ESP | N/A | IPsec Encapsulating Security Payload(ESP) |
协议 | port | 描述 |
---|---|---|
TCP |
| etcd 服务器和对等端口 |
9.4.2. 权限划分 复制链接链接已复制到粘贴板!
从 OpenShift Container Platform 4.3 开始,您不需要安装程序置备的基础架构集群部署所需的所有权限。这与您所在机构可能拥有的权限划分类似:一些个人可以在您的云中创建不同的资源。例如,您可以创建特定于应用程序的对象,如实例、存储和负载均衡器,但不能创建与网络相关的组件,如 VNets、子网或入站规则。
您在创建集群时使用的 Azure 凭证不需要 VNets 和核心网络组件(如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要获取集群中的机器需要的应用程序资源的权限,如负载均衡器、安全组、存储帐户和节点。
9.4.3. 集群间隔离 复制链接链接已复制到粘贴板!
因为集群无法修改现有子网中的网络安全组,所以无法在 VNet 中相互隔离集群。