×

关于重用 VNet 用于 OpenShift Container Platform 集群

在 OpenShift Container Platform 4.17 中,您可以将集群部署到 Microsoft Azure 中现有的 Azure 虚拟网络 (VNet)。如果这样做,您还必须使用 VNet 中现有的子网和路由规则。

通过将 OpenShift Container Platform 部署到现有的 Azure VNet,您也许能够避免新帐户中的服务限制约束,或者更容易遵守公司指南设定的操作约束。如果您无法获得创建 VNet 所需的架构创建权限,这是一个不错的选择。

使用 VNet 的要求

当您使用现有 VNet 部署集群时,必须在安装集群之前执行其他网络配置。在安装程序预配的架构集群中,安装程序通常会创建以下组件,但当您安装到现有 VNet 时,它不会创建这些组件。

  • 子网

  • 路由表

  • VNet

  • 网络安全组

安装程序要求您使用云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,这会导致安装失败。

如果您使用自定义 VNet,则必须正确配置它及其子网,以便安装程序和集群可以使用。安装程序无法细分集群使用的网络范围、为子网设置路由表或设置 VNet 选项(如 DHCP),因此您必须在安装集群之前执行此操作。

集群必须能够访问包含现有 VNet 和子网的资源组。虽然集群创建的所有资源都放置在其创建的单独资源组中,但某些网络资源是从单独的组中使用的。某些集群运算符必须能够访问这两个资源组中的资源。例如,Machine API 控制器会将其创建的虚拟机的 NIC 附加到网络资源组中的子网。

您的 VNet 必须满足以下特征:

  • VNet 的 CIDR 块必须包含Networking.MachineCIDR范围,这是集群机器的 IP 地址池。

  • VNet 及其子网必须属于同一资源组,并且子网必须配置为使用 Azure 分配的 DHCP IP 地址而不是静态 IP 地址。

您必须在 VNet 中提供两个子网,一个用于控制平面机器,一个用于计算机器。由于 Azure 会在您指定的区域内的不同可用性区域中分配机器,因此您的集群默认情况下将具有高可用性。

默认情况下,如果您在install-config.yaml文件中指定可用性区域,安装程序会在您指定的这些可用性区域区域中分配控制平面机器和计算机器。为确保集群的高可用性,请选择至少具有三个可用性区域的区域。如果您的区域包含少于三个可用性区域,安装程序会将多个控制平面机器放置在可用区域中。

为了确保您提供的子网适用,安装程序会确认以下数据:

  • 所有指定的子网都存在。

  • 有两个专用子网,一个用于控制平面机器,一个用于计算机器。

  • 子网 CIDR 属于您指定的机器 CIDR。不会在您未为其提供专用子网的可用性区域中预配机器。如果需要,安装程序会创建管理控制平面和工作节点的公共负载均衡器,Azure 会向其分配公共 IP 地址。

如果您销毁使用现有 VNet 的集群,则不会删除 VNet。

网络安全组要求

托管计算和控制平面机器的子网的网络安全组需要特定的访问权限才能确保集群通信正确。您必须创建规则以允许访问所需的集群通信端口。

必须在安装集群之前设置网络安全组规则。如果您尝试在没有所需访问权限的情况下安装集群,安装程序将无法访问 Azure API,并且安装将失败。

表 1. 必需端口
端口 描述 控制平面 计算

80

允许 HTTP 流量

x

443

允许 HTTPS 流量

x

6443

允许与控制平面机器通信

x

22623

允许与机器配置服务器进行内部通信,以配置机器

x

  1. 如果您使用 Azure 防火墙来限制互联网访问,则可以配置 Azure 防火墙以允许 Azure API。不需要网络安全组规则。有关更多信息,请参阅“附加资源”中的“配置防火墙”。

目前,没有支持的方法来阻止或限制机器配置服务器端点。机器配置服务器必须暴露于网络,以便新配置的机器(没有现有配置或状态)能够获取其配置。在此模型中,信任的根是证书签名请求 (CSR) 端点,kubelet 在此处发送其证书签名请求以获得批准加入集群。因此,机器配置不应用于分发敏感信息,例如密钥和证书。

为了确保在裸机场景中机器配置服务器端点(端口 22623 和 22624)的安全,客户必须配置正确的网络策略。

由于集群组件不会修改用户提供的网络安全组(Kubernetes 控制器会更新这些安全组),因此会为 Kubernetes 控制器创建一个伪网络安全组,以便在不影响其余环境的情况下进行修改。

表 2. 所有机器到所有机器通信使用的端口
协议 端口 描述

ICMP

N/A

网络连通性测试

TCP

1936

指标

9000-9999

主机级服务,包括端口9100-9101上的节点导出器和端口9099上的集群版本操作器。

10250-10259

Kubernetes 保留的默认端口

UDP

4789

VXLAN

6081

Geneve

9000-9999

主机级服务,包括端口9100-9101上的节点导出器。

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

123

UDP 端口123上的网络时间协议 (NTP)

如果配置外部 NTP 时间服务器,则必须打开 UDP 端口123

TCP/UDP

30000-32767

Kubernetes 节点端口

ESP

N/A

IPsec 封装安全负载 (ESP)

表 3. 控制平面机器到控制平面机器通信使用的端口
协议 端口 描述

TCP

2379-2380

etcd 服务器和对等端口

权限划分

从 OpenShift Container Platform 4.3 开始,您不需要安装程序配置的基础架构集群部署集群所需的所有权限。此更改模拟您公司可能拥有的权限划分:某些个人可以在您的云中创建不同于其他人的资源。例如,您可能能够创建特定于应用程序的项目,例如实例、存储和负载均衡器,但不能创建与网络相关的组件,例如 VNet、子网或入口规则。

创建集群时使用的 Azure 凭据不需要在 VNet 中创建 VNet 和核心网络组件(例如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要权限来创建集群内机器所需的应用程序资源,例如负载均衡器、安全组、存储帐户和节点。

集群之间的隔离

由于集群无法修改现有子网中的网络安全组,因此无法在 VNet 上相互隔离集群。

创建安装配置文件

您可以自定义在 Microsoft Azure 上安装的 OpenShift Container Platform 集群。

先决条件
  • 您拥有 OpenShift Container Platform 安装程序和集群的拉取密钥。

  • 您拥有 Azure 订阅 ID 和租户 ID。

  • 如果您使用服务主体安装集群,则拥有其应用程序 ID 和密码。

  • 如果您使用系统分配的托管标识安装集群,则已在您将运行安装程序的虚拟机上启用它。

  • 如果您使用用户分配的托管标识安装集群,则已满足以下先决条件

    • 您拥有其客户端 ID。

    • 您已将其分配给您将运行安装程序的虚拟机。

步骤
  1. 可选:如果您之前在此计算机上运行过安装程序,并且想要使用替代服务主体或托管标识,请转到~/.azure/目录并删除osServicePrincipal.json配置文件。

    删除此文件可防止安装程序自动重用先前安装的订阅和身份验证值。

  2. 创建install-config.yaml文件。

    1. 更改到包含安装程序的目录并运行以下命令

      $ ./openshift-install create install-config --dir <installation_directory> (1)
      1 对于<installation_directory>,指定用于存储安装程序创建文件的目录名。

      指定目录时

      • 验证目录是否具有execute权限。此权限是必需的,用于在安装目录下运行 Terraform 二进制文件。

      • 使用空目录。某些安装资源(例如 bootstrap X.509 证书)具有较短的过期时间间隔,因此您必须不要重用安装目录。如果您想重用另一个集群安装中的单个文件,可以将它们复制到您的目录中。但是,安装资源的文件名在不同版本之间可能会发生变化。从较早的 OpenShift Container Platform 版本复制安装文件时,请谨慎操作。

    2. 在提示符下,提供云的配置详细信息

      1. 可选:选择一个 SSH 密钥来访问您的集群机器。

        对于要在其上执行安装调试或灾难恢复的生产 OpenShift Container Platform 集群,请指定您的ssh-agent进程使用的 SSH 密钥。

      2. 选择azure作为目标平台。

        如果安装程序无法从之前的安装中找到osServicePrincipal.json配置文件,则会提示您输入 Azure 订阅和身份验证值。

      3. 输入订阅的以下 Azure 参数值

        • azure subscription id:输入要用于集群的订阅 ID。

        • azure tenant id:输入租户 ID。

      4. 根据您用于部署集群的 Azure 身份,在提示azure service principal client id时执行以下操作之一

        • 如果您使用服务主体,请输入其应用程序 ID。

        • 如果您使用系统分配的托管标识,请将此值留空。

        • 如果您使用用户分配的托管标识,请指定其客户端 ID。

      5. 根据您用于部署集群的 Azure 身份,在提示azure service principal client secret时执行以下操作之一

        • 如果您使用服务主体,请输入其密码。

        • 如果您使用系统分配的托管标识,请将此值留空。

        • 如果您使用的是用户分配的托管标识,请将此值留空。

      6. 选择要将集群部署到的区域。

      7. 选择要将集群部署到的基础域。基础域对应于您为集群创建的 Azure DNS 区域。

      8. 输入集群的描述性名称。

        通过公共端点可用的所有 Azure 资源都受资源名称限制,您无法创建使用某些术语的资源。有关 Azure 限制的术语列表,请参阅 Azure 文档中的解决保留的资源名称错误

  3. 修改install-config.yaml文件。您可以在“安装配置参数”部分找到有关可用参数的更多信息。

  4. 备份install-config.yaml文件,以便您可以使用它安装多个集群。

    install-config.yaml文件在安装过程中被使用。如果您想重用该文件,您现在必须对其进行备份。

如果之前未检测到,安装程序将创建一个osServicePrincipal.json配置文件并将此文件存储在计算机上的~/.azure/目录中。这确保了安装程序在目标平台上创建 OpenShift Container Platform 集群时可以加载配置文件。

集群安装的最低资源要求

每个集群机器必须满足以下最低要求

表 4. 最低资源要求
机器 操作系统 vCPU [1] 虚拟内存 存储 每秒输入/输出 (IOPS)[2]

引导程序

RHCOS

4

16 GB

100 GB

300

控制平面

RHCOS

4

16 GB

100 GB

300

计算

RHCOS、RHEL 8.6 及更高版本 [3]

2

8 GB

100 GB

300

  1. 当未启用同时多线程 (SMT) 或超线程时,一个 vCPU 等于一个物理核心。启用后,请使用以下公式计算相应的比率:(每核线程 × 核心)× 插槽 = vCPU。

  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能敏感,建议使用更快的存储,特别是对于需要 10 毫秒 p99 fsync 时长的控制平面节点上的 etcd。请注意,在许多云平台上,存储大小和 IOPS 成正比,因此您可能需要过度分配存储卷以获得足够的性能。

  3. 与所有用户预配的安装一样,如果您选择在集群中使用 RHEL 计算机器,则您需要负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁以及完成所有其他必需的任务。RHEL 7 计算机的使用已弃用,并在 OpenShift Container Platform 4.10 及更高版本中已被移除。

从 OpenShift Container Platform 4.13 版本开始,RHCOS 基于 RHEL 9.2 版本,这更新了微架构要求。以下列表包含每个架构所需的最低指令集架构 (ISA):

  • x86-64 架构需要 x86-64-v2 ISA

  • ARM64 架构需要 ARMv8.0-A ISA

  • IBM Power 架构需要 Power 9 ISA

  • s390x 架构需要 z14 ISA

更多信息,请参见RHEL 架构

您必须使用将premiumIO参数设置为true的 Azure 虚拟机。

如果您的平台的实例类型满足集群机器的最低要求,则支持在 OpenShift Container Platform 中使用它。

附加资源

Azure 的测试实例类型

以下 Microsoft Azure 实例类型已通过 OpenShift Container Platform 测试。

基于 64 位 x86 架构的机器类型
  • standardBasv2Family

  • standardBSFamily

  • standardBsv2Family

  • standardDADSv5Family

  • standardDASv4Family

  • standardDASv5Family

  • standardDCACCV5Family

  • standardDCADCCV5Family

  • standardDCADSv5Family

  • standardDCASv5Family

  • standardDCSv3Family

  • standardDCSv2Family

  • standardDDCSv3Family

  • standardDDSv4Family

  • standardDDSv5Family

  • standardDLDSv5Family

  • standardDLSv5Family

  • standardDSFamily

  • standardDSv2Family

  • standardDSv2PromoFamily

  • standardDSv3Family

  • standardDSv4Family

  • standardDSv5Family

  • standardEADSv5Family

  • standardEASv4Family

  • standardEASv5Family

  • standardEBDSv5Family

  • standardEBSv5Family

  • standardECACCV5Family

  • standardECADCCV5Family

  • standardECADSv5Family

  • standardECASv5Family

  • standardEDSv4Family

  • standardEDSv5Family

  • standardEIADSv5Family

  • standardEIASv4Family

  • standardEIASv5Family

  • standardEIBDSv5Family

  • standardEIBSv5Family

  • standardEIDSv5Family

  • standardEISv3Family

  • standardEISv5Family

  • standardESv3Family

  • standardESv4Family

  • standardESv5Family

  • standardFXMDVSFamily

  • standardFSFamily

  • standardFSv2Family

  • standardGSFamily

  • standardHBrsv2Family

  • standardHBSFamily

  • standardHBv4Family

  • standardHCSFamily

  • standardHXFamily

  • standardLASv3Family

  • standardLSFamily

  • standardLSv2Family

  • standardLSv3Family

  • standardMDSHighMemoryv3Family

  • standardMDSMediumMemoryv2Family

  • standardMDSMediumMemoryv3Family

  • standardMIDSHighMemoryv3Family

  • standardMIDSMediumMemoryv2Family

  • standardMISHighMemoryv3Family

  • standardMISMediumMemoryv2Family

  • standardMSFamily

  • standardMSHighMemoryv3Family

  • standardMSMediumMemoryv2Family

  • standardMSMediumMemoryv3Family

  • StandardNCADSA100v4Family

  • Standard NCASv3_T4 Family

  • standardNCSv3Family

  • standardNDSv2Family

  • StandardNGADSV620v1Family

  • standardNPSFamily

  • StandardNVADSA10v5Family

  • standardNVSv3Family

  • standardXEISv4Family

64 位 ARM 架构 Azure 的测试实例类型

以下 Microsoft Azure ARM64 实例类型已通过 OpenShift Container Platform 测试。

基于 64 位 ARM 架构的机器类型
  • standardBpsv2Family

  • standardDPSv5Family

  • standardDPDSv5Family

  • standardDPLDSv5Family

  • standardDPLSv5Family

  • standardEPSv5Family

  • standardEPDSv5Family

为 Azure VM 启用可信启动

在 Azure 上安装集群时,您可以启用两个可信启动功能:安全启动虚拟化可信平台模块

有关支持可信启动功能的虚拟机大小的更多信息,请参阅虚拟机大小

可信启动只是一个技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

先决条件
  • 您已创建install-config.yaml文件。

步骤
  • 在部署集群之前编辑install-config.yaml文件

    • 通过添加以下节来仅在控制平面启用可信启动

      controlPlane:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 仅在计算节点上启用可信启动,请添加以下段落

      compute:
        platform:
          azure:
            settings:
              securityType: TrustedLaunch
              trustedLaunch:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
    • 在所有节点上启用可信启动,请添加以下段落

      platform:
        azure:
          settings:
            securityType: TrustedLaunch
            trustedLaunch:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled

启用受信虚拟机

您可以在安装集群时启用受信虚拟机。您可以为计算节点、控制平面节点或所有节点启用受信虚拟机。

使用受信虚拟机仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您提前访问即将推出的产品功能,从而使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围

您可以将受信虚拟机与以下虚拟机大小一起使用

  • DCasv5 系列

  • DCadsv5 系列

  • ECasv5 系列

  • ECadsv5 系列

目前 64 位 ARM 架构不支持受信虚拟机。

先决条件
  • 您已创建install-config.yaml文件。

步骤
  • 在部署集群之前编辑install-config.yaml文件

    • 仅在控制平面上启用受信虚拟机,请添加以下段落

      controlPlane:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 仅在计算节点上启用受信虚拟机,请添加以下段落

      compute:
        platform:
          azure:
            settings:
              securityType: ConfidentialVM
              confidentialVM:
                uefiSettings:
                  secureBoot: Enabled
                  virtualizedTrustedPlatformModule: Enabled
            osDisk:
              securityProfile:
                securityEncryptionType: VMGuestStateOnly
    • 在所有节点上启用受信虚拟机,请添加以下段落

      platform:
        azure:
          settings:
            securityType: ConfidentialVM
            confidentialVM:
              uefiSettings:
                secureBoot: Enabled
                virtualizedTrustedPlatformModule: Enabled
          osDisk:
            securityProfile:
              securityEncryptionType: VMGuestStateOnly

Azure 的自定义 install-config.yaml 文件示例

您可以自定义 install-config.yaml 文件以指定有关 OpenShift Container Platform 集群平台的更多详细信息,或修改所需参数的值。

此 YAML 文件示例仅供参考。您必须使用安装程序获取您的 install-config.yaml 文件并进行修改。

apiVersion: v1
baseDomain: example.com (1)
controlPlane: (2)
  hyperthreading: Enabled  (3) (4)
  name: master
  platform:
    azure:
      encryptionAtHost: true
      ultraSSDCapability: Enabled
      osDisk:
        diskSizeGB: 1024 (5)
        diskType: Premium_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      type: Standard_D8s_v3
  replicas: 3
compute: (2)
- hyperthreading: Enabled  (3) (4)
  name: worker
  platform:
    azure:
      ultraSSDCapability: Enabled
      type: Standard_D2s_v3
      encryptionAtHost: true
      osDisk:
        diskSizeGB: 512 (5)
        diskType: Standard_LRS
        diskEncryptionSet:
          resourceGroup: disk_encryption_set_resource_group
          name: disk_encryption_set_name
          subscriptionId: secondary_subscription_id
      osImage:
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      zones: (6)
      - "1"
      - "2"
      - "3"
  replicas: 5
metadata:
  name: test-cluster (1)
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes (7)
  serviceNetwork:
  - 172.30.0.0/16
platform:
  azure:
    defaultMachinePlatform:
      osImage: (8)
        publisher: example_publisher_name
        offer: example_image_offer
        sku: example_offer_sku
        version: example_image_version
      ultraSSDCapability: Enabled
    baseDomainResourceGroupName: resource_group (9)
    region: centralus (1)
    resourceGroupName: existing_resource_group (10)
    networkResourceGroupName: vnet_resource_group (11)
    virtualNetwork: vnet (12)
    controlPlaneSubnet: control_plane_subnet (13)
    computeSubnet: compute_subnet (14)
    outboundType: Loadbalancer
    cloudName: AzurePublicCloud
pullSecret: '{"auths": ...}' (1)
fips: false (15)
sshKey: ssh-ed25519 AAAA... (16)
1 必需。安装程序会提示您输入此值。
2 如果您不提供这些参数和值,安装程序将提供默认值。
3 controlPlane 部分是一个单一映射,但 compute 部分是一系列映射。为了满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,而 controlPlane 部分的第一行则不能。仅使用一个控制平面池。
4 是否启用或禁用多线程同步,或 超线程。默认情况下,启用多线程同步以提高机器内核的性能。您可以将其设置为 Disabled 来禁用它。如果在某些集群机器中禁用了多线程同步,则必须在所有集群机器中禁用它。

如果禁用多线程同步,请确保您的容量规划考虑了机器性能的急剧下降。如果禁用多线程同步,请为您的机器使用更大的虚拟机类型,例如 Standard_D8s_v3

5 您可以指定要使用的磁盘大小(以 GB 为单位)。控制平面节点的最低建议值为 1024 GB。
6 指定要将机器部署到的区域列表。为了实现高可用性,请至少指定两个区域。
7 要安装的集群网络插件。默认值 OVNKubernetes 是唯一受支持的值。
8 可选:应用于引导控制平面和计算机的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) 映像。platform.azure.defaultMachinePlatform.osImage 下的 publisherofferskuversion 参数同时适用于控制平面和计算机器。如果设置了 controlPlane.platform.azure.osImagecompute.platform.azure.osImage 下的参数,则它们将覆盖 platform.azure.defaultMachinePlatform.osImage 参数。
9 指定包含您的基础域的 DNS 区域的资源组的名称。
10 指定要向其中安装集群的已存在资源组的名称。如果未定义,则会为集群创建一个新的资源组。
11 如果您使用的是现有 VNet,请指定包含它的资源组的名称。
12 如果您使用的是现有 VNet,请指定其名称。
13 如果您使用的是现有 VNet,请指定托管控制平面机器的子网的名称。
14 如果您使用的是现有 VNet,请指定托管计算机器的子网的名称。
15 是否启用或禁用 FIPS 模式。默认情况下,FIPS 模式未启用。如果启用 FIPS 模式,则运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS (RHCOS) 机器将绕过默认的 Kubernetes 密码套件,并改用随 RHCOS 提供的密码模块。

要为您的集群启用 FIPS 模式,您必须从配置为在 FIPS 模式下运行的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 上配置 FIPS 模式的更多信息,请参阅 将 RHEL 切换到 FIPS 模式

在运行在 FIPS 模式下引导的 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS) 时,OpenShift Container Platform 核心组件仅在 x86_64、ppc64le 和 s390x 架构上使用已提交给 NIST 用于 FIPS 140-2/140-3 验证的 RHEL 密码库。

16 您可以选择提供用于访问集群中机器的 sshKey 值。

对于要在其上执行安装调试或灾难恢复的生产 OpenShift Container Platform 集群,请指定您的ssh-agent进程使用的 SSH 密钥。

在安装过程中配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml 文件中配置代理设置来配置新的 OpenShift Container Platform 集群以使用代理。

先决条件
  • 您有一个现有的 install-config.yaml 文件。

  • 您已查看集群需要访问的站点,并确定其中任何站点是否需要绕过代理。默认情况下,所有集群出站流量都使用代理,包括对托管云提供商 API 的调用。如有必要,您已将站点添加到 Proxy 对象的 spec.noProxy 字段以绕过代理。

    Proxy 对象 status.noProxy 字段将填充安装配置中 networking.machineNetwork[].cidrnetworking.clusterNetwork[].cidrnetworking.serviceNetwork[] 字段的值。

    对于在 Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Microsoft Azure 和 Red Hat OpenStack Platform (RHOSP) 上的安装,Proxy 对象 status.noProxy 字段还会填充实例元数据端点 (169.254.169.254)。

步骤
  1. 编辑您的 install-config.yaml 文件并添加代理设置。例如

    apiVersion: v1
    baseDomain: my.domain.com
    proxy:
      httpProxy: http://<username>:<pswd>@<ip>:<port> (1)
      httpsProxy: https://<username>:<pswd>@<ip>:<port> (2)
      noProxy: example.com (3)
    additionalTrustBundle: | (4)
        -----BEGIN CERTIFICATE-----
        <MY_TRUSTED_CA_CERT>
        -----END CERTIFICATE-----
    additionalTrustBundlePolicy: <policy_to_add_additionalTrustBundle> (5)
    1 用于在集群外部创建 HTTP 连接的代理 URL。URL 方案必须为 http
    2 用于在集群外部创建 HTTPS 连接的代理 URL。
    3 要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。以 . 为前缀的域仅匹配子域。例如,.y.com 匹配 x.y.com,但不匹配 y.com。使用 * 可绕过所有目标的代理。
    4 如果提供,安装程序将生成一个名为 user-ca-bundle 的配置映射,该映射位于 openshift-config 命名空间中,其中包含一个或多个用于代理 HTTPS 连接的额外 CA 证书。然后,集群网络操作员创建一个 trusted-ca-bundle 配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS (RHCOS) 信任捆绑包合并,并且此配置映射在 Proxy 对象的 trustedCA 字段中引用。除非代理的身份证书由 RHCOS 信任捆绑包中的授权机构签名,否则需要 additionalTrustBundle 字段。
    5 可选:确定 Proxy 对象的配置以在 trustedCA 字段中引用 user-ca-bundle 配置映射的策略。允许的值为 ProxyonlyAlways。使用 Proxyonly 仅在配置 http/https 代理时引用 user-ca-bundle 配置映射。使用 Always 始终引用 user-ca-bundle 配置映射。默认值为 Proxyonly

    安装程序不支持代理 readinessEndpoints 字段。

    如果安装程序超时,请重新启动,然后使用安装程序的 wait-for 命令完成部署。例如

    $ ./openshift-install wait-for install-complete --log-level debug
  2. 保存文件并在安装 OpenShift Container Platform 时引用它。

安装程序创建一个名为cluster的集群范围代理,该代理使用提供的install-config.yaml文件中的代理设置。如果未提供代理设置,仍然会创建cluster Proxy对象,但其spec将为nil。

仅支持名为clusterProxy对象,无法创建其他代理。

附加资源

在 kube-system 项目中存储管理员级密钥的替代方法

默认情况下,管理员密钥存储在kube-system项目中。如果您在install-config.yaml文件中将credentialsMode参数配置为Manual,则必须使用以下替代方法之一

手动创建长期凭据

在无法访问云身份和访问管理 (IAM) API 或管理员不想在集群kube-system命名空间中存储管理员级凭据密钥的环境中,可以在安装之前将云凭据操作员 (CCO) 置于手动模式。

步骤
  1. 如果您未在install-config.yaml配置文件中将credentialsMode参数设置为Manual,请修改其值,如下所示

    示例配置文件片段
    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...
  2. 如果您之前没有创建安装清单文件,请运行以下命令创建:

    $ openshift-install create manifests --dir <installation_directory>

    其中<installation_directory>是安装程序创建文件的目录。

  3. 通过运行以下命令,使用安装文件中的发行版镜像设置$RELEASE_IMAGE变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  4. 通过运行以下命令,从 OpenShift Container Platform 发行版镜像中提取CredentialsRequest自定义资源 (CR) 列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \(1)
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \(2)
      --to=<path_to_directory_for_credentials_requests> (3)
    1 --included参数仅包含特定集群配置所需的清单。
    2 指定install-config.yaml文件的位置。
    3 指定要存储CredentialsRequest对象的目录的路径。如果指定的目录不存在,此命令将创建它。

    此命令将为每个CredentialsRequest对象创建一个 YAML 文件。

    CredentialsRequest对象示例
    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
      ...
  5. 为之前生成的openshift-install清单目录中的密钥创建 YAML 文件。必须使用每个CredentialsRequest对象中spec.secretRef定义的命名空间和密钥名称来存储密钥。

    包含密钥的CredentialsRequest对象示例
    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: <component_credentials_request>
      namespace: openshift-cloud-credential-operator
      ...
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: AzureProviderSpec
        roleBindings:
        - role: Contributor
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...
    Secret对象示例
    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      azure_subscription_id: <base64_encoded_azure_subscription_id>
      azure_client_id: <base64_encoded_azure_client_id>
      azure_client_secret: <base64_encoded_azure_client_secret>
      azure_tenant_id: <base64_encoded_azure_tenant_id>
      azure_resource_prefix: <base64_encoded_azure_resource_prefix>
      azure_resourcegroup: <base64_encoded_azure_resourcegroup>
      azure_region: <base64_encoded_azure_region>

在升级使用手动维护的凭据的集群之前,必须确保 CCO 处于可升级状态。

将 Azure 集群配置为使用短期凭据

要安装使用 Microsoft Entra 工作负载 ID 的集群,必须配置云凭据操作员实用程序并为集群创建所需的 Azure 资源。

配置云凭据操作员实用程序

当云凭据操作员 (CCO) 处于手动模式时,要从集群外部创建和管理云凭据,请提取并准备 CCO 实用程序 (ccoctl) 二进制文件。

ccoctl实用程序是一个 Linux 二进制文件,必须在 Linux 环境中运行。

先决条件
  • 您可以访问具有集群管理员访问权限的 OpenShift Container Platform 帐户。

  • 您已安装 OpenShift CLI (oc)。

  • 您已为ccoctl实用程序创建了一个具有以下权限的全局 Microsoft Azure 帐户:

    所需的 Azure 权限
    • Microsoft.Resources/subscriptions/resourceGroups/read

    • Microsoft.Resources/subscriptions/resourceGroups/write

    • Microsoft.Resources/subscriptions/resourceGroups/delete

    • Microsoft.Authorization/roleAssignments/read

    • Microsoft.Authorization/roleAssignments/delete

    • Microsoft.Authorization/roleAssignments/write

    • Microsoft.Authorization/roleDefinitions/read

    • Microsoft.Authorization/roleDefinitions/write

    • Microsoft.Authorization/roleDefinitions/delete

    • Microsoft.Storage/storageAccounts/listkeys/action

    • Microsoft.Storage/storageAccounts/delete

    • Microsoft.Storage/storageAccounts/read

    • Microsoft.Storage/storageAccounts/write

    • Microsoft.Storage/storageAccounts/blobServices/containers/write

    • Microsoft.Storage/storageAccounts/blobServices/containers/delete

    • Microsoft.Storage/storageAccounts/blobServices/containers/read

    • Microsoft.ManagedIdentity/userAssignedIdentities/delete

    • Microsoft.ManagedIdentity/userAssignedIdentities/read

    • Microsoft.ManagedIdentity/userAssignedIdentities/write

    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/read

    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write

    • Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/delete

    • Microsoft.Storage/register/action

    • Microsoft.ManagedIdentity/register/action

步骤
  1. 通过运行以下命令设置 OpenShift Container Platform 发行版镜像的变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 通过运行以下命令从 OpenShift Container Platform 发行版镜像中获取 CCO 容器镜像:

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)

    确保$RELEASE_IMAGE的架构与您将使用ccoctl工具的环境架构匹配。

  3. 通过运行以下命令从 OpenShift Container Platform 发行版镜像中的 CCO 容器镜像中提取ccoctl二进制文件:

    $ oc image extract $CCO_IMAGE \
      --file="/usr/bin/ccoctl.<rhel_version>" \(1)
      -a ~/.pull-secret
    1 对于<rhel_version>,请指定与主机使用的 Red Hat Enterprise Linux (RHEL) 版本相对应的值。如果未指定值,则默认使用ccoctl.rhel8。有效值为:
    • rhel8:对于使用 RHEL 8 的主机,指定此值。

    • rhel9:对于使用 RHEL 9 的主机,指定此值。

  4. 通过运行以下命令更改权限以使ccoctl可执行:

    $ chmod 775 ccoctl.<rhel_version>
验证
  • 要验证ccoctl是否可以使用,请显示帮助文件。运行命令时,请使用相对文件名,例如:

    $ ./ccoctl.rhel9
    示例输出
    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for {ibm-cloud-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

使用云凭据操作员实用程序创建 Azure 资源

您可以使用ccoctl azure create-all命令来自动创建 Azure 资源。

默认情况下,ccoctl在运行命令的目录中创建对象。要在不同的目录中创建对象,请使用--output-dir标志。此过程使用<path_to_ccoctl_output_dir>来引用此目录。

先决条件

您必须:

  • 提取并准备了ccoctl二进制文件。

  • 通过 Azure CLI 访问您的 Microsoft Azure 帐户。

步骤
  1. 通过运行以下命令,使用安装文件中的发行版镜像设置$RELEASE_IMAGE变量:

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 通过运行以下命令从 OpenShift Container Platform 发行版镜像中提取CredentialsRequest对象列表:

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --included \(1)
      --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \(2)
      --to=<path_to_directory_for_credentials_requests> (3)
    1 --included参数仅包含特定集群配置所需的清单。
    2 指定install-config.yaml文件的位置。
    3 指定要存储CredentialsRequest对象的目录的路径。如果指定的目录不存在,此命令将创建它。

    此命令可能需要几分钟才能运行。

  3. 要使ccoctl实用程序能够自动检测您的 Azure 凭据,请通过运行以下命令登录到 Azure CLI:

    $ az login
  4. 使用ccoctl工具处理所有CredentialsRequest对象,方法是运行以下命令:

    $ ccoctl azure create-all \
      --name=<azure_infra_name> \(1)
      --output-dir=<ccoctl_output_dir> \(2)
      --region=<azure_region> \(3)
      --subscription-id=<azure_subscription_id> \(4)
      --credentials-requests-dir=<path_to_credentials_requests_directory> \(5)
      --dnszone-resource-group-name=<azure_dns_zone_resource_group_name> \(6)
      --tenant-id=<azure_tenant_id> (7)
    1 指定用于跟踪的所有已创建 Azure 资源的用户定义名称。
    2 可选:指定您希望ccoctl实用程序创建对象的目录。默认情况下,该实用程序在运行命令的目录中创建对象。
    3 指定将创建云资源的 Azure 区域。
    4 指定要使用的 Azure 订阅 ID。
    5 指定包含组件CredentialsRequest对象文件的目录。
    6 指定包含集群基础域 Azure DNS 区域的资源组的名称。
    7 指定要使用的 Azure 租户 ID。

    如果您的集群使用由TechPreviewNoUpgrade功能集启用的技术预览功能,则必须包含--enable-tech-preview参数。

    要查看其他可选参数以及如何使用它们的说明,请运行azure create-all --help命令。

验证
  • 要验证 OpenShift Container Platform 密钥是否已创建,请列出<path_to_ccoctl_output_dir>/manifests目录中的文件。

    $ ls <path_to_ccoctl_output_dir>/manifests
    示例输出
    azure-ad-pod-identity-webhook-config.yaml
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-azure-cloud-credentials-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capz-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-disk-credentials-credentials.yaml
    openshift-cluster-csi-drivers-azure-file-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-azure-cloud-credentials-credentials.yaml

    您可以通过查询 Azure 来验证 Microsoft Entra ID 服务帐户是否已创建。有关更多信息,请参阅 Azure 文档中关于列出 Entra ID 服务帐户的内容。

整合云凭据操作员实用程序清单

要实现为各个组件管理在集群外部管理的短期安全凭据,您必须将云凭据操作员实用程序 (ccoctl) 创建的清单文件移动到安装程序的正确目录。

先决条件
  • 您已配置了一个帐户,该帐户具有托管您的集群的云平台。

  • 您已配置云凭据操作员实用程序 (ccoctl)。

  • 您已使用ccoctl实用程序创建了集群所需的云提供商资源。

步骤
  1. 如果您未在install-config.yaml配置文件中将credentialsMode参数设置为Manual,请修改其值,如下所示

    示例配置文件片段
    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...
  2. 如果您使用ccoctl实用程序创建了一个新的 Azure 资源组而不是使用现有的资源组,请修改install-config.yaml中的resourceGroupName参数,如所示

    示例配置文件片段
    apiVersion: v1
    baseDomain: example.com
    # ...
    platform:
      azure:
        resourceGroupName: <azure_infra_name> (1)
    # ...
    1 此值必须与使用ccoctl azure create-all命令的--name参数指定的 Azure 资源的用户定义名称匹配。
  3. 如果您之前没有创建安装清单文件,请运行以下命令创建:

    $ openshift-install create manifests --dir <installation_directory>

    其中<installation_directory>是安装程序创建文件的目录。

  4. ccoctl实用程序生成的清单复制到安装程序通过运行以下命令创建的manifests目录

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. 将包含私钥的tls目录复制到安装目录。

    $ cp -a /<path_to_ccoctl_output_dir>/tls .

部署集群

您可以在兼容的云平台上安装 OpenShift Container Platform。

您只能在初始安装期间运行安装程序的create cluster命令一次。

先决条件
  • 您已配置了一个帐户,该帐户具有托管您的集群的云平台。

  • 您拥有 OpenShift Container Platform 安装程序和集群的拉取密钥。

  • 您拥有 Azure 订阅 ID 和租户 ID。

步骤
  • 切换到包含安装程序的目录并初始化集群部署。

    $ ./openshift-install create cluster --dir <installation_directory> \ (1)
        --log-level=info (2)
    
    1 对于<installation_directory>,请指定您自定义的./install-config.yaml文件的路径。
    2 要查看不同的安装详细信息,请指定warndebugerror代替info
验证

当集群部署成功完成时

  • 终端将显示访问集群的说明,包括指向 Web 控制台的链接以及kubeadmin用户的凭据。

  • 凭据信息也会输出到<installation_directory>/.openshift_install.log

不要删除安装程序或安装程序创建的文件。两者都需要删除集群。

示例输出
...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/myuser/install_dir/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.mycluster.example.com
INFO Login to the console with user: "kubeadmin", and password: "password"
INFO Time elapsed: 36m22s
  • 安装程序生成的 Ignition 配置文件包含在 24 小时后过期的证书,然后会在那时续期。如果集群在续期证书之前关闭,并且集群在 24 小时后重新启动,则集群会自动恢复过期的证书。例外情况是,您必须手动批准挂起的node-bootstrapper证书签名请求 (CSR) 以恢复 kubelet 证书。有关更多信息,请参阅有关“从过期的控制平面证书中恢复”的文档。

  • 建议您在生成 Ignition 配置文件后 12 小时内使用它们,因为 24 小时证书会在集群安装后 16 到 22 小时之间轮换。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装期间证书更新运行时安装失败。

附加资源
  • 有关访问和了解 OpenShift Container Platform Web 控制台的更多详细信息,请参阅访问 Web 控制台

后续步骤