3.7. 在 AWS 上安装私有集群
在 OpenShift Container Platform 版本 4.16 中,您可以在 Amazon Web Services(AWS)上将私有集群安装到现有的 VPC 中。安装程序会置备所需基础架构的其余部分,您可以进一步自定义这些基础架构。要自定义安装,请在安装集群前修改 install-config.yaml
文件中的参数。
3.7.1. 先决条件
- 您可以参阅有关 OpenShift Container Platform 安装和更新 流程的详细信息。
- 您可以阅读选择集群安装方法并为用户准备它的文档。
已将 AWS 帐户配置为托管集群。
重要如果您的计算机上存储有 AWS 配置集,则不要在使用多因素验证设备的同时使用您生成的临时会话令牌。在集群的整个生命周期中,集群会持续使用您的当前 AWS 凭证来创建 AWS 资源,因此您必须使用长期凭证。要生成适当的密钥,请参阅 AWS 文档中的管理 IAM 用户的访问密钥。您可在运行安装程序时提供密钥。
- 如果使用防火墙,将其配置为允许集群需要访问的站点。
3.7.2. 私有集群
您可以部署不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,且无法在互联网中看到。
默认情况下,OpenShift Container Platform 被置备为使用可公开访问的 DNS 和端点。在部署集群时,私有集群会将 DNS、Ingress Controller 和 API 服务器设置为私有。这意味着集群资源只能从您的内部网络访问,且不能在互联网中看到。
如果集群有任何公共子网,管理员创建的负载均衡器服务可能会公开访问。为确保集群安全性,请验证这些服务是否已明确标注为私有。
要部署私有集群,您必须:
- 使用满足您的要求的现有网络。集群资源可能会在网络上的其他集群间共享。
从有权访问的机器中部署:
- 您置备的云的 API 服务。
- 您调配的网络上的主机。
- 用于获取安装介质的互联网。
您可以使用符合这些访问要求的机器,并按照您的公司规定进行操作。例如,该机器可以是云网络中的堡垒主机,也可以是可通过 VPN 访问网络的机器。
3.7.2.1. AWS 中的私有集群
要在 Amazon Web Services (AWS) 上创建私有集群,您必须提供一个现有的私有 VPC 和子网来托管集群。安装程序还必须能够解析集群所需的 DNS 记录。安装程序将 Ingress Operator 和 API 服务器配置为只可以从私有网络访问。
集群仍然需要访问互联网来访问 AWS API。
安装私有集群时不需要或创建以下项目:
- 公共子网
- 支持公共入口的公共负载均衡器
-
与集群的
baseDomain
匹配的公共 Route 53 区域
安装程序会使用您指定的 baseDomain
来创建专用的 Route 53 区域以及集群所需的记录。集群被配置,以便 Operator 不会为集群创建公共记录,且所有集群机器都放置在您指定的私有子网中。
3.7.2.1.1. 限制:
为私有集群添加公共功能的能力有限。
- 在安装后,您无法在不进行额外操作的情况下公开 Kubernetes API 端点。这些额外的操作包括为使用中的每个可用区在 VPC 中创建公共子网,创建公共负载均衡器,以及配置 control plane 安全组以便 6443 端口(Kubernetes API 端口)可以接受来自于互联网的网络流量。
-
如果使用公共服务类型负载均衡器,您必须在每个可用区中为公共子网添加
kubernetes.io/cluster/<cluster-infra-id>: shared
标签,以便 AWS 可使用它们来创建公共负载均衡器。
3.7.3. 关于使用自定义 VPC
在 OpenShift Container Platform 4.16 中,您可以在 Amazon Web Services (AWS)的现有 Amazon Virtual Private Cloud (VPC)中将集群部署到现有子网中。通过将 OpenShift Container Platform 部署到现有的 AWS VPC 中,您可能会避开新帐户中的限制,或者更容易地利用公司所设置的操作限制。如果您无法获得您自己创建 VPC 所需的基础架构创建权限,请使用这个安装选项。
因为安装程序无法了解您现有子网中还有哪些其他组件,所以无法选择子网 CIDR 。您必须为安装集群的子网配置网络。
3.7.3.1. 使用 VPC 的要求
安装程序不再创建以下组件:
- 互联网网关
- NAT 网关
- 子网
- 路由表
- VPCs
- VPC DHCP 选项
- VPC 端点
安装程序要求您使用由云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,并导致安装失败。
如果使用自定义 VPC,您必须为安装程序和集群正确配置它及其子网。如需有关 AWS VPC 控制台向导配置以及创建和管理 AWS VPC 的更多信息,请参阅 Amazon Web Services 文档中的创建 VPC。
安装程序无法:
- 分割网络范围供集群使用。
- 设置子网的路由表。
- 设置 VPC 选项,如 DHCP。
您必须在安装集群前完成这些任务。有关在 AWS VPC 中配置网络的更多信息,请参阅 VPC 的 VPC 网络组件和您的 VPC 的路由表。
您的 VPC 必须满足以下特征:
VPC 不能使用
kubernetes.io/cluster/.*: owned
,Name
, 和openshift.io/cluster
标签。安装程序会修改子网以添加
kubernetes.io/cluster/.*: shared
标签,因此您的子网必须至少有一个可用的空闲标签插槽。请参阅 AWS 文档中的 标签限制 部分,以确认安装程序可以为您指定的每个子网添加标签。您不能使用Name
标签,因为它与 EC2Name
字段重叠,且安装失败。-
如果要将 OpenShift Container Platform 集群扩展到 AWS Outpost 并具有现有的 Outpost 子网,现有的子网必须使用
kubernetes.io/cluster/unmanaged: true
标签。如果您没有应用此标签,因为 Cloud Controller Manager 在 Outpost 子网中创建服务负载均衡器,安装会失败,这是不受支持的配置。 您需要在您的 VPC 中启用
enableDnsSupport
和enableDnsHostnames
属性,以便集群可以使用附加到 VPC 中的 Route 53 区来解析集群内部的 DNS 记录。请参阅 AWS 文档中的您的 VPC 中的 DNS 支持部分 。如果要使用您自己的 Route 53 托管私有区,您必须在安装集群前将现有托管区与 VPC 相关联。您可以使用
install-config.yaml
文件中的platform.aws.hostedZone
和platform.aws.hostedZoneRole
字段定义托管区。您可以通过与安装集群的帐户共享来使用来自另一个帐户的私有托管区。如果使用另一个帐户的私有托管区,则必须使用Passthrough
或Manual
凭证模式。
如果您在断开连接的环境中工作,则无法访问 EC2、ELB 和 S3 端点的公共 IP 地址。根据您要在安装过程中限制互联网流量的级别,有以下配置选项:
选项 1:创建 VPC 端点
创建 VPC 端点,并将其附加到集群使用的子网。将端点命名为如下:
-
ec2.<aws_region>.amazonaws.com
-
elasticloadbalancing.<aws_region>.amazonaws.com
-
s3.<aws_region>.amazonaws.com
通过这个选项,网络流量在 VPC 和所需的 AWS 服务之间保持私有。
选项 2:创建一个没有 VPC 端点的代理
作为安装过程的一部分,您可以配置 HTTP 或 HTTPS 代理。使用此选项时,互联网流量会通过代理访问所需的 AWS 服务。
选项 3:创建带有 VPC 端点的代理
作为安装过程的一部分,您可以使用 VPC 端点配置 HTTP 或 HTTPS 代理。创建 VPC 端点,并将其附加到集群使用的子网。将端点命名为如下:
-
ec2.<aws_region>.amazonaws.com
-
elasticloadbalancing.<aws_region>.amazonaws.com
-
s3.<aws_region>.amazonaws.com
在 install-config.yaml
文件中配置代理时,将这些端点添加到 noProxy
字段。通过这个选项,代理会阻止集群直接访问互联网。但是,您的 VPC 和所需的 AWS 服务之间网络流量保持私有。
所需的 VPC 组件
您必须提供合适的 VPC 和子网,以便与您的机器通信。
组件 | AWS 类型 | 描述 | |
---|---|---|---|
VPC |
| 您必须提供一个公共 VPC 供集群使用。VPC 使用引用每个子网的路由表的端点,以改进与托管在 S3 中的 registry 的通信。 | |
公共子网 |
| 您的 VPC 必须有 1 到 3 个可用区的公共子网,并将其与适当的入口规则关联。 | |
互联网网关 |
| 您必须有一个公共互联网网关,以及附加到 VPC 的公共路由。在提供的模板中,每个公共子网都有一个具有 EIP 地址的 NAT 网关。这些 NAT 网关允许集群资源(如专用子网实例)访问互联网,而有些受限网络或代理场景则不需要它们。 | |
网络访问控制 |
| 您必须允许 VPC 访问下列端口: | |
端口 | 原因 | ||
| 入站 HTTP 流量 | ||
| 入站 HTTPS 流量 | ||
| 入站 SSH 流量 | ||
| 入站临时流量 | ||
| 出站临时流量 | ||
专用子网 |
| 您的 VPC 可以具有私有子网。提供的 CloudFormation 模板可为 1 到 3 个可用区创建专用子网。如果您使用专用子网,必须为其提供适当的路由和表。 |
3.7.3.2. VPC 验证
要确保您提供的子网适合您的环境,安装程序会确认以下信息:
- 您指定的所有子网都存在。
- 您提供了私有子网。
- 子网 CIDR 属于您指定的机器 CIDR。
- 您为每个可用区提供子网。每个可用区不包含多于一个的公共子网和私有子网。如果您使用私有集群,为每个可用区只提供一个私有子网。否则,为每个可用区提供一个公共和私有子网。
- 您可以为每个私有子网可用区提供一个公共子网。机器不会在没有为其提供私有子网的可用区中置备。
如果您销毁使用现有 VPC 的集群,VPC 不会被删除。从 VPC 中删除 OpenShift Container Platform 集群时,kubernetes.io/cluster/.*: shared
标签会从使用它的子网中删除。
3.7.3.3. 权限划分
从 OpenShift Container Platform 4.3 开始,您不需要安装程序置备的基础架构集群部署所需的所有权限。这与您所在机构可能已有的权限划分类似:不同的个人可以在您的云中创建不同的资源。。例如,您可以创建针对于特定应用程序的对象,如实例、存储桶和负载均衡器,但不能创建与网络相关的组件,如 VPC 、子网或入站规则。
您在创建集群时使用的 AWS 凭证不需要 VPC 和 VPC 中的核心网络组件(如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要获取集群中的机器需要的应用程序资源的权限,如 ELB 、安全组、S3 存储桶和节点。
3.7.3.4. 集群间隔离
如果您将 OpenShift Container Platform 部署到现有网络中,集群服务的隔离将在以下方面减少:
- 您可以在同一 VPC 中安装多个 OpenShift Container Platform 集群。
- 整个网络允许 ICMP 入站流量。
- 整个网络都允许 TCP 22 入站流量 (SSH)。
- 整个网络都允许 control plane TCP 6443 入站流量 (Kubernetes API)。
- 整个网络都允许 control plane TCP 22623 入站流量 (MCS) 。
3.7.3.5. 可选: AWS 安全组
默认情况下,安装程序会创建安全组并将其附加到 control plane 和计算机器。不可修改与默认安全组关联的规则。
但是,您可以将与现有 VPC 关联的其他现有 AWS 安全组应用到 control plane 和计算机器。应用自定义安全组可帮助您满足机构的安全需求,在这种情况下,您需要控制这些机器的传入或传出流量。
作为安装过程的一部分,您可以在部署集群前通过修改 install-config.yaml
文件来应用自定义安全组。
如需更多信息,请参阅"将现有 AWS 安全组应用到集群"。
3.7.4. 手动创建安装配置文件
安装集群要求您手动创建安装配置文件。
先决条件
- 您在本地机器上有一个 SSH 公钥来提供给安装程序。该密钥将用于在集群节点上进行 SSH 身份验证,以进行调试和灾难恢复。
- 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。
流程
创建一个安装目录来存储所需的安装资产:
$ mkdir <installation_directory>
重要您必须创建一个目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
自定义提供的
install-config.yaml
文件模板示例,并将其保存在<installation_directory>
中。注意此配置文件必须命名为
install-config.yaml
。备份
install-config.yaml
文件,以便您可以使用它安装多个集群。重要install-config.yaml
文件会在安装过程的下一步中使用。现在必须备份它。
其他资源
3.7.4.1. 集群安装的最低资源要求
每台集群机器都必须满足以下最低要求:
机器 | 操作系统 | vCPU [1] | 虚拟内存 | Storage | 每秒输入/输出 (IOPS) [2] |
---|---|---|---|---|---|
bootstrap | RHCOS | 4 | 16 GB | 100 GB | 300 |
Control plane(控制平面) | RHCOS | 4 | 16 GB | 100 GB | 300 |
Compute | RHCOS、RHEL 8.6 及更新版本 [3] | 2 | 8 GB | 100 GB | 300 |
- 当未启用并发多线程 (SMT) 或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
- OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
- 与所有用户置备的安装一样,如果您选择在集群中使用 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 支持使用它。
其他资源
3.7.4.2. 为 AWS 测试的实例类型
以下 Amazon Web Services(AWS) 实例类型已经过 OpenShift Container Platform 测试。
将以下图中包含的机器类型用于 AWS 实例。如果您使用没有在图表中列出的实例类型,请确保使用的实例大小与名为"最小资源要求"的部分中列出的最少资源要求匹配。
例 3.16. 基于 64 位 x86 架构的机器类型
-
c4.*
-
c5.*
-
c5a.*
-
i3.*
-
m4.*
-
m5.*
-
m5a.*
-
m6a.*
-
m6i.*
-
r4.*
-
r5.*
-
r5a.*
-
r6i.*
-
t3.*
-
t3a.*
3.7.4.3. 在 64 位 ARM 基础架构上为 AWS 测试过的实例类型
OpenShift Container Platform 中已经测试了以下 Amazon Web Services (AWS) 64 位 ARM 实例类型。
使用 AWS ARM 实例的以下图中包含的机器类型。如果您使用没有在图中列出的实例类型,请确保使用的实例大小与集群安装"最小资源要求"中列出的最少资源要求匹配。
例 3.17. 基于 64 位 ARM 架构的机器类型
-
c6g.*
-
c7g.*
-
m6g.*
-
m7g.*
-
r8g.*
3.7.4.4. AWS 的自定义 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: aws: zones: - us-west-2a - us-west-2b rootVolume: iops: 4000 size: 500 type: io1 6 metadataService: authentication: Optional 7 type: m6i.xlarge replicas: 3 compute: 8 - hyperthreading: Enabled 9 name: worker platform: aws: rootVolume: iops: 2000 size: 500 type: io1 10 metadataService: authentication: Optional 11 type: c5.4xlarge zones: - us-west-2c replicas: 3 metadata: name: test-cluster 12 networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 machineNetwork: - cidr: 10.0.0.0/16 networkType: OVNKubernetes 13 serviceNetwork: - 172.30.0.0/16 platform: aws: region: us-west-2 14 propagateUserTags: true 15 userTags: adminContact: jdoe costCenter: 7536 subnets: 16 - subnet-1 - subnet-2 - subnet-3 amiID: ami-0c5d3e03c0ab9b19a 17 serviceEndpoints: 18 - name: ec2 url: https://vpce-id.ec2.us-west-2.vpce.amazonaws.com hostedZone: Z3URY6TWQ91KVV 19 fips: false 20 sshKey: ssh-ed25519 AAAA... 21 publish: Internal 22 pullSecret: '{"auths": ...}' 23
- 1 12 14 23
- 必需。安装程序会提示您输入这个值。
- 2
- 可选:添加此参数来强制 Cloud Credential Operator (CCO) 使用指定的模式。默认情况下,CCO 使用
kube-system
命名空间中的 root 凭证来动态尝试决定凭证的功能。有关 CCO 模式的详情,请参阅身份验证和授权指南中的"About the Cloud Credential Operator"部分。 - 3 8 15
- 如果没有提供这些参数和值,安装程序会提供默认值。
- 4
controlPlane
部分是一个单个映射,但compute
部分是一系列映射。为满足不同数据结构的要求,compute
部分的第一行必须以连字符-
开头,controlPlane部分
的第一行则不以连字符开头。仅使用一个 control plane 池。- 5 9
- 是否要启用或禁用并发多线程或
超线程
。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为Disabled
来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。重要如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您对机器禁用并发多线程,请使用较大的实例类型,如
m4.2xlarge
或m5.2xlarge
。 - 6 10
- 要为 etcd 配置更快的存储,特别是对于较大的集群,请将存储类型设置为
io1
,并将iops
设为2000
。 - 7 11
- 是否需要 Amazon EC2 实例元数据服务 v2 (IMDSv2)。为了要求 IMDSv2,请将参数值设置为
Required
。要允许使用 IMDSv1 和 IMDSv2,请将参数值设置为Optional
。如果没有指定值,则允许 IMDSv1 和 IMDSv2。注意在集群安装过程中设置的 control plane 机器的 IMDS 配置只能使用 AWS CLI 更改。可以使用计算机器集来更改计算机器的 IMDS 配置。
- 13
- 要安装的集群网络插件。默认值
OVNKubernetes
是唯一支持的值。 - 16
- 如果您提供自己的 VPC,为集群使用的每个可用区指定子网。
- 17
- 用于为集群引导机器的 AMI ID。如果设置,AMI 必须属于与集群相同的区域。
- 18
- AWS 服务端点。在安装到未知 AWS 区域时,需要自定义端点。端点 URL 必须使用
https
协议,主机必须信任该证书。 - 19
- 您现有 Route 53 私有托管区的 ID。提供现有的托管区需要您提供自己的 VPC,托管区已在安装集群前与 VPC 关联。如果未定义,安装程序会创建一个新的托管区。
- 20
- 是否启用或禁用 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 核心组件使用 RHEL 加密库,在 x86_64、ppc64le 和 s390x 架构上提交到 NIST FIPS 140-2/140-3 Validation。
- 21
- 您可以选择提供您用来访问集群中机器的
sshKey
值。注意对于您要在其上执行安装调试或灾难恢复的生产环境 OpenShift Container Platform 集群,请指定
ssh-agent
进程使用的 SSH 密钥。 - 22
- 如何发布集群的面向用户的端点。将
publish
设置为Internal
以部署一个私有集群,它不能被互联网访问。默认值为External
。
3.7.4.5. 在安装过程中配置集群范围的代理
生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml
文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。
先决条件
-
您有一个现有的
install-config.yaml
文件。 您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在
Proxy 对象的
spec.noProxy
字段中添加站点来绕过代理。注意Proxy
对象status.noProxy
字段使用安装配置中的networking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
和networking.serviceNetwork[]
字段的值填充。对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,
Proxy
对象status.noProxy
字段也会使用实例元数据端点填充(169.254.169.254
)。
流程
编辑
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: ec2.<aws_region>.amazonaws.com,elasticloadbalancing.<aws_region>.amazonaws.com,s3.<aws_region>.amazonaws.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
。使用*
绕过所有目的地的代理。如果您已将 AmazonEC2
、Elastic Load Balancing
和S3
VPC 端点添加到 VPC 中,您必须将这些端点添加到noProxy
字段。 - 4
- 如果提供,安装程序会在
openshift-config
命名空间中生成名为user-ca-bundle
的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建trusted-ca-bundle
配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS(RHCOS)信任捆绑包合并,Proxy
对象的trustedCA
字段中也会引用此配置映射。additionalTrustBundle
字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。 - 5
- 可选:决定
Proxy
对象的配置以引用trustedCA
字段中user-ca-bundle
配置映射的策略。允许的值是Proxyonly
和Always
。仅在配置了http/https
代理时,使用Proxyonly
引用user-ca-bundle
配置映射。使用Always
始终引用user-ca-bundle
配置映射。默认值为Proxyonly
。
注意安装程序不支持代理的
readinessEndpoints
字段。注意如果安装程序超时,重启并使用安装程序的
wait-for
命令完成部署。例如:$ ./openshift-install wait-for install-complete --log-level debug
- 保存该文件并在安装 OpenShift Container Platform 时引用。
安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用
提供的 install-config.yaml
文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster
Proxy
对象,但它会有一个空 spec
。
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
3.7.4.6. 将现有 AWS 安全组应用到集群
将现有 AWS 安全组应用到 control plane 和计算机器可帮助您满足机构的安全需求,在这种情况下,您需要控制这些机器的传入或传出流量。
先决条件
- 您已在 AWS 中创建安全组。如需更多信息,请参阅使用 安全组的 AWS 文档。
- 安全组必须与您要将集群部署到的现有 VPC 关联。安全组不能与另一个 VPC 关联。
-
您有一个现有的
install-config.yaml
文件。
流程
-
在
install-config.yaml
文件中,编辑compute.platform.aws.additionalSecurityGroupIDs
参数,为您的计算机器指定一个或多个自定义安全组。 -
编辑
controlPlane.platform.aws.additionalSecurityGroupIDs
参数,为您的 control plane 机器指定一个或多个自定义安全组。 - 保存文件并在部署集群时引用。
指定自定义安全组的 install-config.yaml
文件示例
# ... compute: - hyperthreading: Enabled name: worker platform: aws: additionalSecurityGroupIDs: - sg-1 1 - sg-2 replicas: 3 controlPlane: hyperthreading: Enabled name: master platform: aws: additionalSecurityGroupIDs: - sg-3 - sg-4 replicas: 3 platform: aws: region: us-east-1 subnets: 2 - subnet-1 - subnet-2 - subnet-3
3.7.5. 在 kube-system 项目中存储管理员级别的 secret 的替代方案
默认情况下,管理员 secret 存储在 kube-system
项目中。如果您在 install-config.yaml
文件中将 credentialsMode
参数配置为 Manual
,则必须使用以下替代方案之一:
- 要手动管理长期云凭证,请按照手动创建长期凭证中的步骤操作。
- 要实现在集群外为各个组件管理的短期凭证,请按照配置 A WS 集群以使用短期凭证中的步骤操作。
3.7.5.1. 手动创建长期凭证
在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system
命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。
流程
如果您没有将
install-config.yaml
配置文件中的credentialsMode
参数设置为Manual
,请修改值,如下所示:配置文件片段示例
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...
如果您之前还没有创建安装清单文件,请运行以下命令:
$ openshift-install create manifests --dir <installation_directory>
其中
<installation_directory>
是安装程序在其中创建文件的目录。运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE
变量:$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
运行以下命令,从 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
此命令为每个
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: AWSProviderSpec statementEntries: - effect: Allow action: - iam:GetUser - iam:GetUserPolicy - iam:ListAccessKeys resource: "*" ...
在之前生成的
openshift-install
清单目录中为 secret 创建 YAML 文件。secret 必须使用在spec.secretRef
中为每个CredentialsRequest
定义的命名空间和 secret 名称存储。带有 secret 的
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: AWSProviderSpec statementEntries: - effect: Allow action: - s3:CreateBucket - s3:DeleteBucket resource: "*" ... secretRef: name: <component_secret> namespace: <component_namespace> ...
Secret
对象示例apiVersion: v1 kind: Secret metadata: name: <component_secret> namespace: <component_namespace> data: aws_access_key_id: <base64_encoded_aws_access_key_id> aws_secret_access_key: <base64_encoded_aws_secret_access_key>
在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。
3.7.5.2. 将 AWS 集群配置为使用短期凭证
要安装配置为使用 AWS 安全令牌服务 (STS) 的集群,您必须配置 CCO 实用程序并为集群创建所需的 AWS 资源。
3.7.5.2.1. 配置 Cloud Credential Operator 工具
当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl
)二进制文件。
ccoctl
工具是在 Linux 环境中运行的 Linux 二进制文件。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
-
已安装 OpenShift CLI(
oc
)。
您已为
ccoctl
工具创建了用于以下权限的 AWS 帐户:例 3.18. 所需的 AWS 权限
所需的
iam
权限-
iam:CreateOpenIDConnectProvider
-
iam:CreateRole
-
iam:DeleteOpenIDConnectProvider
-
iam:DeleteRole
-
iam:DeleteRolePolicy
-
iam:GetOpenIDConnectProvider
-
iam:GetRole
-
iam:GetUser
-
iam:ListOpenIDConnectProviders
-
iam:ListRolePolicies
-
iam:ListRoles
-
iam:PutRolePolicy
-
iam:TagOpenIDConnectProvider
-
iam:TagRole
所需的
s3
权限-
s3:CreateBucket
-
s3:DeleteBucket
-
s3:DeleteObject
-
s3:GetBucketAcl
-
s3:GetBucketTagging
-
s3:GetObject
-
s3:GetObjectAcl
-
s3:GetObjectTagging
-
s3:ListBucket
-
s3:PutBucketAcl
-
s3:PutBucketPolicy
-
s3:PutBucketPublicAccessBlock
-
s3:PutBucketTagging
-
s3:PutObject
-
s3:PutObjectAcl
-
s3:PutObjectTagging
所需的
cloudfront
权限-
cloudfront:ListCloudFrontOriginAccessIdentities
-
cloudfront:ListDistributions
-
cloudfront:ListTagsForResource
如果您计划通过公共 CloudFront 发行版 URL 将 OIDC 配置存储在 IAM 身份提供程序访问的私有 S3 存储桶中,则运行
ccoctl
工具的 AWS 帐户需要以下额外权限:例 3.19. 使用 CloudFront 私有 S3 存储桶的额外权限
-
cloudfront:CreateCloudFrontOriginAccessIdentity
-
cloudfront:CreateDistribution
-
cloudfront:DeleteCloudFrontOriginAccessIdentity
-
cloudfront:DeleteDistribution
-
cloudfront:GetCloudFrontOriginAccessIdentity
-
cloudfront:GetCloudFrontOriginAccessIdentityConfig
-
cloudfront:GetDistribution
-
cloudfront:TagResource
-
cloudfront:UpdateDistribution
注意在使用
ccoctl aws create-all
命令处理凭证请求时,这些额外权限支持使用--create-private-s3-bucket
选项。-
流程
运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
注意确保
$RELEASE_IMAGE
的架构与将使用ccoctl
工具的环境架构相匹配。运行以下命令,将 CCO 容器镜像中的
ccoctl
二进制文件提取到 OpenShift Container Platform 发行镜像中:$ 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 的主机指定这个值。
-
运行以下命令更改权限以使
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 nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
3.7.5.2.2. 使用 Cloud Credential Operator 实用程序创建 AWS 资源
创建 AWS 资源时有以下选项:
-
您可以使用
ccoctl aws create-all
命令自动创建 AWS 资源。这是创建资源的最快速方法。请参阅 使用单个命令创建 AWS 资源。 -
如果您需要在修改 AWS 资源前查看
ccoctl
工具创建的 JSON 文件,或者ccoctl
工具用于创建 AWS 资源的过程无法自动满足组织的要求,您可以单独创建 AWS 资源。请参阅 单独创建 AWS 资源。
3.7.5.2.2.1. 使用单个命令创建 AWS 资源
如果 ccoctl
工具用于创建 AWS 资源的过程自动满足机构的要求,您可以使用 ccoctl aws create-all
命令自动创建 AWS 资源。
否则,您可以单独创建 AWS 资源。如需更多信息,请参阅"单独创建 AWS 资源"。
默认情况下,ccoctl
在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir
标志。此流程使用 <path_to_ccoctl_output_dir>
来引用这个目录。
先决条件
您必须:
-
提取并准备好
ccoctl
二进制文件。
流程
运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE
变量:$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
运行以下命令,从 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
注意此命令可能需要一些时间才能运行。
运行以下命令,使用
ccoctl
工具处理所有CredentialsRequest
对象:$ ccoctl aws create-all \ --name=<name> \1 --region=<aws_region> \2 --credentials-requests-dir=<path_to_credentials_requests_directory> \3 --output-dir=<path_to_ccoctl_output_dir> \4 --create-private-s3-bucket 5
- 1
- 指定用于标记创建用于跟踪的任何云资源的名称。
- 2
- 指定在其中创建云资源的 AWS 区域。
- 3
- 指定包含组件
CredentialsRequest
对象文件的目录。 - 4
- 可选:指定您希望
ccoctl
实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。 - 5
- 可选:默认情况下,
ccoctl
实用程序将 OpenID Connect (OIDC) 配置文件存储在公共 S3 存储桶中,并使用 S3 URL 作为公共 OIDC 端点。要将 OIDC 配置存储在 IAM 身份提供程序通过公共 CloudFront 发行版 URL 访问的专用 S3 存储桶中,请使用--create-private-s3-bucket
参数。
注意如果您的集群使用
TechPreviewNoUpgrade
功能集启用的技术预览功能,则必须包含--enable-tech-preview
参数。
验证
要验证 OpenShift Container Platform secret 是否已创建,列出
<path_to_ccoctl_output_dir>/manifests
目录中的文件:$ ls <path_to_ccoctl_output_dir>/manifests
输出示例
cluster-authentication-02-config.yaml openshift-cloud-credential-operator-cloud-credential-operator-iam-ro-creds-credentials.yaml openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml openshift-cluster-api-capa-manager-bootstrap-credentials-credentials.yaml openshift-cluster-csi-drivers-ebs-cloud-credentials-credentials.yaml openshift-image-registry-installer-cloud-credentials-credentials.yaml openshift-ingress-operator-cloud-credentials-credentials.yaml openshift-machine-api-aws-cloud-credentials-credentials.yaml
您可以通过查询 AWS 来验证是否已创建 IAM 角色。如需更多信息,请参阅有关列出 IAM 角色的 AWS 文档。
3.7.5.2.2.2. 单独创建 AWS 资源
您可以使用 ccoctl
工具单独创建 AWS 资源。这个选项对于在不同用户或部门之间创建这些资源的组织可能很有用。
否则,您可以使用 ccoctl aws create-all
命令自动创建 AWS 资源。如需更多信息,请参阅"使用单个命令创建 AWS 资源"。
默认情况下,ccoctl
在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir
标志。此流程使用 <path_to_ccoctl_output_dir>
来引用这个目录。
有些 ccoctl
命令会发出 AWS API 调用来创建或修改 AWS 资源。您可以使用 --dry-run
标志来避免 API 调用。使用此标志可在本地文件系统中创建 JSON 文件。您可以使用 --cli-input-json
参数查看和修改 JSON 文件,然后使用 AWS CLI 工具应用它们。
先决条件
-
提取并准备
ccoctl
二进制文件。
流程
运行以下命令,生成用于为集群设置 OpenID Connect 供应商的公共和私有 RSA 密钥文件:
$ ccoctl aws create-key-pair
输出示例
2021/04/13 11:01:02 Generating RSA keypair 2021/04/13 11:01:03 Writing private key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.private 2021/04/13 11:01:03 Writing public key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.public 2021/04/13 11:01:03 Copying signing key for use by installer
其中
serviceaccount-signer.private
和serviceaccount-signer.public
是生成的密钥文件。此命令还会在
/<path_to_ccoctl_output_dir>/tls/bound-service-account-signing-key.key
中创建集群在安装过程中所需的私钥。运行以下命令,在 AWS 上创建 OpenID Connect 身份提供程序和 S3 存储桶:
$ ccoctl aws create-identity-provider \ --name=<name> \1 --region=<aws_region> \2 --public-key-file=<path_to_ccoctl_output_dir>/serviceaccount-signer.public 3
输出示例
2021/04/13 11:16:09 Bucket <name>-oidc created 2021/04/13 11:16:10 OpenID Connect discovery document in the S3 bucket <name>-oidc at .well-known/openid-configuration updated 2021/04/13 11:16:10 Reading public key 2021/04/13 11:16:10 JSON web key set (JWKS) in the S3 bucket <name>-oidc at keys.json updated 2021/04/13 11:16:18 Identity Provider created with ARN: arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
其中
openid-configuration
是发现文档和key.json
是一个 JSON Web 密钥集文件。此命令还会在
/<path_to_ccoctl_output_dir>/manifests/cluster-authentication-02-config.yaml
中创建 YAML 配置文件。此文件为集群生成的服务帐户令牌设置签发者 URL 字段,以便 AWS IAM 身份提供程序信任令牌。为集群中的每个组件创建 IAM 角色:
运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE
变量:$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
从 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
运行以下命令,使用
ccoctl
工具处理所有CredentialsRequest
对象:$ ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_credentials_requests_directory> \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
注意对于使用其他 IAM API 端点的 AWS 环境(如 GovCloud),还必须使用
--region
参数指定您的区域。如果您的集群使用
TechPreviewNoUpgrade
功能集启用的技术预览功能,则必须包含--enable-tech-preview
参数。对于每个
CredentialsRequest
对象,ccoctl
创建一个带有信任策略的 IAM 角色,该角色与指定的 OIDC 身份提供程序相关联,以及来自 OpenShift Container Platform 发行镜像的每个CredentialsRequest
对象中定义的权限策略。
验证
要验证 OpenShift Container Platform secret 是否已创建,列出
<path_to_ccoctl_output_dir>/manifests
目录中的文件:$ ls <path_to_ccoctl_output_dir>/manifests
输出示例
cluster-authentication-02-config.yaml openshift-cloud-credential-operator-cloud-credential-operator-iam-ro-creds-credentials.yaml openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml openshift-cluster-api-capa-manager-bootstrap-credentials-credentials.yaml openshift-cluster-csi-drivers-ebs-cloud-credentials-credentials.yaml openshift-image-registry-installer-cloud-credentials-credentials.yaml openshift-ingress-operator-cloud-credentials-credentials.yaml openshift-machine-api-aws-cloud-credentials-credentials.yaml
您可以通过查询 AWS 来验证是否已创建 IAM 角色。如需更多信息,请参阅有关列出 IAM 角色的 AWS 文档。
3.7.5.2.3. 整合 Cloud Credential Operator 实用程序清单
要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl
) 的清单文件移到安装程序的正确目录中。
先决条件
- 您已使用托管集群的云平台配置了帐户。
-
您已配置了 Cloud Credential Operator 实用程序 (
ccoctl
)。 -
已使用
ccoctl
工具创建了集群所需的云供应商资源。
流程
如果您没有将
install-config.yaml
配置文件中的credentialsMode
参数设置为Manual
,请修改值,如下所示:配置文件片段示例
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...
如果您之前还没有创建安装清单文件,请运行以下命令:
$ openshift-install create manifests --dir <installation_directory>
其中
<installation_directory>
是安装程序在其中创建文件的目录。运行以下命令,将
ccoctl
工具生成的清单复制到安装程序创建的manifests
目录中:$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
将包含私钥的
tls
目录复制到安装目录中:$ cp -a /<path_to_ccoctl_output_dir>/tls .
3.7.6. 部署集群
您可以在兼容云平台上安装 OpenShift Container Platform。
在初始安装过程中,您只能运行安装程序的 create cluster
命令一次。
先决条件
- 您已使用托管集群的云平台配置了帐户。
- 您有 OpenShift Container Platform 安装程序和集群的 pull secret。
- 已确认主机上的云供应商帐户具有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示包括缺失权限的错误消息。
流程
进入包含安装程序的目录并初始化集群部署:
$ ./openshift-install create cluster --dir <installation_directory> \ 1 --log-level=info 2
可选:从您用来安装集群的 IAM 帐户删除或禁用
AdministratorAccess
策略。注意只有在安装过程中才需要
AdministratorAccess
策略提供的升级权限。
验证
当集群部署成功完成时:
-
终端会显示用于访问集群的说明,包括指向 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 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。 - 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。
3.7.7. 使用 CLI 登录集群
您可以通过导出集群 kubeconfig
文件,以默认系统用户身份登录集群。kubeconfig
文件包含有关集群的信息,供 CLI 用于将客户端连接到正确的集群和 API 服务器。该文件特定于集群,在 OpenShift Container Platform 安装过程中创建。
先决条件
- 已部署 OpenShift Container Platform 集群。
-
已安装
oc
CLI。
流程
导出
kubeadmin
凭证:$ export KUBECONFIG=<installation_directory>/auth/kubeconfig 1
- 1
- 对于
<installation_directory>
,请指定安装文件保存到的目录的路径。
验证您可以使用导出的配置成功运行
oc
命令:$ oc whoami
输出示例
system:admin
3.7.8. 使用 Web 控制台登录到集群
kubeadmin
用户默认在 OpenShift Container Platform 安装后存在。您可以使用 OpenShift Container Platform Web 控制台以 kubeadmin
用户身份登录集群。
先决条件
- 有访问安装主机的访问权限。
- 您完成了集群安装,所有集群 Operator 都可用。
流程
从安装主机上的
kubeadmin
-password
文件中获取 kubeadmin 用户的密码:$ cat <installation_directory>/auth/kubeadmin-password
注意另外,您还可以从安装主机上的
<installation_directory>/.openshift_install.log
日志文件获取kubeadmin
密码。列出 OpenShift Container Platform Web 控制台路由:
$ oc get routes -n openshift-console | grep 'console-openshift'
注意另外,您还可以从安装主机上的
<installation_directory>/.openshift_install.log 日志
文件获取 OpenShift Container Platform 路由。输出示例
console console-openshift-console.apps.<cluster_name>.<base_domain> console https reencrypt/Redirect None
-
在 Web 浏览器中导航到上一命令输出中包括的路由,以
kubeadmin
用户身份登录。
其他资源
- 如需有关 访问和了解 OpenShift Container Platform Web 控制台的更多详情,请参阅 访问 Web 控制台。