×

先决条件

私有集群

您可以部署不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,并且对互联网不可见。

默认情况下,OpenShift Container Platform 预配为使用公共可访问的 DNS 和端点。部署集群时,私有集群会将 DNS、Ingress 控制器和 API 服务器设置为私有。这意味着集群资源只能从内部网络访问,并且对互联网不可见。

如果集群有任何公共子网,则管理员创建的负载均衡器服务可能可以公开访问。为确保集群安全,请验证这些服务是否明确注释为私有。

要部署私有集群,您必须

  • 使用满足您需求的现有网络。您的集群资源可能与网络上的其他集群共享。

  • 从具有访问权限的机器进行部署

    • 您进行配置的云的API服务。

    • 您进行配置的网络上的主机。

    • 互联网以获取安装介质。

您可以使用任何满足这些访问要求并遵循您公司准则的机器。例如,这台机器可以是您云网络上的堡垒主机,也可以是通过VPN访问网络的机器。

GCP中的私有集群

要在Google Cloud Platform (GCP)上创建私有集群,您必须提供现有的私有VPC和子网来托管集群。安装程序还必须能够解析集群所需的DNS记录。安装程序仅为内部流量配置Ingress Operator和API服务器。

集群仍然需要访问互联网才能访问GCP API。

安装私有集群时,不需要或不创建以下项目

  • 公有子网

  • 支持公有入口的公有网络负载均衡器

  • 与集群的baseDomain匹配的公有DNS区域

安装程序确实使用您指定的baseDomain来创建私有DNS区域和集群所需的记录。集群配置为Operator不为集群创建公有记录,并且所有集群机器都放置在您指定的私有子网中。

由于无法基于源标签限制对外部负载均衡器的访问,因此私有集群仅使用内部负载均衡器来允许访问内部实例。

内部负载均衡器依赖于实例组,而不是网络负载均衡器使用的目标池。安装程序为每个区域创建实例组,即使该组中没有实例。

  • 集群IP地址仅为内部地址。

  • 一条转发规则同时管理Kubernetes API和机器配置服务器端口。

  • 后端服务由每个区域的实例组以及引导实例组(如果存在)组成。

  • 防火墙使用一条仅基于内部源范围的规则。

限制

由于负载均衡器功能的差异,机器配置服务器的健康检查/healthz不会运行。两个内部负载均衡器无法共享单个IP地址,但两个网络负载均衡器可以共享单个外部IP地址。相反,实例的健康状况完全由端口6443上的/readyz检查确定。

关于使用自定义VPC

在OpenShift Container Platform 4.17中,您可以将集群部署到Google Cloud Platform (GCP)中的现有VPC。如果您这样做,还必须使用VPC内的现有子网和路由规则。

通过将OpenShift Container Platform部署到现有的GCP VPC,您也许能够避免新帐户中的限制约束,或者更容易遵守公司准则设定的操作约束。如果您无法获得创建VPC所需的 инфраструктура 创建权限,则这是一个不错的选择。

使用您的VPC的要求

安装程序将不再创建以下组件

  • VPC

  • 子网

  • 云路由器

  • 云NAT

  • NAT IP地址

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

您的VPC和子网必须满足以下特性

  • VPC必须与您将OpenShift Container Platform集群部署到的GCP项目相同。

  • 为了允许从控制平面和计算机器访问互联网,您必须在子网上配置云NAT以允许向其发出传出流量。这些机器没有公有地址。即使您不需要访问互联网,也必须允许向VPC网络发出传出流量以获取安装程序和镜像。由于无法在共享子网上配置多个云NAT,因此安装程序无法配置它。

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

  • 您指定的所有子网都存在并属于您指定的VPC。

  • 子网CIDR属于机器CIDR。

  • 您必须提供一个子网来部署集群控制平面和计算机器。您可以对这两种机器类型使用相同的子网。

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

权限划分

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

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

集群之间的隔离

如果您将OpenShift Container Platform部署到现有网络,则集群服务的隔离将通过引用集群中机器的集群基础架构 ID 的防火墙规则来保留。仅允许集群内的流量。

如果您将多个集群部署到相同的VPC,则以下组件可能在集群之间共享访问权限

  • API,它在具有外部发布策略的情况下全局可用,或者在内部发布策略中在整个网络中可用

  • 调试工具,例如为SSH和ICMP访问而对机器CIDR开放的VM实例上的端口

OpenShift Container Platform 的互联网访问

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

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

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

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

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

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

生成用于集群节点 SSH 访问的密钥对

在 OpenShift Container Platform 安装过程中,您可以向安装程序提供 SSH 公钥。该密钥通过 Ignition 配置文件传递到 Red Hat Enterprise Linux CoreOS (RHCOS) 节点,并用于对节点的 SSH 访问进行身份验证。该密钥将添加到每个节点上 `core` 用户的 `~/.ssh/authorized_keys` 列表中,从而启用无需密码的身份验证。

密钥传递到节点后,您可以使用密钥对以 `core` 用户身份通过 SSH 登录到 RHCOS 节点。要通过 SSH 访问节点,必须由本地用户的 SSH 管理私钥身份。

如果您想通过 SSH 登录到集群节点以执行安装调试或灾难恢复,则必须在安装过程中提供 SSH 公钥。`./openshift-install gather` 命令也需要在集群节点上设置 SSH 公钥。

在需要灾难恢复和调试的生产环境中,请勿跳过此过程。

您必须使用本地密钥,而不是使用平台特定方法(例如 AWS 密钥对)配置的密钥。

步骤
  1. 如果您本地机器上没有现有的 SSH 密钥对用于对集群节点进行身份验证,请创建一个。例如,在使用 Linux 操作系统的计算机上,运行以下命令:

    $ ssh-keygen -t ed25519 -N '' -f <path>/<file_name> (1)
    1 指定新 SSH 密钥的路径和文件名,例如 `~/.ssh/id_ed25519`。如果您有现有的密钥对,请确保您的公钥位于您的 `~/.ssh` 目录中。

    如果您计划安装使用已提交给 NIST 以进行 FIPS 140-2/140-3 验证的 RHEL 加密库的 OpenShift Container Platform 集群(仅限于 `x86_64`、`ppc64le` 和 `s390x` 架构),请不要创建使用 `ed25519` 算法的密钥。而是创建使用 `rsa` 或 `ecdsa` 算法的密钥。

  2. 查看 SSH 公钥

    $ cat <path>/<file_name>.pub

    例如,运行以下命令查看 `~/.ssh/id_ed25519.pub` 公钥:

    $ cat ~/.ssh/id_ed25519.pub
  3. 如果尚未添加,请将 SSH 私钥身份添加到本地用户的 SSH 代理。SSH 代理对密钥的管理对于对集群节点进行无需密码的 SSH 身份验证是必需的,或者如果您想使用 `./openshift-install gather` 命令。

    在某些发行版中,默认的 SSH 私钥身份(例如 `~/.ssh/id_rsa` 和 `~/.ssh/id_dsa`)会自动管理。

    1. 如果本地用户的 `ssh-agent` 进程尚未运行,请将其作为后台任务启动:

      $ eval "$(ssh-agent -s)"
      示例输出
      Agent pid 31874

      如果您的集群处于 FIPS 模式,则只能使用符合 FIPS 的算法来生成 SSH 密钥。密钥必须是 RSA 或 ECDSA。

  4. 将您的 SSH 私钥添加到 `ssh-agent`

    $ ssh-add <path>/<file_name> (1)
    1 指定 SSH 私钥的路径和文件名,例如 `~/.ssh/id_ed25519`
    示例输出
    Identity added: /home/<you>/<path>/<file_name> (<computer_name>)
后续步骤
  • 安装 OpenShift Container Platform 时,请向安装程序提供 SSH 公钥。

获取安装程序

在安装 OpenShift Container Platform 之前,请在您用于安装的主机上下载安装文件。

先决条件
  • 您需要一台运行 Linux 或 macOS 的计算机,并具有 500 MB 的本地磁盘空间。

步骤
  1. 访问 Red Hat Hybrid Cloud Console 上的 集群类型 页面。如果您有 Red Hat 帐户,请使用您的凭据登录。如果没有,请创建一个帐户。

  2. 从页面的“自行运行”部分选择您的基础架构提供商。

  3. 从“OpenShift 安装程序”下的下拉菜单中选择您的主机操作系统和架构,然后单击“下载安装程序”。

  4. 将下载的文件放置到您想要存储安装配置文件的目录中。

    • 安装程序会在您用于安装集群的计算机上创建多个文件。安装集群完成后,您必须保留安装程序和安装程序创建的文件。这两个文件都是删除集群所必需的。

    • 即使集群在安装过程中失败,删除安装程序创建的文件也不会删除您的集群。要删除集群,请完成针对您的特定云提供商的 OpenShift Container Platform 卸载过程。

  5. 解压安装程序。例如,在使用 Linux 操作系统的计算机上,运行以下命令:

    $ tar -xvf openshift-install-linux.tar.gz
  6. 从 Red Hat OpenShift 集群管理器下载您的安装 pull 密钥。此 pull 密钥允许您对包含的授权机构提供的服务进行身份验证,包括 Quay.io,该服务提供 OpenShift Container Platform 组件的容器镜像。

或者,您可以从 Red Hat 客户门户 检索安装程序,您可以在其中指定要下载的安装程序版本。但是,您必须拥有有效的订阅才能访问此页面。

手动创建安装配置文件

安装集群需要您手动创建安装配置文件。

先决条件
  • 您本地机器上有一个 SSH 公钥,需要提供给安装程序。该密钥将用于对集群节点进行 SSH 身份验证,以便进行调试和灾难恢复。

  • 您已获得 OpenShift Container Platform 安装程序和集群的 pull 密钥。

步骤
  1. 创建一个安装目录来存储所需的安装资源:

    $ mkdir <installation_directory>

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

  2. 自定义提供的示例 `install-config.yaml` 文件模板,并将其保存到 `` 中。

    您必须将此配置文件命名为 `install-config.yaml`。

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

    在安装过程的下一步中将使用 `install-config.yaml` 文件。您现在必须对其进行备份。

集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

表 1. 最低资源要求
机器 操作系统 vCPU [1] 虚拟 RAM 存储 每秒输入/输出次数 (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 对磁盘性能非常敏感,建议使用更快的存储,特别是对于控制平面节点上的 etcd,它需要 10 毫秒的 p99 fsync 持续时间。请注意,在许多云平台上,存储大小和 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 架构

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

其他资源

经过测试的 GCP 实例类型

以下 Google Cloud Platform 实例类型已通过 OpenShift Container Platform 测试。

机器系列
  • A2

  • A3

  • C2

  • C2D

  • C3

  • C3D

  • E2

  • M1

  • N1

  • N2

  • N2D

  • N4

  • Tau T2D

64 位 ARM 架构上经过测试的 GCP 实例类型

以下 Google Cloud Platform (GCP) 64 位 ARM 实例类型已通过 OpenShift Container Platform 测试。

64 位 ARM 机器系列
  • Tau T2A

使用自定义机器类型

支持使用自定义机器类型安装 OpenShift Container Platform 集群。

使用自定义机器类型时,请考虑以下几点

  • 与预定义的实例类型类似,自定义机器类型必须满足控制平面和计算机器的最低资源要求。更多信息,请参见“集群安装的最低资源要求”。

  • 自定义机器类型的名称必须符合以下语法

    custom-<cpu数量>-<内存大小(MB)>

    例如,custom-6-20480

作为安装过程的一部分,您需要在 install-config.yaml 文件中指定自定义机器类型。

包含自定义机器类型的 install-config.yaml 文件示例
compute:
- architecture: amd64
  hyperthreading: Enabled
  name: worker
  platform:
    gcp:
      type: custom-6-20480
  replicas: 2
controlPlane:
  architecture: amd64
  hyperthreading: Enabled
  name: master
  platform:
    gcp:
      type: custom-6-20480
  replicas: 3

启用 Shielded VM

安装集群时,您可以使用 Shielded VM。Shielded VM 具有额外的安全功能,包括安全启动、固件和完整性监控以及 rootkit 检测。更多信息,请参见 Google 关于 Shielded VM 的文档。

目前,64 位 ARM 架构的集群不支持 Shielded VM。

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

步骤
  • 在部署集群之前,使用文本编辑器编辑 install-config.yaml 文件,并添加以下片段之一

    1. 仅对控制平面机器使用 Shielded VM

      controlPlane:
        platform:
          gcp:
             secureBoot: Enabled
    2. 仅对计算机器使用 Shielded VM

      compute:
      - platform:
          gcp:
             secureBoot: Enabled
    3. 对所有机器使用 Shielded VM

      platform:
        gcp:
          defaultMachinePlatform:
             secureBoot: Enabled

启用 Confidential VM

安装集群时,您可以使用 Confidential VM。Confidential VM 在数据处理过程中对其进行加密。更多信息,请参见 Google 关于 Confidential Computing 的文档。您可以同时启用 Confidential VM 和 Shielded VM,尽管它们并不相互依赖。

目前,64 位 ARM 架构不支持 Confidential VM。

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

步骤
  • 在部署集群之前,使用文本编辑器编辑 install-config.yaml 文件,并添加以下片段之一

    1. 仅对控制平面机器使用 Confidential VM

      controlPlane:
        platform:
          gcp:
             confidentialCompute: Enabled (1)
             type: n2d-standard-8 (2)
             onHostMaintenance: Terminate (3)
      1 启用 Confidential VM。
      2 指定支持 Confidential VM 的机器类型。Confidential VM 需要 N2D 或 C2D 系列的机器类型。有关支持的机器类型的更多信息,请参见 支持的操作系统和机器类型
      3 指定主机维护事件(例如硬件或软件更新)期间 VM 的行为。对于使用 Confidential VM 的机器,此值必须设置为 Terminate,这将停止 VM。Confidential VM 不支持实时 VM 迁移。
    2. 仅对计算机器使用 Confidential VM

      compute:
      - platform:
          gcp:
             confidentialCompute: Enabled
             type: n2d-standard-8
             onHostMaintenance: Terminate
    3. 对所有机器使用 Confidential VM

      platform:
        gcp:
          defaultMachinePlatform:
             confidentialCompute: Enabled
             type: n2d-standard-8
             onHostMaintenance: Terminate

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

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

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

apiVersion: v1
baseDomain: example.com (1)
credentialsMode: Mint (2)
controlPlane:  (3) (4)
  hyperthreading: Enabled (5)
  name: master
  platform:
    gcp:
      type: n2-standard-4
      zones:
      - us-central1-a
      - us-central1-c
      osDisk:
        diskType: pd-ssd
        diskSizeGB: 1024
        encryptionKey: (6)
          kmsKey:
            name: worker-key
            keyRing: test-machine-keys
            location: global
            projectID: project-id
      tags: (7)
      - control-plane-tag1
      - control-plane-tag2
      osImage: (8)
        project: example-project-name
        name: example-image-name
  replicas: 3
compute:  (3) (4)
- hyperthreading: Enabled (5)
  name: worker
  platform:
    gcp:
      type: n2-standard-4
      zones:
      - us-central1-a
      - us-central1-c
      osDisk:
        diskType: pd-standard
        diskSizeGB: 128
        encryptionKey: (6)
          kmsKey:
            name: worker-key
            keyRing: test-machine-keys
            location: global
            projectID: project-id
        tags: (7)
        - compute-tag1
        - compute-tag2
        osImage: (8)
          project: example-project-name
          name: example-image-name
  replicas: 3
metadata:
  name: test-cluster (1)
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes (9)
  serviceNetwork:
  - 172.30.0.0/16
platform:
  gcp:
    projectID: openshift-production (1)
    region: us-central1 (1)
    defaultMachinePlatform:
      tags: (7)
      - global-tag1
      - global-tag2
      osImage: (8)
        project: example-project-name
        name: example-image-name
    network: existing_vpc (10)
    controlPlaneSubnet: control_plane_subnet (11)
    computeSubnet: compute_subnet (12)
pullSecret: '{"auths": ...}' (1)
fips: false (13)
sshKey: ssh-ed25519 AAAA... (14)
publish: Internal (15)
1 必需。安装程序会提示您输入此值。
2 可选:添加此参数以强制 Cloud Credential Operator (CCO) 使用指定的模式。默认情况下,CCO 使用 kube-system 命名空间中的根凭据来动态尝试确定凭据的功能。有关 CCO 模式 的详细信息,请参阅《身份验证和授权》指南中的“关于 Cloud Credential Operator”部分。
3 如果您不提供这些参数和值,安装程序将提供默认值。
4 controlPlane 部分是一个单映射,但 compute 部分是一系列映射。为了满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,而 controlPlane 部分的第一行则不能。只使用一个控制平面池。
5 是否启用或禁用同时多线程处理或 超线程。默认情况下,启用同时多线程处理以提高机器核心的性能。您可以通过将参数值设置为 Disabled 来禁用它。如果您在某些集群机器中禁用了同时多线程处理,则必须在所有集群机器中禁用它。

如果您禁用同时多线程,请确保您的容量规划考虑到了机器性能的显著下降。如果禁用同时多线程,请为您的机器使用更大的机器类型,例如n1-standard-8

6 可选:自定义加密密钥部分,用于加密虚拟机和持久卷。您的默认计算服务帐户必须具有使用您的 KMS 密钥的权限,并分配正确的 IAM 角色。默认服务帐户名称遵循service-<project_number>@compute-system.iam.gserviceaccount.com模式。有关为您的服务帐户授予正确权限的更多信息,请参阅“机器管理”→“创建计算机器集”→“在 GCP 上创建计算机器集”。
7 可选:一组要应用于控制平面或计算机器集的网络标签。platform.gcp.defaultMachinePlatform.tags参数将同时应用于控制平面和计算机器。如果设置了compute.platform.gcp.tagscontrolPlane.platform.gcp.tags参数,则它们将覆盖platform.gcp.defaultMachinePlatform.tags参数。
8 可选:应用于引导控制平面和计算机器的自定义 Red Hat Enterprise Linux CoreOS (RHCOS)。platform.gcp.defaultMachinePlatform.osImage下的projectname参数同时适用于控制平面和计算机器。如果设置了controlPlane.platform.gcp.osImagecompute.platform.gcp.osImage下的projectname参数,则它们将覆盖platform.gcp.defaultMachinePlatform.osImage参数。
9 要安装的集群网络插件。默认值OVNKubernetes是唯一支持的值。
10 指定现有 VPC 的名称。
11 指定用于部署控制平面机器的现有子网的名称。该子网必须属于您指定的 VPC。
12 指定用于部署计算机器的现有子网的名称。该子网必须属于您指定的 VPC。
13 是否启用或禁用 FIPS 模式。默认情况下,FIPS 模式未启用。如果启用 FIPS 模式,则运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS (RHCOS) 机器将绕过默认的 Kubernetes 密码套件,而是使用 RHCOS 提供的密码模块。

要为您的集群启用 FIPS 模式,必须从配置为在 FIPS 模式下运行的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 上配置 FIPS 模式的更多信息,请参阅在 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 密码库。

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

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

15 如何发布集群的用户端点。将publish设置为Internal以部署私有集群,该集群无法从互联网访问。默认值为External

在 GCP 上创建具有全局访问权限的 Ingress Controller

您可以创建一个具有对 Google Cloud Platform (GCP) 集群的全局访问权限的 Ingress Controller。全局访问权限仅适用于使用内部负载均衡器的 Ingress Controller。

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

步骤

在新 GCP 集群上创建具有全局访问权限的 Ingress Controller。

  1. 更改到包含安装程序的目录并创建清单文件

    $ ./openshift-install create manifests --dir <installation_directory> (1)
    1 对于<installation_directory>,请指定包含集群install-config.yaml文件的目录名称。
  2. <installation_directory>/manifests/目录中创建一个名为cluster-ingress-default-ingresscontroller.yaml的文件

    $ touch <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml (1)
    1 对于<installation_directory>,请指定包含集群manifests/目录的目录名称。

    创建文件后,manifests/目录中将包含几个网络配置文件,如下所示

    $ ls <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml
    示例输出
    cluster-ingress-default-ingresscontroller.yaml
  3. 在编辑器中打开cluster-ingress-default-ingresscontroller.yaml文件,并输入描述所需运算符配置的自定义资源 (CR)

    clientAccess配置示例设置为Global
      apiVersion: operator.openshift.io/v1
      kind: IngressController
      metadata:
        name: default
        namespace: openshift-ingress-operator
      spec:
        endpointPublishingStrategy:
          loadBalancer:
            providerParameters:
              gcp:
                clientAccess: Global (1)
              type: GCP
            scope: Internal          (2)
          type: LoadBalancerService
    1 gcp.clientAccess设置为Global
    2 全局访问权限仅适用于使用内部负载均衡器的 Ingress Controller。

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

生产环境可以拒绝直接访问互联网,而是提供 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对象,但它将具有nil spec

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

安装OpenShift CLI

您可以安装OpenShift CLI(oc)以通过命令行界面与OpenShift Container Platform交互。您可以在Linux、Windows或macOS上安装oc

如果您安装了早期版本的oc,则无法使用它完成OpenShift Container Platform 4.17中的所有命令。请下载并安装新版本的oc

在Linux上安装OpenShift CLI

您可以使用以下步骤在Linux上安装OpenShift CLI(oc)二进制文件。

步骤
  1. 导航到Red Hat客户门户网站上的OpenShift Container Platform下载页面

  2. 从“**产品变体**”下拉列表中选择体系结构。

  3. 从“**版本**”下拉列表中选择相应的版本。

  4. 单击“**立即下载**”(位于“**OpenShift v4.17 Linux客户端**”条目旁边)并保存文件。

  5. 解压缩存档

    $ tar xvf <file>
  6. oc二进制文件放在PATH中的目录中。

    要检查您的PATH,请执行以下命令

    $ echo $PATH
验证
  • 安装OpenShift CLI后,可以使用oc命令。

    $ oc <command>

在Windows上安装OpenShift CLI

您可以使用以下步骤在Windows上安装OpenShift CLI(oc)二进制文件。

步骤
  1. 导航到Red Hat客户门户网站上的OpenShift Container Platform下载页面

  2. 从“**版本**”下拉列表中选择相应的版本。

  3. 单击“**立即下载**”(位于“**OpenShift v4.17 Windows客户端**”条目旁边)并保存文件。

  4. 使用ZIP程序解压缩存档。

  5. oc二进制文件移动到PATH中的目录。

    要检查您的PATH,请打开命令提示符并执行以下命令

    C:\> path
验证
  • 安装OpenShift CLI后,可以使用oc命令。

    C:\> oc <command>

在macOS上安装OpenShift CLI

您可以使用以下步骤在macOS上安装OpenShift CLI(oc)二进制文件。

步骤
  1. 导航到Red Hat客户门户网站上的OpenShift Container Platform下载页面

  2. 从“**版本**”下拉列表中选择相应的版本。

  3. 单击“**立即下载**”(位于“**OpenShift v4.17 macOS客户端**”条目旁边)并保存文件。

    对于macOS arm64,请选择“**OpenShift v4.17 macOS arm64客户端**”条目。

  4. 解压缩存档。

  5. oc二进制文件移动到PATH上的目录。

    要检查您的PATH,请打开终端并执行以下命令

    $ echo $PATH
验证
  • 使用oc命令验证您的安装

    $ oc <command>

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

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

手动创建长期凭据

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

步骤
  1. 将以下细粒度权限添加到安装程序使用的GCP帐户

    所需的GCP权限
    • compute.machineTypes.list

    • compute.regions.list

    • compute.zones.list

    • dns.changes.create

    • dns.changes.get

    • dns.managedZones.create

    • dns.managedZones.delete

    • dns.managedZones.get

    • dns.managedZones.list

    • dns.networks.bindPrivateDNSZone

    • dns.resourceRecordSets.create

    • dns.resourceRecordSets.delete

    • dns.resourceRecordSets.list

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

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

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

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

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

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  5. 通过运行以下命令,从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: GCPProviderSpec
        predefinedRoles:
        - roles/storage.admin
        - roles/iam.serviceAccountUser
        skipServiceCheck: true
      ...
  6. 在您之前生成的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
          ...
      secretRef:
        name: <component_secret>
        namespace: <component_namespace>
      ...
    示例Secret对象
    apiVersion: v1
    kind: Secret
    metadata:
      name: <component_secret>
      namespace: <component_namespace>
    data:
      service_account.json: <base64_encoded_gcp_service_account_file>

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

配置GCP集群以使用短期凭据

要安装配置为使用GCP工作负载身份的集群,必须配置CCO实用程序并为您的集群创建所需的GCP资源。

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

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

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

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

  • 您已安装OpenShift CLI(oc)。

  • 您已向安装程序使用的 GCP 帐户添加了以下身份验证选项之一

    • **IAM 工作负载身份池管理员** 角色。

    • 以下细粒度权限

      所需的GCP权限
      • compute.projects.get

      • iam.googleapis.com/workloadIdentityPoolProviders.create

      • iam.googleapis.com/workloadIdentityPoolProviders.get

      • iam.googleapis.com/workloadIdentityPools.create

      • iam.googleapis.com/workloadIdentityPools.delete

      • iam.googleapis.com/workloadIdentityPools.get

      • iam.googleapis.com/workloadIdentityPools.undelete

      • iam.roles.create

      • iam.roles.delete

      • iam.roles.list

      • iam.roles.undelete

      • iam.roles.update

      • iam.serviceAccounts.create

      • iam.serviceAccounts.delete

      • iam.serviceAccounts.getIamPolicy

      • iam.serviceAccounts.list

      • iam.serviceAccounts.setIamPolicy

      • iam.workloadIdentityPoolProviders.get

      • iam.workloadIdentityPools.delete

      • resourcemanager.projects.get

      • resourcemanager.projects.getIamPolicy

      • resourcemanager.projects.setIamPolicy

      • storage.buckets.create

      • storage.buckets.delete

      • storage.buckets.get

      • storage.buckets.getIamPolicy

      • storage.buckets.setIamPolicy

      • storage.objects.create

      • storage.objects.delete

      • storage.objects.list

步骤
  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.

使用 Cloud Credential Operator 实用程序创建 GCP 资源

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

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

先决条件

您必须拥有

  • 已提取并准备好的ccoctl二进制文件。

步骤
  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工具处理所有CredentialsRequest对象,运行以下命令

    $ ccoctl gcp create-all \
      --name=<name> \(1)
      --region=<gcp_region> \(2)
      --project=<gcp_project_id> \(3)
      --credentials-requests-dir=<path_to_credentials_requests_directory> (4)
    1 指定用于跟踪的所有已创建 GCP 资源的用户定义名称。
    2 指定将创建云资源的 GCP 区域。
    3 指定将创建云资源的 GCP 项目 ID。
    4 指定包含用于创建 GCP 服务帐户的CredentialsRequest清单文件的目录。

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

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

    $ ls <path_to_ccoctl_output_dir>/manifests
    示例输出
    cluster-authentication-02-config.yaml
    openshift-cloud-controller-manager-gcp-ccm-cloud-credentials-credentials.yaml
    openshift-cloud-credential-operator-cloud-credential-operator-gcp-ro-creds-credentials.yaml
    openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml
    openshift-cluster-api-capg-manager-bootstrap-credentials-credentials.yaml
    openshift-cluster-csi-drivers-gcp-pd-cloud-credentials-credentials.yaml
    openshift-image-registry-installer-cloud-credentials-credentials.yaml
    openshift-ingress-operator-cloud-credentials-credentials.yaml
    openshift-machine-api-gcp-cloud-credentials-credentials.yaml

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

合并 Cloud Credential Operator 实用程序清单

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

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

  • 您已配置 Cloud Credential Operator 实用程序 (ccoctl)。

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

步骤
  1. 将以下细粒度权限添加到安装程序使用的GCP帐户

    所需的GCP权限
    • compute.machineTypes.list

    • compute.regions.list

    • compute.zones.list

    • dns.changes.create

    • dns.changes.get

    • dns.managedZones.create

    • dns.managedZones.delete

    • dns.managedZones.get

    • dns.managedZones.list

    • dns.networks.bindPrivateDNSZone

    • dns.resourceRecordSets.create

    • dns.resourceRecordSets.delete

    • dns.resourceRecordSets.list

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

    示例配置文件片段
    apiVersion: v1
    baseDomain: example.com
    credentialsMode: Manual
    # ...
  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 安装程序和集群的拉取密钥。

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

步骤
  1. 删除任何不使用您为集群配置的 GCP 帐户的服务帐户密钥,并且存储在以下位置的现有 GCP 凭据

    • GOOGLE_CREDENTIALSGOOGLE_CLOUD_KEYFILE_JSONGCLOUD_KEYFILE_JSON环境变量

    • ~/.gcp/osServiceAccount.json文件

    • gcloud cli默认凭据

  2. 更改为包含安装程序的目录并初始化集群部署

    $ ./openshift-install create cluster --dir <installation_directory> \ (1)
        --log-level=info (2)
    
    1 对于<installation_directory>,请指定自定义./install-config.yaml文件的位置。
    2 要查看不同的安装详细信息,请指定warndebugerror代替info
  3. 可选:您可以减少用于安装集群的服务帐户的权限数量。

    • 如果您为服务帐户分配了Owner角色,则可以删除该角色并将其替换为Viewer角色。

    • 如果您包含了Service Account Key Admin角色,则可以将其删除。

验证

集群部署成功完成后

  • 终端将显示访问集群的说明,包括指向 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 小时内使用它们,因为在安装集群后的 16 到 22 小时之间,24 小时的证书会轮换。通过在 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 对于<安装目录>,请指定您存储安装文件的目录路径。
  2. 验证您可以使用导出的配置成功运行oc命令

    $ oc whoami
    示例输出
    system:admin
其他资源
  • 有关访问和了解 OpenShift Container Platform Web 控制台的更多详细信息,请参阅访问 Web 控制台

OpenShift Container Platform 的遥测访问

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

确认您的OpenShift 集群管理器清单正确无误后(无论是由遥测自动维护还是手动使用 OpenShift 集群管理器维护),请使用订阅监控来跟踪您在帐户或多集群级别上的 OpenShift Container Platform 订阅。

其他资源

后续步骤