×

在 OpenShift Container Platform 4.17 版本中,您可以使用安装程序预配的基础架构以及自定义的网络配置选项,在您的 VMware vSphere 实例上安装集群。通过自定义网络配置,您的集群可以与环境中现有的 IP 地址分配共存,并与现有的 MTU 和 VXLAN 配置集成。要自定义安装,请在安装集群之前修改install-config.yaml文件中的参数。

您必须在安装过程中设置大多数网络配置参数,并且只能在运行的集群中修改kubeProxy配置参数。

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

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

先决条件

OpenShift Container Platform 的互联网访问

在 OpenShift Container Platform 4.17 中,您需要访问互联网才能安装集群。

您必须具有互联网访问权限才能:

  • 访问OpenShift 集群管理器以下载安装程序并执行订阅管理。如果集群具有互联网访问权限并且您没有禁用遥测,则该服务会自动授权您的集群。

  • 访问Quay.io以获取安装集群所需的软件包。

  • 获取执行集群更新所需的软件包。

如果您的集群无法直接访问互联网,您可以在您配置的某些类型的基础架构上执行受限网络安装。在此过程中,您将下载所需的内容并使用它来填充镜像注册表中的安装包。对于某些安装类型,您安装集群的环境将不需要互联网访问。在更新集群之前,您需要更新镜像注册表的内容。

VMware vSphere 区域和区域启用

您可以将 OpenShift Container Platform 集群部署到多个 vSphere 数据中心。每个数据中心可以运行多个集群。此配置降低了硬件故障或网络中断可能导致集群故障的风险。要启用区域和区域,您必须为 OpenShift Container Platform 集群定义多个故障域。

VMware vSphere 区域和区域启用功能需要 vSphere Container Storage Interface (CSI) 驱动程序作为集群中的默认存储驱动程序。因此,此功能仅在新安装的集群上可用。

对于从先前版本升级的集群,您必须为集群启用 CSI 自动迁移。然后,您可以为升级的集群配置多个区域和区域。

默认安装配置将集群部署到单个 vSphere 数据中心。如果您想将集群部署到多个 vSphere 数据中心,则必须创建一个启用区域和区域功能的安装配置文件。

默认的 install-config.yaml 文件包含 vcentersfailureDomains 字段,您可以在其中为 OpenShift Container Platform 集群指定多个 vSphere 数据中心和集群。如果您想在由单个数据中心组成的 vSphere 环境中安装 OpenShift Container Platform 集群,则可以将这些字段留空。

以下列表描述了与为集群定义区域和区域相关的术语

  • 故障域:建立区域和区域之间的关系。您可以使用 vCenter 对象(例如 datastore 对象)来定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。

  • 区域:指定 vCenter 数据中心。您可以使用 openshift-region 标签类别中的标签来定义区域。

  • 区域:指定 vCenter 群集。您可以使用 openshift-zone 标签类别中的标签来定义区域。

如果您计划在 install-config.yaml 文件中指定多个故障域,则必须在创建配置文件之前预先创建标签类别、区域标签和区域标签。

您必须为每个 vCenter 数据中心创建一个 vCenter 标签,该标签代表一个区域。此外,您必须为在数据中心中运行的每个群集创建一个 vCenter 标签,该标签代表一个区域。创建标签后,您必须将每个标签附加到它们各自的数据中心和群集。

下表概述了在单个 VMware vCenter 中运行多个 vSphere 数据中心的配置中区域、区域和标签之间关系的示例。

数据中心(区域) 群集(区域) 标签

us-east

us-east-1

us-east-1a

us-east-1b

us-east-2

us-east-2a

us-east-2b

us-west

us-west-1

us-west-1a

us-west-1b

us-west-2

us-west-2a

us-west-2b

创建安装配置文件

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

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

步骤
  1. 创建 install-config.yaml 文件。

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

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

      指定目录时:

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

      • 使用空目录。某些安装资产(例如引导 X.509 证书)具有较短的过期时间间隔,因此您不能重用安装目录。如果您想重用来自另一个集群安装的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名在不同版本之间可能会更改。从早期 OpenShift Container Platform 版本复制安装文件时,请务必小心。

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

      1. 可选:选择要用于访问集群机器的 SSH 密钥。

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

      2. 选择 **vsphere** 作为目标平台。

      3. 指定 vCenter 实例的名称。

      4. 指定具有创建集群所需权限的 vCenter 帐户的用户名和密码。

        安装程序将连接到您的 vCenter 实例。

      5. 选择要连接到的 vCenter 实例中的数据中心。

        创建安装配置文件后,您可以修改该文件以创建多个 vSphere 数据中心环境。这意味着您可以将 OpenShift Container Platform 集群部署到多个 vSphere 数据中心。有关创建此环境的更多信息,请参阅名为“VMware vSphere 区域和区域启用”的部分。

      6. 选择要使用的默认 vCenter 数据存储。

        您可以指定数据存储集群中存在的任何数据存储的路径。默认情况下,使用 Storage vMotion 的存储分布式资源调度程序 (SDRS) 会自动为数据存储集群启用。Red Hat 不支持 Storage vMotion,因此您必须禁用 Storage DRS 以避免 OpenShift Container Platform 集群的数据丢失问题。

        您不能指定多个数据存储路径。如果您必须在多个数据存储中指定虚拟机,请使用 datastore 对象在集群的 install-config.yaml 配置文件中指定故障域。有关更多信息,请参阅“VMware vSphere 区域和区域启用”。

      7. 选择要在其中安装 OpenShift Container Platform 集群的 vCenter 群集。安装程序将使用 vSphere 群集的根资源池作为默认资源池。

      8. 选择 vCenter 实例中包含您已配置的虚拟 IP 地址和 DNS 记录的网络。

      9. 输入您为控制平面 API 访问配置的虚拟 IP 地址。

      10. 输入您为集群入口配置的虚拟 IP 地址。

      11. 输入基础域。此基础域必须与您在已配置的 DNS 记录中使用的基础域相同。

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

        您输入的集群名称必须与您在配置 DNS 记录时指定的集群名称匹配。

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

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

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

其他资源

安装程序预配的 VMware vSphere 集群的install-config.yaml文件示例

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

apiVersion: v1
baseDomain: example.com (1)
compute: (2)
- architecture: amd64
  name:  <worker_node>
  platform: {}
  replicas: 3
controlPlane: (2)
  architecture: amd64
  name: <parent_node>
  platform: {}
  replicas: 3
metadata:
  creationTimestamp: null
  name: test (3)
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes (11)
  serviceNetwork:
  - 172.30.0.0/16
platform:
  vsphere: (4)
    apiVIPs:
      - 10.0.0.1
    failureDomains: (5)
    - name: <failure_domain_name>
      region: <default_region_name>
      server: <fully_qualified_domain_name>
      topology:
        computeCluster: "/<data_center>/host/<cluster>"
        datacenter: <data_center>
        datastore: "/<data_center>/datastore/<datastore>" (6)
        networks:
        - <VM_Network_name>
        resourcePool: "/<data_center>/host/<cluster>/Resources/<resourcePool>" (7)
        folder: "/<data_center_name>/vm/<folder_name>/<subfolder_name>"
        tagIDs: (8)
        - <tag_id>  (9)
      zone: <default_zone_name>
    ingressVIPs:
    - 10.0.0.2
    vcenters:
    - datacenters:
      - <data_center>
      password: <password>
      port: 443
      server: <fully_qualified_domain_name>
      user: [email protected]
    diskType: thin (10)
fips: false
pullSecret: '{"auths": ...}'
sshKey: 'ssh-ed25519 AAAA...'
1 集群的基本域名。所有 DNS 记录都必须为此基本域名的子域名,并且包含集群名称。
2 controlPlane部分是一个单映射,但compute部分是映射序列。为了满足不同数据结构的要求,compute部分的第一行必须以连字符-开头,而controlPlane部分的第一行则不能。只使用一个控制平面池。
3 您在 DNS 记录中指定的集群名称。
4 可选:为计算和控制平面机器的机器池参数提供附加配置。
5 建立区域和区域之间的关系。您可以使用 vCenter 对象(例如datastore对象)来定义故障域。故障域定义 OpenShift Container Platform 集群节点的 vCenter 位置。
6 保存虚拟机文件、模板和 ISO 映像的 vSphere 数据存储的路径。

您可以指定数据存储集群中任何现有数据存储的路径。默认情况下,数据存储集群会自动启用 Storage vMotion。Red Hat 不支持 Storage vMotion,因此您必须禁用 Storage vMotion 以避免 OpenShift Container Platform 集群的数据丢失问题。

如果您必须在多个数据存储中指定 VM,请使用datastore对象在集群的install-config.yaml配置文件中指定故障域。有关更多信息,请参阅“VMware vSphere 区域和区域启用”。

7 可选:为机器创建提供现有的资源池。如果您未指定值,则安装程序将使用 vSphere 集群的根资源池。
8 可选:OpenShift Container Platform 创建的每个 VM 都被分配一个特定于集群的唯一标记。分配的标记使安装程序能够在集群停用时识别和删除关联的 VM。您可以列出最多十个要附加到安装程序预配的 VM 的附加标记 ID。
9 安装程序要关联的标记的 ID。例如,urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL。有关确定标记 ID 的更多信息,请参阅vSphere 标记和属性文档
10 vSphere 磁盘预配方法。
11 要安装的集群网络插件。默认值OVNKubernetes是唯一受支持的值。

在 OpenShift Container Platform 4.12 及更高版本中,apiVIPingressVIP配置设置已弃用。请改用列表格式在apiVIPsingressVIPs配置设置中输入值。

在安装期间配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 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。使用*绕过所有目标的代理。您必须包含 vCenter 的 IP 地址以及您用于其机器的 IP 范围。
    4 如果提供,安装程序将在openshift-config命名空间中生成名为user-ca-bundle的配置映射,其中包含代理 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文件中的代理设置。如果未提供代理设置,则仍然会创建clusterProxy对象,但它将具有空spec

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

使用双协议栈网络进行部署

对于 OpenShift Container Platform 集群中的双栈网络,您可以为集群节点配置 IPv4 和 IPv6 地址端点。要为集群节点配置 IPv4 和 IPv6 地址端点,请编辑install-config.yaml文件中的machineNetworkclusterNetworkserviceNetwork配置设置。每个设置都必须有两个 CIDR 条目。对于以 IPv4 族作为主地址族的集群,请先指定 IPv4 设置。对于以 IPv6 族作为主地址族的集群,请先指定 IPv6 设置。

machineNetwork:
- cidr: {{ extcidrnet }}
- cidr: {{ extcidrnet6 }}
clusterNetwork:
- cidr: 10.128.0.0/14
  hostPrefix: 23
- cidr: fd02::/48
  hostPrefix: 64
serviceNetwork:
- 172.30.0.0/16
- fd03::/112

为了为使用 IPv4 和 IPv6 地址的应用程序提供集群接口,请为 Ingress VIP 和 API VIP 服务配置 IPv4 和 IPv6 虚拟 IP (VIP) 地址端点。要配置 IPv4 和 IPv6 地址端点,请编辑install-config.yaml文件中的apiVIPsingressVIPs配置设置。apiVIPsingressVIPs配置设置使用列表格式。列表的顺序指示每项服务的首要和次要 VIP 地址。

platform:
  vsphere:
    apiVIPs:
      - <api_ipv4>
      - <api_ipv6>
    ingressVIPs:
      - <wildcard_ipv4>
      - <wildcard_ipv6>

对于具有双栈网络配置的集群,必须将 IPv4 和 IPv6 地址都分配给同一个接口。

为 VMware vCenter 配置区域和区域

您可以修改默认的安装配置文件,以便您可以将 OpenShift Container Platform 集群部署到多个 vSphere 数据中心。

先前版本的 OpenShift Container Platform 中的默认install-config.yaml文件配置已弃用。您可以继续使用已弃用的默认配置,但openshift-installer将提示您一条警告消息,指示配置文件中使用了已弃用的字段。

此示例使用govc命令。govc命令是一个来自 VMware 的开源命令;它不适用于 Red Hat。Red Hat 支持团队不维护govc命令。有关下载和安装govc的说明,请参阅 VMware 文档网站。

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

    您必须为 OpenShift Container Platform 集群指定至少一个故障域,以便您可以为 VMware vCenter 服务器预配数据中心对象。如果您需要在不同的数据中心、集群、数据存储和其他组件中预配虚拟机节点,请考虑指定多个故障域。要启用区域和区域,您必须为 OpenShift Container Platform 集群定义多个故障域。

步骤
  1. 输入以下govc命令行工具命令以创建openshift-regionopenshift-zone vCenter 标签类别。

    如果您为openshift-regionopenshift-zone vCenter 标签类别指定不同的名称,则 OpenShift Container Platform 集群的安装将失败。

    $ govc tags.category.create -d "OpenShift region" openshift-region
    $ govc tags.category.create -d "OpenShift zone" openshift-zone
  2. 要为要部署集群的每个区域 vSphere 数据中心创建一个区域标签,请在您的终端中输入以下命令。

    $ govc tags.create -c <region_tag_category> <region_tag>
  3. 要为要部署集群的每个 vSphere 集群创建一个区域标签,请输入以下命令。

    $ govc tags.create -c <zone_tag_category> <zone_tag>
  4. 通过输入以下命令,将区域标签附加到每个 vCenter 数据中心对象。

    $ govc tags.attach -c <region_tag_category> <region_tag_1> /<data_center_1>
  5. 通过输入以下命令,将区域标签附加到每个 vCenter 数据中心对象。

    $ govc tags.attach -c <zone_tag_category> <zone_tag_1> /<data_center_1>/host/vcs-mdcnc-workload-1
  6. 更改到包含安装程序的目录,并根据您选择的安装要求初始化集群部署。

在 vSphere 中心定义了多个数据中心的示例install-config.yaml文件。
---
compute:
---
  vsphere:
      zones:
        - "<machine_pool_zone_1>"
        - "<machine_pool_zone_2>"
---
controlPlane:
---
vsphere:
      zones:
        - "<machine_pool_zone_1>"
        - "<machine_pool_zone_2>"
---
platform:
  vsphere:
    vcenters:
---
    datacenters:
      - <data_center_1_name>
      - <data_center_2_name>
    failureDomains:
    - name: <machine_pool_zone_1>
      region: <region_tag_1>
      zone: <zone_tag_1>
      server: <fully_qualified_domain_name>
      topology:
        datacenter: <data_center_1>
        computeCluster: "/<data_center_1>/host/<cluster1>"
        networks:
        - <VM_Network1_name>
        datastore: "/<data_center_1>/datastore/<datastore1>"
        resourcePool: "/<data_center_1>/host/<cluster1>/Resources/<resourcePool1>"
        folder: "/<data_center_1>/vm/<folder1>"
    - name: <machine_pool_zone_2>
      region: <region_tag_2>
      zone: <zone_tag_2>
      server: <fully_qualified_domain_name>
      topology:
        datacenter: <data_center_2>
        computeCluster: "/<data_center_2>/host/<cluster2>"
        networks:
        - <VM_Network2_name>
        datastore: "/<data_center_2>/datastore/<datastore2>"
        resourcePool: "/<data_center_2>/host/<cluster2>/Resources/<resourcePool2>"
        folder: "/<data_center_2>/vm/<folder2>"
---

网络配置阶段

在安装 OpenShift Container Platform 之前,有两个阶段可以自定义网络配置。

阶段 1

在创建清单文件之前,您可以在install-config.yaml文件中自定义以下与网络相关的字段。

  • networking.networkType

  • networking.clusterNetwork

  • networking.serviceNetwork

  • networking.machineNetwork

    有关更多信息,请参阅“安装配置参数”。

    networking.machineNetwork设置为与首选子网所在的无类别域间路由 (CIDR) 匹配。

    CIDR 范围172.17.0.0/16libVirt保留。您不能对集群中的网络使用任何其他与172.17.0.0/16 CIDR 范围重叠的 CIDR 范围。

阶段 2

通过运行openshift-install create manifests创建清单文件后,您可以仅使用要修改的字段定义自定义的集群网络运算符清单。您可以使用清单来指定高级网络配置。

在阶段 2 中,您无法覆盖在阶段 1 中在install-config.yaml文件中指定的 value。但是,您可以在阶段 2 中自定义网络插件。

指定高级网络配置

您可以使用网络插件的高级网络配置将您的集群集成到您现有的网络环境中。

您只能在安装集群之前指定高级网络配置。

不支持通过修改安装程序创建的 OpenShift Container Platform 清单文件来自定义网络配置。支持应用您创建的清单文件,如下面的过程所示。

先决条件
  • 您已创建install-config.yaml文件并完成了对其的任何修改。

步骤
  1. 更改到包含安装程序的目录并创建清单。

    $ ./openshift-install create manifests --dir <installation_directory> (1)
    1 <installation_directory>指定包含集群install-config.yaml文件的目录的名称。
  2. 为高级网络配置创建一个存根清单文件,该文件名为cluster-network-03-config.yml,位于<installation_directory>/manifests/目录中。

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
  3. cluster-network-03-config.yml文件中指定集群的高级网络配置,例如以下示例。

    为 OVN-Kubernetes 网络提供程序启用 IPsec。
    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      defaultNetwork:
        ovnKubernetesConfig:
          ipsecConfig:
            mode: Full
  4. 可选:备份manifests/cluster-network-03-config.yml文件。当您创建 Ignition 配置文件时,安装程序会使用manifests/目录。

  5. 删除定义控制平面机器和计算 MachineSet 的 Kubernetes 清单文件。

    $ rm -f openshift/99_openshift-cluster-api_master-machines-*.yaml openshift/99_openshift-cluster-api_worker-machineset-*.yaml

    因为您自己创建和管理这些资源,所以您不必初始化它们。

    • 您可以保留 MachineSet 文件以使用机器 API 创建计算机器,但您必须更新对它们的引用以匹配您的环境。

为您的网络指定多个子网

在您在 vSphere 主机上安装 OpenShift Container Platform 集群之前,您可以为网络实现指定多个子网,以便 vSphere 云控制器管理器 (CCM) 可以为给定的网络情况选择合适的子网。vSphere 可以使用子网来管理集群上的 Pod 和服务。

对于此配置,您必须在 vSphere CCM 配置中指定内部和外部无类别域间路由 (CIDR) 实现。每个 CIDR 实现都列出了 CCM 用于确定哪些子网与来自内部和外部网络的流量交互的 IP 地址范围。

未能配置 vSphere CCM 配置中的内部和外部 CIDR 实现会导致 vSphere CCM 选择错误的子网。这种情况会导致以下错误。

ERROR Bootstrap failed to complete: timed out waiting for the condition
ERROR Failed to wait for bootstrapping to complete. This error usually happens when there is a problem with control plane hosts that prevents the control plane operators from creating the control plane.

此配置可能会导致与具有单个子网的MachineSet对象关联的新节点变得不可用,因为每个新节点都会收到node.cloudprovider.kubernetes.io/uninitialized污染。这些情况可能会导致与 Kubernetes API 服务器的通信问题,从而导致集群安装失败。

先决条件
  • 您已为 OpenShift Container Platform 集群创建了 Kubernetes 清单文件。

步骤
  1. 在存储 OpenShift Container Platform 集群清单文件的目录中,打开manifests/cluster-infrastructure-02-config.yml清单文件。

  2. 向文件中添加一个nodeNetworking对象,并为该对象指定内部和外部网络子网 CIDR 实现。

    对于大多数网络场景,建议设置标准的多子网配置。此配置要求您在nodeNetworking.internal.networkSubnetCidrnodeNetworking.external.networkSubnetCidr参数中设置相同的IP地址范围。

    已配置的cluster-infrastructure-02-config.yml清单文件示例
    apiVersion: config.openshift.io/v1
    kind: Infrastructure
    metadata:
      name: cluster
    spec:
      cloudConfig:
        key: config
        name: cloud-provider-config
      platformSpec:
        type: VSphere
        vsphere:
          failureDomains:
          - name: generated-failure-domain
          ...
           nodeNetworking:
             external:
               networkSubnetCidr:
               - <machine_network_cidr_ipv4>
               - <machine_network_cidr_ipv6>
             internal:
               networkSubnetCidr:
               - <machine_network_cidr_ipv4>
               - <machine_network_cidr_ipv6>
    # ...

集群网络操作员配置

集群网络的配置指定为集群网络操作员 (CNO) 配置的一部分,并存储在一个名为cluster的自定义资源 (CR) 对象中。CR 指定operator.openshift.io API 组中Network API 的字段。

在集群安装过程中,CNO 配置从Network.config.openshift.io API 组中的Network API 继承以下字段

clusterNetwork

分配 Pod IP 地址的 IP 地址池。

serviceNetwork

服务的 IP 地址池。

defaultNetwork.type

集群网络插件。安装过程中,唯一支持的插件是OVNKubernetes

您可以通过设置名为cluster的 CNO 对象中defaultNetwork对象的字段来指定集群的集群网络插件配置。

集群网络操作员配置对象

集群网络操作员 (CNO) 的字段在下面的表格中描述

表 1. 集群网络操作员配置对象
字段 类型 描述

metadata.name

字符串

CNO 对象的名称。此名称始终为cluster

spec.clusterNetwork

数组

指定用于分配 Pod IP 地址的 IP 地址块以及分配给集群中每个节点的子网前缀长度的列表。例如

spec:
  clusterNetwork:
  - cidr: 10.128.0.0/19
    hostPrefix: 23
  - cidr: 10.128.32.0/19
    hostPrefix: 23

spec.serviceNetwork

数组

服务的 IP 地址块。OVN-Kubernetes 网络插件仅支持服务网络的单个 IP 地址块。例如

spec:
  serviceNetwork:
  - 172.30.0.0/14

您只能在创建清单文件之前在install-config.yaml文件中自定义此字段。此值在清单文件中是只读的。

spec.defaultNetwork

对象

配置集群网络的网络插件。

spec.kubeProxyConfig

对象

此对象的字段指定 kube-proxy 配置。如果您使用的是 OVN-Kubernetes 集群网络插件,则 kube-proxy 配置无效。

对于需要跨多个网络部署对象的集群,请确保为install-config.yaml文件中定义的每种网络类型指定相同的clusterNetwork.hostPrefix参数值。为每个clusterNetwork.hostPrefix参数设置不同的值可能会影响 OVN-Kubernetes 网络插件,插件无法有效地路由不同节点之间的对象流量。

defaultNetwork 对象配置

defaultNetwork 对象的值在下面的表格中定义

表 2. defaultNetwork 对象
字段 类型 描述

type

字符串

OVNKubernetes。安装过程中选择 Red Hat OpenShift 网络网络插件。此值在集群安装后无法更改。

OpenShift Container Platform 默认使用 OVN-Kubernetes 网络插件。OpenShift SDN 作为新集群的安装选项不再可用。

ovnKubernetesConfig

对象

此对象仅对 OVN-Kubernetes 网络插件有效。

OVN-Kubernetes 网络插件的配置

下表描述了 OVN-Kubernetes 网络插件的配置字段

表 3. ovnKubernetesConfig 对象
字段 类型 描述

mtu

整数

Geneve(通用网络虚拟化封装)覆盖网络的最大传输单元 (MTU)。这是根据主网络接口的 MTU 自动检测的。您通常不需要覆盖检测到的 MTU。

如果自动检测到的值与您的预期不符,请确认节点上主网络接口上的 MTU 是否正确。您不能使用此选项更改节点上主网络接口的 MTU 值。

如果您的集群需要为不同的节点指定不同的 MTU 值,则必须将此值设置为集群中最低 MTU 值减去100。例如,如果集群中某些节点的 MTU 为9001,而某些节点的 MTU 为1500,则必须将此值设置为1400

genevePort

整数

用于所有 Geneve 数据包的端口。默认值为6081。此值在集群安装后无法更改。

ipsecConfig

对象

指定一个配置对象,用于自定义 IPsec 配置。

ipv4

对象

指定 IPv4 设置的配置对象。

ipv6

对象

指定 IPv6 设置的配置对象。

policyAuditConfig

对象

指定一个配置对象,用于自定义网络策略审计日志记录。如果未设置,则使用默认审计日志设置。

gatewayConfig

对象

可选:指定一个配置对象,用于自定义如何将出站流量发送到节点网关。

迁移出站流量期间,您可能会遇到工作负载和服务流量的一些中断,直到集群网络操作员 (CNO) 成功推出更改为止。

表 4. ovnKubernetesConfig.ipv4 对象
字段 类型 描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础设施与100.88.0.0/16 IPv4 子网重叠,您可以为 OVN-Kubernetes 的内部使用指定不同的 IP 地址范围。启用东西向流量的分布式中转交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。它必须足够大,可以容纳集群中每个节点一个 IP 地址。

默认值为100.88.0.0/16

internalJoinSubnet

字符串

如果您的现有网络基础设施与100.64.0.0/16 IPv4 子网重叠,您可以为 OVN-Kubernetes 的内部使用指定不同的 IP 地址范围。您必须确保 IP 地址范围不与您的 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可以添加到集群中的最大节点数。例如,如果clusterNetwork.cidr值为10.128.0.0/14,而clusterNetwork.hostPrefix值为/23,则最大节点数为2^(23-14)=512

默认值为100.64.0.0/16

表 5. ovnKubernetesConfig.ipv6 对象
字段 类型 描述

internalTransitSwitchSubnet

字符串

如果您的现有网络基础设施与fd97::/64 IPv6 子网重叠,您可以为 OVN-Kubernetes 的内部使用指定不同的 IP 地址范围。启用东西向流量的分布式中转交换机的子网。此子网不能与 OVN-Kubernetes 或主机本身使用的任何其他子网重叠。它必须足够大,可以容纳集群中每个节点一个 IP 地址。

默认值为fd97::/64

internalJoinSubnet

字符串

如果您的现有网络基础设施与fd98::/64 IPv6 子网重叠,您可以为 OVN-Kubernetes 的内部使用指定不同的 IP 地址范围。您必须确保 IP 地址范围不与您的 OpenShift Container Platform 安装使用的任何其他子网重叠。IP 地址范围必须大于可以添加到集群中的最大节点数。

默认值为fd98::/64

表 6. policyAuditConfig 对象
字段 类型 描述

rateLimit

整数

每个节点每秒生成的最多消息数。默认值为每秒20条消息。

maxFileSize

整数

审计日志的最大大小(字节)。默认值为50000000或50 MB。

maxLogFiles

整数

保留的最大日志文件数量。

目标

字符串

以下附加审计日志目标之一

libc

主机上journald进程的libc syslog()函数。

udp:<host>:<port>

一个syslog服务器。将<host>:<port>替换为syslog服务器的主机和端口。

unix:<file>

<file>指定的Unix域套接字文件。

null

不将审计日志发送到任何其他目标。

syslogFacility

字符串

syslog设备,例如kern,如RFC5424中定义。默认值为local0

表7. gatewayConfig对象
字段 类型 描述

routingViaHost

布尔值

将此字段设置为true以将Pod的出站流量发送到主机网络堆栈。对于依赖于内核路由表中手动配置的路由的高度专业化安装和应用程序,您可能希望将出站流量路由到主机网络堆栈。默认情况下,出站流量在OVN中处理以离开集群,并且不受内核路由表中专用路由的影响。默认值为false

此字段与Open vSwitch硬件卸载功能存在交互。如果将此字段设置为true,则不会获得卸载带来的性能优势,因为出站流量由主机网络堆栈处理。

ipForwarding

对象

您可以使用Network资源中的ipForwarding规范来控制OVN-Kubernetes管理接口上所有流量的IP转发。指定Restricted仅允许与Kubernetes相关的流量进行IP转发。指定Global允许转发所有IP流量。对于新安装,默认为Restricted。对于OpenShift Container Platform 4.14或更高版本的更新,默认为Global

ipv4

对象

可选:指定一个对象来配置用于主机到服务流量(IPv4地址)的内部OVN-Kubernetes伪装地址。

ipv6

对象

可选:指定一个对象来配置用于主机到服务流量(IPv6地址)的内部OVN-Kubernetes伪装地址。

表8. gatewayConfig.ipv4对象
字段 类型 描述

internalMasqueradeSubnet

字符串

在内部用于启用主机到服务流量的伪装IPv4地址。主机也配置了这些IP地址以及共享网关桥接接口。默认值为169.254.169.0/29

对于OpenShift Container Platform 4.17及更高版本,集群使用169.254.0.0/17作为默认伪装子网。对于升级后的集群,默认伪装子网不会更改。

表9. gatewayConfig.ipv6对象
字段 类型 描述

internalMasqueradeSubnet

字符串

在内部用于启用主机到服务流量的伪装IPv6地址。主机也配置了这些IP地址以及共享网关桥接接口。默认值为fd69::/125

对于OpenShift Container Platform 4.17及更高版本,集群使用fd69::/112作为默认伪装子网。对于升级后的集群,默认伪装子网不会更改。

表10. ipsecConfig对象
字段 类型 描述

模式

字符串

指定IPsec实现的行为。必须是以下值之一

  • Disabled:集群节点上未启用IPsec。

  • External:已为与外部主机的网络流量启用IPsec。

  • Full:已为Pod流量和与外部主机的网络流量启用IPsec。

启用IPSec的示例OVN-Kubernetes配置
defaultNetwork:
  type: OVNKubernetes
  ovnKubernetesConfig:
    mtu: 1400
    genevePort: 6081
      ipsecConfig:
        mode: Full

用户管理的负载均衡器的服务

您可以将OpenShift Container Platform集群配置为使用用户管理的负载均衡器来代替默认负载均衡器。

配置用户管理的负载均衡器取决于您的供应商的负载均衡器。

本节中的信息和示例仅供指导。有关供应商负载均衡器的更多具体信息,请咨询供应商文档。

Red Hat支持以下用户管理负载均衡器的服务

  • 入口控制器

  • OpenShift API

  • OpenShift MachineConfig API

您可以选择是否要为用户管理的负载均衡器配置一项或所有这些服务。仅配置入口控制器服务是一种常见的配置选项。为了更好地理解每项服务,请查看以下图表

An image that shows an example network workflow of an Ingress Controller operating in an OpenShift Container Platform environment.
图1. 显示入口控制器在OpenShift Container Platform环境中运行的示例网络工作流程
An image that shows an example network workflow of an OpenShift API operating in an OpenShift Container Platform environment.
图2. 显示OpenShift API在OpenShift Container Platform环境中运行的示例网络工作流程
An image that shows an example network workflow of an OpenShift MachineConfig API operating in an OpenShift Container Platform environment.
图3. 显示OpenShift MachineConfig API在OpenShift Container Platform环境中运行的示例网络工作流程

以下配置选项受用户管理的负载均衡器支持

  • 使用节点选择器将入口控制器映射到特定节点集。您必须为此集合中的每个节点分配一个静态IP地址,或者将每个节点配置为从动态主机配置协议 (DHCP) 接收相同的IP地址。基础设施节点通常会收到此类配置。

  • 目标子网上的所有IP地址。此配置可以减少维护开销,因为您可以在这些网络中创建和销毁节点而无需重新配置负载均衡器目标。如果您使用机器集在较小的网络(例如/27/28)上部署入口Pod,则可以简化负载均衡器目标。

    您可以通过检查机器配置池的资源来列出网络中存在的所有IP地址。

在为OpenShift Container Platform集群配置用户管理的负载均衡器之前,请考虑以下信息

  • 对于前端IP地址,您可以使用相同的IP地址作为前端IP地址、入口控制器的负载均衡器和API负载均衡器。检查供应商文档以了解此功能。

  • 对于后端IP地址,请确保OpenShift Container Platform控制平面节点的IP地址在用户管理的负载均衡器的生命周期内不会更改。您可以通过完成以下操作之一来实现此目的

    • 为每个控制平面节点分配一个静态IP地址。

    • 配置每个节点以每次节点请求DHCP租约时从DHCP接收相同的IP地址。根据供应商的不同,DHCP租约可能采用IP预留或静态DHCP分配的形式。

  • 手动在入口控制器后端服务的用户管理负载均衡器中定义运行入口控制器的每个节点。例如,如果入口控制器移动到未定义的节点,则可能会发生连接中断。

配置用户管理的负载均衡器

您可以将OpenShift Container Platform集群配置为使用用户管理的负载均衡器来代替默认负载均衡器。

在配置用户管理的负载均衡器之前,请确保您已阅读“用户管理的负载均衡器的服务”部分。

阅读以下适用于您要为用户管理的负载均衡器配置的服务的先决条件。

MetalLB 在集群上运行,充当用户管理的负载均衡器。

OpenShift API 前提条件
  • 您已定义一个前端 IP 地址。

  • TCP 端口 6443 和 22623 在负载均衡器的前端 IP 地址上公开。请检查以下项目:

    • 端口 6443 提供对 OpenShift API 服务的访问。

    • 端口 22623 可以向节点提供启动配置。

  • 前端 IP 地址和端口 6443 可被系统中所有位于 OpenShift Container Platform 集群外部的用户访问。

  • 前端 IP 地址和端口 22623 仅可被 OpenShift Container Platform 节点访问。

  • 负载均衡器后端可以通过端口 6443 和 22623 与 OpenShift Container Platform 控制平面节点通信。

Ingress Controller 前提条件
  • 您已定义一个前端 IP 地址。

  • TCP 端口 443 和 80 在负载均衡器的前端 IP 地址上公开。

  • 前端 IP 地址、端口 80 和端口 443 可被系统中所有位于 OpenShift Container Platform 集群外部的用户访问。

  • 前端 IP 地址、端口 80 和端口 443 可被 OpenShift Container Platform 集群中运行的所有节点访问。

  • 负载均衡器后端可以通过端口 80、443 和 1936 与运行 Ingress Controller 的 OpenShift Container Platform 节点通信。

健康检查 URL 规范的先决条件

您可以通过设置健康检查 URL 来配置大多数负载均衡器,这些 URL 用于确定服务是可用还是不可用。OpenShift Container Platform 为 OpenShift API、机器配置 API 和 Ingress Controller 后端服务提供这些健康检查。

以下示例显示了前面列出的后端服务的健康检查规范

Kubernetes API 健康检查规范示例
Path: HTTPS:6443/readyz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
机器配置 API 健康检查规范示例
Path: HTTPS:22623/healthz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
Ingress Controller 健康检查规范示例
Path: HTTP:1936/healthz/ready
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 5
Interval: 10
步骤
  1. 配置 HAProxy Ingress Controller,以便您可以通过负载均衡器在端口 6443、22623、443 和 80 上访问集群。根据您的需求,您可以在 HAProxy 配置中指定单个子网的 IP 地址或多个子网的 IP 地址。

    列出一个子网的 HAProxy 配置示例
    # ...
    listen my-cluster-api-6443
        bind 192.168.1.100:6443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /readyz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:6443 check inter 10s rise 2 fall 2
    
    listen my-cluster-machine-config-api-22623
        bind 192.168.1.100:22623
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:22623 check inter 10s rise 2 fall 2
    
    listen my-cluster-apps-443
        bind 192.168.1.100:443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:443 check port 1936 inter 10s rise 2 fall 2
    
    listen my-cluster-apps-80
       bind 192.168.1.100:80
       mode tcp
       balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:80 check port 1936 inter 10s rise 2 fall 2
    # ...
    列出多个子网的 HAProxy 配置示例
    # ...
    listen api-server-6443
        bind *:6443
        mode tcp
          server master-00 192.168.83.89:6443 check inter 1s
          server master-01 192.168.84.90:6443 check inter 1s
          server master-02 192.168.85.99:6443 check inter 1s
          server bootstrap 192.168.80.89:6443 check inter 1s
    
    listen machine-config-server-22623
        bind *:22623
        mode tcp
          server master-00 192.168.83.89:22623 check inter 1s
          server master-01 192.168.84.90:22623 check inter 1s
          server master-02 192.168.85.99:22623 check inter 1s
          server bootstrap 192.168.80.89:22623 check inter 1s
    
    listen ingress-router-80
        bind *:80
        mode tcp
        balance source
          server worker-00 192.168.83.100:80 check inter 1s
          server worker-01 192.168.83.101:80 check inter 1s
    
    listen ingress-router-443
        bind *:443
        mode tcp
        balance source
          server worker-00 192.168.83.100:443 check inter 1s
          server worker-01 192.168.83.101:443 check inter 1s
    
    listen ironic-api-6385
        bind *:6385
        mode tcp
        balance source
          server master-00 192.168.83.89:6385 check inter 1s
          server master-01 192.168.84.90:6385 check inter 1s
          server master-02 192.168.85.99:6385 check inter 1s
          server bootstrap 192.168.80.89:6385 check inter 1s
    
    listen inspector-api-5050
        bind *:5050
        mode tcp
        balance source
          server master-00 192.168.83.89:5050 check inter 1s
          server master-01 192.168.84.90:5050 check inter 1s
          server master-02 192.168.85.99:5050 check inter 1s
          server bootstrap 192.168.80.89:5050 check inter 1s
    # ...
  2. 使用 `curl` CLI 命令验证用户管理的负载均衡器及其资源是否正常运行

    1. 通过运行以下命令并观察响应,验证 Kubernetes API 服务器资源是否可以访问集群机器配置 API

      $ curl https://<loadbalancer_ip_address>:6443/version --insecure

      如果配置正确,您将收到一个 JSON 对象作为响应

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
      }
    2. 通过运行以下命令并观察输出,验证机器配置服务器资源是否可以访问集群机器配置 API

      $ curl -v https://<loadbalancer_ip_address>:22623/healthz --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      Content-Length: 0
    3. 通过运行以下命令并观察输出,验证控制器是否可以通过端口 80 访问 Ingress Controller 资源

      $ curl -I -L -H "Host: console-openshift-console.apps.<cluster_name>.<base_domain>" http://<load_balancer_front_end_IP_address>

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.ocp4.private.opequon.net/
      cache-control: no-cache
    4. 通过运行以下命令并观察输出,验证控制器是否可以通过端口 443 访问 Ingress Controller 资源

      $ curl -I -L --insecure --resolve console-openshift-console.apps.<cluster_name>.<base_domain>:443:<Load Balancer Front End IP Address> https://console-openshift-console.apps.<cluster_name>.<base_domain>

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
  3. 将集群的 DNS 记录配置为指向用户管理的负载均衡器的前端 IP 地址。您必须更新集群 API 和通过负载均衡器的应用程序的 DNS 服务器记录。

    修改后的 DNS 记录示例
    <load_balancer_ip_address>  A  api.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End
    <load_balancer_ip_address>   A apps.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End

    每个 DNS 记录的传播可能需要一些时间才能可用。请确保每个 DNS 记录都已传播后再进行验证。

  4. 要使您的 OpenShift Container Platform 集群使用用户管理的负载均衡器,您必须在集群的 `install-config.yaml` 文件中指定以下配置

    # ...
    platform:
      vsphere:
        loadBalancer:
          type: UserManaged (1)
          apiVIPs:
          - <api_ip> (2)
          ingressVIPs:
          - <ingress_ip> (3)
    # ...
    1 为 `type` 参数设置 `UserManaged` 以指定集群的用户管理的负载均衡器。该参数默认为 `OpenShiftManagedDefault`,表示默认的内部负载均衡器。对于在 `openshift-kni-infra` 命名空间中定义的服务,用户管理的负载均衡器可以将 `coredns` 服务部署到集群中的 Pod,但会忽略 `keepalived` 和 `haproxy` 服务。
    2 指定用户管理的负载均衡器时所需的参数。指定用户管理的负载均衡器的公共 IP 地址,以便 Kubernetes API 可以与用户管理的负载均衡器通信。
    3 指定用户管理的负载均衡器时所需的参数。指定用户管理的负载均衡器的公共 IP 地址,以便用户管理的负载均衡器可以管理集群的入口流量。
验证
  1. 使用 `curl` CLI 命令验证用户管理的负载均衡器和 DNS 记录配置是否正常运行

    1. 通过运行以下命令并观察输出,验证您是否可以访问集群 API

      $ curl https://api.<cluster_name>.<base_domain>:6443/version --insecure

      如果配置正确,您将收到一个 JSON 对象作为响应

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
        }
    2. 通过运行以下命令并观察输出,验证您是否可以访问集群机器配置

      $ curl -v https://api.<cluster_name>.<base_domain>:22623/healthz --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      Content-Length: 0
    3. 通过运行以下命令并观察输出,验证您是否可以通过端口 80 访问每个集群应用程序

      $ curl http://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.<cluster-name>.<base domain>/
      cache-control: no-cacheHTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=39HoZgztDnzjJkq/JuLJMeoKNXlfiVv2YgZc09c3TBOBU4NI6kDXaJH1LdicNhN1UsQWzon4Dor9GWGfopaTEQ==; Path=/; Secure
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Tue, 17 Nov 2020 08:42:10 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=9b714eb87e93cf34853e87a92d6894be; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
    4. 通过运行以下命令并观察输出,验证您是否可以通过端口 443 访问每个集群应用程序

      $ curl https://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private

部署集群

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

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

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

  • 您已验证主机上的云提供商帐户具有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示一条错误消息,其中显示缺少的权限。

  • 可选:在创建集群之前,配置外部负载均衡器以代替默认负载均衡器。

    您不需要为安装程序指定 API 和 Ingress 静态地址。如果您选择此配置,则必须采取其他措施来定义接受来自每个引用的 vSphere 子网的 IP 地址的网络目标。请参阅“配置用户管理的负载均衡器”部分。

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

    $ ./openshift-install create cluster --dir <installation_directory> \ (1)
        --log-level=info (2)
    
    1 对于 `<installation_directory>`,请指定您自定义的 `./install-config.yaml` 文件的位置。
    2 要查看不同的安装详细信息,请指定 `warn`、`debug` 或 `error` 来代替 `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 配置文件,您可以避免在安装期间证书更新运行时安装失败。

使用 CLI 登录集群

您可以通过导出集群kubeconfig文件以默认系统用户的身份登录到您的集群。kubeconfig文件包含集群信息,CLI 使用这些信息将客户端连接到正确的集群和API服务器。该文件特定于某个集群,并在OpenShift Container Platform安装期间创建。

先决条件
  • 您已部署了一个OpenShift Container Platform集群。

  • 您已安装了oc CLI。

步骤
  1. 导出kubeadmin凭据

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig (1)
    1 对于<installation_directory>,请指定您存储安装文件的目录的路径。
  2. 验证您可以使用导出的配置成功运行oc命令

    $ oc whoami
    示例输出
    system:admin

创建注册表存储

安装集群后,必须为注册表 Operator 创建存储。

安装期间移除镜像注册表

在不提供可共享对象存储的平台上,OpenShift Image Registry Operator 将自身引导为Removed。这允许openshift-installer在这些平台类型上完成安装。

安装后,必须编辑 Image Registry Operator 配置,将managementStateRemoved切换到Managed。完成后,必须配置存储。

镜像注册表存储配置

对于不提供默认存储的平台,Image Registry Operator 最初不可用。安装后,必须配置注册表以使用存储,以便使注册表 Operator 可用。

显示了配置持久卷的说明,这是生产集群所必需的。在适用的情况下,将显示将空目录配置为存储位置的说明,这仅适用于非生产集群。

提供了其他说明,用于通过在升级期间使用Recreate滚动策略来允许镜像注册表使用块存储类型。

为VMware vSphere配置注册表存储

作为集群管理员,安装后必须配置注册表以使用存储。

先决条件
  • 集群管理员权限。

  • VMware vSphere 上的集群。

  • 为您的集群预配的持久性存储,例如 Red Hat OpenShift Data Foundation。

    当您只有一个副本时,OpenShift Container Platform 支持镜像注册表存储的ReadWriteOnce访问。ReadWriteOnce访问还要求注册表使用Recreate滚动策略。要部署支持高可用性的具有两个或更多副本的镜像注册表,需要ReadWriteMany访问。

  • 必须具有“100Gi”容量。

测试表明,使用 RHEL 上的 NFS 服务器作为核心服务的存储后端存在问题。这包括 OpenShift Container Registry 和 Quay、用于监控存储的 Prometheus 以及用于日志存储的 Elasticsearch。因此,不建议使用 RHEL NFS 支持核心服务使用的 PV。

市场上的其他 NFS 实现可能没有这些问题。请联系各个 NFS 实现供应商,以获取有关可能针对这些 OpenShift Container Platform 核心组件完成的任何测试的更多信息。

步骤
  1. 要配置注册表以使用存储,请更改configs.imageregistry/cluster资源中的spec.storage.pvc

    使用共享存储时,请查看您的安全设置以防止外部访问。

  2. 验证您没有注册表 pod

    $ oc get pod -n openshift-image-registry -l docker-registry=default
    示例输出
    No resourses found in openshift-image-registry namespace

    如果您的输出中确实有注册表 pod,则无需继续执行此过程。

  3. 检查注册表配置

    $ oc edit configs.imageregistry.operator.openshift.io
    示例输出
    storage:
      pvc:
        claim: (1)
    1 保留claim字段为空白,以允许自动创建image-registry-storage持久卷声明 (PVC)。PVC 是根据默认存储类生成的。但是,请注意,默认存储类可能提供 ReadWriteOnce (RWO) 卷,例如 RADOS 块设备 (RBD),当您复制到多个副本时,这可能会导致问题。
  4. 检查clusteroperator状态

    $ oc get clusteroperator image-registry
    示例输出
    NAME             VERSION                              AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    image-registry   4.7                                  True        False         False      6h50m

为VMware vSphere配置块注册表存储

要允许镜像注册表在升级期间作为集群管理员使用块存储类型(例如 vSphere 虚拟机磁盘 (VMDK)),可以使用Recreate滚动策略。

块存储卷受支持,但不建议在生产集群中与镜像注册表一起使用。在块存储上配置注册表的安装不是高可用的,因为注册表不能拥有多个副本。

步骤
  1. 输入以下命令以将镜像注册表存储设置为块存储类型,修补注册表以便它使用Recreate滚动策略,并仅使用1个副本运行

    $ oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}'
  2. 为块存储设备预配 PV,并为该卷创建 PVC。请求的块卷使用 ReadWriteOnce (RWO) 访问模式。

    1. 创建一个包含以下内容的pvc.yaml文件,以定义 VMware vSphere PersistentVolumeClaim对象

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: image-registry-storage (1)
        namespace: openshift-image-registry (2)
      spec:
        accessModes:
        - ReadWriteOnce (3)
        resources:
          requests:
            storage: 100Gi (4)
      1 代表PersistentVolumeClaim对象的唯一名称。
      2 PersistentVolumeClaim对象的命名空间,即openshift-image-registry
      3 持久卷声明的访问模式。使用ReadWriteOnce,卷可以由单个节点以读写权限挂载。
      4 持久卷声明的大小。
    2. 输入以下命令以从文件创建PersistentVolumeClaim对象

      $ oc create -f pvc.yaml -n openshift-image-registry
  3. 输入以下命令以编辑注册表配置,使其引用正确的 PVC

    $ oc edit config.imageregistry.operator.openshift.io -o yaml
    示例输出
    storage:
      pvc:
        claim: (1)
    1 通过创建自定义 PVC,您可以将claim字段保留为空白,以默认自动创建image-registry-storage PVC。

有关配置注册表存储以使其引用正确的 PVC 的说明,请参阅为 vSphere 配置注册表

OpenShift Container Platform 的遥测访问

在 OpenShift Container Platform 4.17 中,默认情况下运行的遥测服务(用于提供有关集群健康状况和更新成功的指标)需要互联网访问。如果您的集群连接到互联网,则遥测会自动运行,并且您的集群会注册到OpenShift Cluster Manager

确认您的OpenShift Cluster Manager清单正确后(由遥测自动维护或手动使用 OpenShift Cluster Manager 维护),使用订阅监控来跟踪您在帐户或多集群级别上的 OpenShift Container Platform 订阅。

其他资源

配置控制平面上的网络组件

您可以配置网络组件,使其只在控制平面节点上运行。默认情况下,OpenShift Container Platform 允许机器配置池中的任何节点托管ingressVIP虚拟 IP 地址。但是,某些环境会在与控制平面节点不同的子网中部署计算节点,这需要将ingressVIP虚拟 IP 地址配置为在控制平面节点上运行。

您可以通过在单独的子网中创建计算机器集来扩展远程节点。

在单独的子网中部署远程节点时,必须将ingressVIP虚拟 IP 地址专门放置在控制平面节点上。

Installer-provisioned networking
步骤
  1. 切换到存储install-config.yaml文件的目录

    $ cd ~/clusterconfigs
  2. 切换到manifests子目录

    $ cd manifests
  3. 创建一个名为cluster-network-avoid-workers-99-config.yaml的文件

    $ touch cluster-network-avoid-workers-99-config.yaml
  4. 在编辑器中打开cluster-network-avoid-workers-99-config.yaml文件,并输入描述 Operator 配置的自定义资源 (CR)

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 50-worker-fix-ipi-rwn
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
            - path: /etc/kubernetes/manifests/keepalived.yaml
              mode: 0644
              contents:
                source: data:,

    此清单将ingressVIP虚拟 IP 地址放置在控制平面节点上。此外,此清单仅在控制平面节点上部署以下进程:

    • openshift-ingress-operator

    • keepalived

  5. 保存cluster-network-avoid-workers-99-config.yaml文件。

  6. 创建一个manifests/cluster-ingress-default-ingresscontroller.yaml文件

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: default
      namespace: openshift-ingress-operator
    spec:
      nodePlacement:
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/master: ""
  7. 建议备份manifests目录。安装程序在创建集群时会删除manifests/目录。

  8. 修改cluster-scheduler-02-config.yml清单,通过将mastersSchedulable字段设置为true来使控制平面节点可调度。默认情况下,控制平面节点不可调度。例如:

    $ sed -i "s;mastersSchedulable: false;mastersSchedulable: true;g" clusterconfigs/manifests/cluster-scheduler-02-config.yml

    如果完成此过程后控制平面节点仍然不可调度,则集群部署将失败。

后续步骤