VPC
在 OpenShift Container Platform 4.17 版本中,您可以将集群安装到以下 Amazon Web Services (AWS) 中国区域
cn-north-1
(北京)
cn-northwest-1
(宁夏)
您拥有互联网内容提供商 (ICP) 许可证。
您已查看有关OpenShift Container Platform 安装和更新流程的详细信息。
您已阅读有关选择集群安装方法并为用户准备集群的文档。
您已配置 AWS 账户来托管集群。
如果您使用防火墙,则您已将其配置为允许集群需要访问的站点。
如果您在计算机上存储了 AWS 配置文件,则它不得使用您在使用多因素身份验证设备时生成的临时会话令牌。集群将继续使用您当前的 AWS 凭据为集群的整个生命周期创建 AWS 资源,因此您必须使用长期凭据。要生成合适的密钥,请参阅 AWS 文档中的管理 IAM 用户的访问密钥。您可以在运行安装程序时提供密钥。 |
Red Hat 不会为 AWS 中国区域发布 Red Hat Enterprise Linux CoreOS (RHCOS) Amazon 机器镜像 (AMI)。
在您可以安装集群之前,您必须
上传自定义 RHCOS AMI。
手动创建安装配置文件 (install-config.yaml
)。
在安装配置文件中指定 AWS 区域以及相应的自定义 AMI。
您不能使用 OpenShift Container Platform 安装程序创建安装配置文件。安装程序不会列出没有本地支持 RHCOS AMI 的 AWS 区域。
您可以部署一个不公开外部端点的私有 OpenShift Container Platform 集群。私有集群只能从内部网络访问,并且对互联网不可见。
默认情况下,OpenShift Container Platform 配置为使用公共可访问的 DNS 和端点。当您部署集群时,私有集群会将 DNS、Ingress 控制器和 API 服务器设置为私有。这意味着集群资源只能从您的内部网络访问,并且对互联网不可见。
如果集群有任何公共子网,管理员创建的负载均衡器服务可能对公众开放。为了确保集群安全,请验证这些服务是否已明确标注为私有。 |
要部署私有集群,您必须:
使用满足您要求的现有网络。您的集群资源可能在网络上的其他集群之间共享。
从具有访问权限的机器进行部署:
您要配置到的云的 API 服务。
您要配置到的网络上的主机。
互联网以获取安装介质。
您可以使用任何满足这些访问要求并遵循您公司准则的机器。例如,这台机器可以是您云网络上的堡垒主机。
AWS 中国不支持 VPC 与您网络之间的 VPN 连接。有关北京和宁夏区域中 Amazon VPC 服务的更多信息,请参阅 AWS 中国文档中的Amazon Virtual Private Cloud。 |
要在 Amazon Web Services (AWS) 上创建私有集群,您必须提供现有的私有 VPC 和子网来托管集群。安装程序还必须能够解析集群所需的 DNS 记录。安装程序会将 Ingress 运算符和 API 服务器配置为仅从私有网络访问。
集群仍然需要访问互联网才能访问 AWS API。
安装私有集群时,不需要或不会创建以下项目:
公共子网
支持公共入口的公共负载均衡器
与集群的baseDomain
匹配的公共 Route 53 区域
安装程序确实会使用您指定的baseDomain
来创建私有 Route 53 区域以及集群所需的记录。集群配置为运算符不会为集群创建公共记录,并且所有集群机器都位于您指定的私有子网中。
在 OpenShift Container Platform 4.17 中,您可以将集群部署到 Amazon Web Services (AWS) 中现有 Amazon Virtual Private Cloud (VPC) 中的现有子网中。通过将 OpenShift Container Platform 部署到现有的 AWS VPC,您也许能够避免新帐户中的限制约束,或者更容易遵守公司准则设定的操作约束。如果您无法获得创建 VPC 所需的基础设施创建权限,请使用此安装选项。
由于安装程序无法知道您的现有子网中还存在哪些其他组件,因此它无法代表您选择子网 CIDR 等。您必须自己为要安装集群的子网配置网络。
安装程序不再创建以下组件:
互联网网关
NAT 网关
子网
路由表
VPC
VPC DHCP 选项
VPC 端点
安装程序要求您使用云提供的 DNS 服务器。不支持使用自定义 DNS 服务器,这会导致安装失败。 |
如果您使用自定义 VPC,则必须正确配置它及其子网,以便安装程序和集群可以使用。有关 AWS VPC 控制台向导配置以及创建和管理 AWS VPC 的更多信息,请参阅 Amazon Web Services 文档中的创建 VPC。
安装程序无法:
细分集群使用的网络范围。
设置子网的路由表。
设置 DHCP 等 VPC 选项。
您的 VPC 必须满足以下特征:
VPC 不得使用kubernetes.io/cluster/.*: owned
、Name
和openshift.io/cluster
标签。
安装程序会修改您的子网以添加kubernetes.io/cluster/.*: shared
标签,因此您的子网必须至少有一个可用的标签槽位。请参阅 AWS 文档中的标签限制,以确认安装程序可以向您指定的每个子网添加标签。您不能使用Name
标签,因为它与 EC2 的Name
字段重叠,安装会失败。
如果您想将 OpenShift Container Platform 集群扩展到 AWS Outpost 并拥有现有的 Outpost 子网,则现有子网必须使用kubernetes.io/cluster/unmanaged: true
标签。如果您不应用此标签,则安装可能会失败,因为云控制器管理器会在 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 地址。根据您希望在安装过程中限制互联网流量的程度,可以使用以下配置选项:
创建一个 VPC 端点并将其附加到集群正在使用的子网。将端点命名如下:
ec2.<aws_region>.amazonaws.com.cn
elasticloadbalancing.<aws_region>.amazonaws.com
s3.<aws_region>.amazonaws.com
使用此选项,网络流量将保留在您的 VPC 和所需的 AWS 服务之间。
作为安装过程的一部分,您可以配置 HTTP 或 HTTPS 代理。使用此选项,互联网流量将通过代理才能访问所需的 AWS 服务。
作为安装过程的一部分,您可以使用 VPC 端点配置 HTTP 或 HTTPS 代理。创建一个 VPC 端点并将其附加到集群正在使用的子网。将端点命名如下:
ec2.<aws_region>.amazonaws.com.cn
elasticloadbalancing.<aws_region>.amazonaws.com
s3.<aws_region>.amazonaws.com
在install-config.yaml
文件中配置代理时,请将这些端点添加到noProxy
字段。使用此选项,代理可以阻止集群直接访问互联网。但是,网络流量将保留在您的 VPC 和所需的 AWS 服务之间。
您必须提供合适的 VPC 和子网,以允许与您的机器通信。
组件 | AWS 类型 | 描述 | |
---|---|---|---|
VPC |
|
您必须为集群提供一个公共 VPC 用于使用。VPC 使用引用每个子网路由表的端点,以改进与托管在 S3 中的注册表之间的通信。 |
|
公共子网 |
|
您的 VPC 必须具有 1 到 3 个可用区之间的公共子网,并将其与相应的入站规则关联。 |
|
互联网网关 |
|
您必须拥有一个公共互联网网关,并带有公共路由,并附加到 VPC。在提供的模板中,每个公共子网都有一个带有 EIP 地址的 NAT 网关。这些 NAT 网关允许集群资源(例如私有子网实例)访问互联网,并且对于某些受限网络或代理场景而言并非必需。 |
|
网络访问控制 |
|
您必须允许 VPC 访问以下端口: |
|
端口 |
原因 |
||
|
入站 HTTP 流量 |
||
|
入站 HTTPS 流量 |
||
|
入站 SSH 流量 |
||
|
入站临时流量 |
||
|
出站临时流量 |
||
私有子网 |
|
您的 VPC 可以有私有子网。提供的 CloudFormation 模板可以为 1 到 3 个可用区创建私有子网。如果您使用私有子网,则必须为其提供合适的路由和表。 |
为了确保您提供的子网合适,安装程序会确认以下数据:
您指定的所有子网都存在。
您提供了私有子网。
子网 CIDR 属于您指定的机器 CIDR。
您为每个可用区提供子网。每个可用区最多包含一个公共子网和一个私有子网。如果您使用私有集群,则每个可用区只提供一个私有子网。否则,每个可用区都提供一个公共子网和一个私有子网。
您为每个私有子网可用区提供一个公共子网。机器不会在您未为其提供私有子网的可用区中进行配置。
如果您销毁使用现有 VPC 的集群,则不会删除 VPC。当您从 VPC 中删除 OpenShift Container Platform 集群时,kubernetes.io/cluster/.*: shared
标签将从其使用的子网中删除。
从 OpenShift Container Platform 4.3 开始,您不需要安装程序预配的基础架构集群部署集群所需的所有权限。此更改模拟您公司可能拥有的权限划分:某些人可以在您的云中创建与其他人不同的资源。例如,您也许能够创建特定于应用程序的项目,例如实例、存储桶和负载均衡器,但不能创建与网络相关的组件,例如 VPC、子网或入口规则。
创建集群时使用的 AWS 凭据不需要在 VPC 中创建 VPC 和核心网络组件(例如子网、路由表、互联网网关、NAT 和 VPN)所需的网络权限。您仍然需要权限来创建集群中的机器所需的应用程序资源,例如 ELB、安全组、S3 存储桶和节点。
如果您要部署到自定义 Amazon Web Services (AWS) 区域,则必须上传属于该区域的自定义 Red Hat Enterprise Linux CoreOS (RHCOS) Amazon Machine Image (AMI)。
您已配置 AWS 帐户。
您已创建具有所需 IAM 服务角色 的 Amazon S3 存储桶。
您已将 RHCOS VMDK 文件上传到 Amazon S3。RHCOS VMDK 文件必须是最高版本,小于或等于您要安装的 OpenShift Container Platform 版本。
您已下载 AWS CLI 并将其安装到您的计算机上。请参阅 使用捆绑安装程序安装 AWS CLI。
将您的 AWS 配置文件导出为环境变量
$ export AWS_PROFILE=<aws_profile> (1)
1 | 保存您 AWS 凭据的 AWS 配置文件名称,例如 beijingadmin 。 |
将要与您的自定义 AMI 关联的区域导出为环境变量
$ export AWS_DEFAULT_REGION=<aws_region> (1)
1 | AWS 区域,例如 cn-north-1 。 |
将您上传到 Amazon S3 的 RHCOS 版本导出为环境变量
$ export RHCOS_VERSION=<version> (1)
1 | RHCOS VMDK 版本,例如 4.17.0 。 |
将 Amazon S3 存储桶名称导出为环境变量
$ export VMIMPORT_BUCKET_NAME=<s3_bucket_name>
创建 containers.json
文件并定义您的 RHCOS VMDK 文件
$ cat <<EOF > containers.json
{
"Description": "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64",
"Format": "vmdk",
"UserBucket": {
"S3Bucket": "${VMIMPORT_BUCKET_NAME}",
"S3Key": "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64.vmdk"
}
}
EOF
将 RHCOS 磁盘导入为 Amazon EBS 快照
$ aws ec2 import-snapshot --region ${AWS_DEFAULT_REGION} \
--description "<description>" \ (1)
--disk-container "file://<file_path>/containers.json" (2)
1 | 您要导入的 RHCOS 磁盘的描述,例如 rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64 。 |
2 | 描述您 RHCOS 磁盘的 JSON 文件的文件路径。JSON 文件应包含您的 Amazon S3 存储桶名称和键。 |
检查镜像导入状态
$ watch -n 5 aws ec2 describe-import-snapshot-tasks --region ${AWS_DEFAULT_REGION}
{
"ImportSnapshotTasks": [
{
"Description": "rhcos-4.7.0-x86_64-aws.x86_64",
"ImportTaskId": "import-snap-fh6i8uil",
"SnapshotTaskDetail": {
"Description": "rhcos-4.7.0-x86_64-aws.x86_64",
"DiskImageSize": 819056640.0,
"Format": "VMDK",
"SnapshotId": "snap-06331325870076318",
"Status": "completed",
"UserBucket": {
"S3Bucket": "external-images",
"S3Key": "rhcos-4.7.0-x86_64-aws.x86_64.vmdk"
}
}
}
]
}
复制 SnapshotId
以注册镜像。
从 RHCOS 快照创建自定义 RHCOS AMI
$ aws ec2 register-image \
--region ${AWS_DEFAULT_REGION} \
--architecture x86_64 \ (1)
--description "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64" \ (2)
--ena-support \
--name "rhcos-${RHCOS_VERSION}-x86_64-aws.x86_64" \ (3)
--virtualization-type hvm \
--root-device-name '/dev/xvda' \
--block-device-mappings 'DeviceName=/dev/xvda,Ebs={DeleteOnTermination=true,SnapshotId=<snapshot_ID>}' (4)
1 | RHCOS VMDK 架构类型,例如 x86_64 、aarch64 、s390x 或 ppc64le 。 |
2 | 导入快照的 Description 。 |
3 | RHCOS AMI 的名称。 |
4 | 导入快照的 SnapshotID 。 |
要了解有关这些 API 的更多信息,请参阅 AWS 文档,了解有关 导入快照 和 创建基于 EBS 的 AMI 的信息。
安装集群需要您手动创建安装配置文件。
您已上传自定义 RHCOS AMI。
您在本地计算机上拥有一个 SSH 公钥,可将其提供给安装程序。此密钥将用于 SSH 身份验证到您的集群节点,以进行调试和灾难恢复。
您已获得 OpenShift Container Platform 安装程序和集群的拉取密钥。
创建一个安装目录来存储所需的安装资源
$ mkdir <installation_directory>
您必须创建一个目录。某些安装资源(如引导 X.509 证书)的有效期很短,因此您不能重复使用安装目录。如果您想重复使用来自另一个集群安装的单个文件,您可以将它们复制到您的目录中。但是,安装资源的文件名可能会在不同版本之间发生变化。从较早版本的 OpenShift Container Platform 复制安装文件时,请务必小心。 |
自定义提供的示例 install-config.yaml
文件模板,并将其保存在 <installation_directory>
中。
您必须将此配置文件命名为 |
备份 install-config.yaml
文件,以便您可以使用它来安装多个集群。
|
您可以自定义安装配置文件 (install-config.yaml
) 以指定有关 OpenShift Container Platform 集群平台的更多详细信息,或修改所需参数的值。
此示例 YAML 文件仅供参考。将其用作资源,将参数值输入到您手动创建的安装配置文件中。 |
apiVersion: v1
baseDomain: example.com (1)
credentialsMode: Mint (2)
controlPlane: (3) (4)
hyperthreading: Enabled (5)
name: master
platform:
aws:
zones:
- cn-north-1a
- cn-north-1b
rootVolume:
iops: 4000
size: 500
type: io1 (6)
metadataService:
authentication: Optional (7)
type: m6i.xlarge
replicas: 3
compute: (3)
- hyperthreading: Enabled (5)
name: worker
platform:
aws:
rootVolume:
iops: 2000
size: 500
type: io1 (6)
metadataService:
authentication: Optional (7)
type: c5.4xlarge
zones:
- cn-north-1a
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 (8)
serviceNetwork:
- 172.30.0.0/16
platform:
aws:
region: cn-north-1 (1)
propagateUserTags: true (3)
userTags:
adminContact: jdoe
costCenter: 7536
subnets: (9)
- subnet-1
- subnet-2
- subnet-3
amiID: ami-96c6f8f7 (1) (10)
serviceEndpoints: (11)
- name: ec2
url: https://vpce-id.ec2.cn-north-1.vpce.amazonaws.com.cn
hostedZone: Z3URY6TWQ91KVV (12)
fips: false (13)
sshKey: ssh-ed25519 AAAA... (14)
publish: Internal (15)
pullSecret: '{"auths": ...}' (1)
1 | 必需。 | ||
2 | 可选:添加此参数以强制云凭据操作员 (CCO) 使用指定的模式。默认情况下,CCO 使用 kube-system 命名空间中的根凭据来动态尝试确定凭据的功能。有关 CCO 模式详细信息,请参阅《身份验证和授权》指南中的“关于云凭据操作员”部分。 |
||
3 | 如果您未提供这些参数和值,安装程序将提供默认值。 | ||
4 | controlPlane 部分是一个单映射,但 compute 部分是映射序列。为了满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,而 controlPlane 部分的第一行则不能。仅使用一个控制平面池。 |
||
5 | 是否启用或禁用同时多线程处理或 超线程 。默认情况下,启用同时多线程处理以提高机器内核的性能。您可以将其参数值设置为 Disabled 来禁用它。如果您在某些集群机器中禁用了同时多线程处理,则必须在所有集群机器中禁用它。
|
||
6 | 要为 etcd 配置更快的存储,特别是对于较大的集群,请将存储类型设置为 io1 并将 iops 设置为 2000 。 |
||
7 | 是否需要 Amazon EC2 实例元数据服务 v2 (IMDSv2)。要需要 IMDSv2,请将参数值设置为 Required 。要允许使用 IMDSv1 和 IMDSv2,请将参数值设置为 Optional 。如果未指定值,则允许使用 IMDSv1 和 IMDSv2。
|
||
8 | 要安装的集群网络插件。默认值 OVNKubernetes 是唯一受支持的值。 |
||
9 | 如果您提供自己的 VPC,请为集群使用的每个可用区指定子网。 | ||
10 | 用于引导集群机器的 AMI 的 ID。如果设置,AMI 必须属于与集群相同的区域。 | ||
11 | AWS 服务端点。安装到未知 AWS 区域时需要自定义端点。端点 URL 必须使用 https 协议,并且主机必须信任证书。 |
||
12 | 您现有 Route 53 专用托管区的 ID。提供现有托管区需要您提供自己的 VPC,并且托管区在安装集群之前已与 VPC 关联。如果未定义,安装程序将创建一个新的托管区。 | ||
13 | 是否启用或禁用 FIPS 模式。默认情况下,未启用 FIPS 模式。如果启用 FIPS 模式,则运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS (RHCOS) 机器将绕过默认的 Kubernetes 加密套件,并改用 RHCOS 提供的加密模块。
|
||
14 | 您可以选择提供用于访问集群中机器的 sshKey 值。
|
||
15 | 如何发布集群的用户端点。将 publish 设置为 Internal 以部署专用集群,该集群无法从互联网访问。默认值为 External 。 |
每个集群机器必须满足以下最低要求
机器 | 操作系统 | vCPU [1] | 虚拟内存 | 存储 | 每秒输入/输出次数 (IOPS)[2] |
---|---|---|---|---|---|
引导程序 |
RHCOS |
4 |
16 GB |
100 GB |
300 |
控制平面 |
RHCOS |
4 |
16 GB |
100 GB |
300 |
计算节点 |
RHCOS、RHEL 8.6 及更高版本 [3] |
2 |
8 GB |
100 GB |
300 |
当未启用同时多线程 (SMT) 或超线程时,一个 vCPU 等效于一个物理核心。启用时,使用以下公式计算相应的比率:(每核线程数 × 核心数)× 插槽数 = vCPU 数。
OpenShift Container Platform 和 Kubernetes 对磁盘性能很敏感,建议使用更快的存储,特别是对于控制平面节点上的 etcd,它需要 10 毫秒的 p99 fsync 持续时间。请注意,在许多云平台上,存储大小和 IOPS 是成比例缩放的,因此您可能需要过度分配存储卷才能获得足够的性能。
与所有用户配置的安装一样,如果您选择在集群中使用 RHEL 计算机器,则您需要负责所有操作系统的生命周期管理和维护,包括执行系统更新、应用补丁以及完成所有其他必需的任务。RHEL 7 计算机器的使用已被弃用,并且已在 OpenShift Container Platform 4.10 及更高版本中移除。
从 OpenShift Container Platform 4.13 版本开始,RHCOS 基于 RHEL 9.2 版本,这更新了微架构要求。以下列表包含每个架构所需的最低指令集架构 (ISA):
更多信息,请参见 RHEL 架构。 |
如果平台的实例类型满足集群机器的最低要求,则支持在 OpenShift Container Platform 中使用。
以下 Amazon Web Services (AWS) 实例类型已通过 OpenShift Container Platform 测试。
请为您的 AWS 实例使用以下图表中包含的机器类型。如果您使用的实例类型未列在图表中,请确保您使用的实例大小与“集群安装的最低资源要求”部分中列出的最低资源要求相匹配。 |
c4.*
c5.*
c5a.*
i3.*
m4.*
m5.*
m5a.*
m6a.*
m6i.*
r4.*
r5.*
r5a.*
r6i.*
t3.*
t3a.*
以下 Amazon Web Services (AWS) 64 位 ARM 实例类型已通过 OpenShift Container Platform 测试。
请为您的 AWS ARM 实例使用以下图表中包含的机器类型。如果您使用的实例类型未列在图表中,请确保您使用的实例大小与“集群安装的最低资源要求”部分中列出的最低资源要求相匹配。 |
c6g.*
c7g.*
m6g.*
m7g.*
r8g.*
生产环境可能会拒绝直接访问互联网,而是提供 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`。使用 `*` 可绕过所有目标的代理。如果您已将 Amazon `EC2`、`Elastic Load Balancing` 和 `S3` VPC 端点添加到您的 VPC,则必须将这些端点添加到 `noProxy` 字段。 |
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` 配置映射的策略。允许的值为 `Proxyonly` 和 `Always`。使用 `Proxyonly` 仅在配置 `http/https` 代理时引用 `user-ca-bundle` 配置映射。使用 `Always` 始终引用 `user-ca-bundle` 配置映射。默认值为 `Proxyonly`。 |
安装程序不支持代理 `readinessEndpoints` 字段。 |
如果安装程序超时,请重新启动,然后使用安装程序的 `wait-for` 命令完成部署。例如:
|
保存文件并在安装 OpenShift Container Platform 时引用它。
安装程序将创建一个名为 `cluster` 的集群范围代理,该代理使用提供的 `install-config.yaml` 文件中的代理设置。如果没有提供代理设置,仍然会创建 `cluster` `Proxy` 对象,但它将具有 nil `spec`。
仅支持名为 `cluster` 的 `Proxy` 对象,并且不能创建其他代理。 |
将现有的 AWS 安全组应用于您的控制平面和计算机器可以帮助您满足组织的安全需求,例如在您需要控制这些机器的传入或传出流量的情况下。
您已在 AWS 中创建了安全组。有关更多信息,请参阅 AWS 关于使用 安全组 的文档。
安全组必须与您要向其部署集群的现有 VPC 关联。安全组不能与其他 VPC 关联。
您已拥有一个现有的 `install-config.yaml` 文件。
在install-config.yaml
文件中,编辑compute.platform.aws.additionalSecurityGroupIDs
参数,为计算机器指定一个或多个自定义安全组。
编辑controlPlane.platform.aws.additionalSecurityGroupIDs
参数,为控制平面机器指定一个或多个自定义安全组。
保存文件,并在部署集群时引用它。
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
1 | 指定安全组的名称,其显示在 Amazon EC2 控制台中,包括sg 前缀。 |
2 | 为集群使用的每个可用区指定子网。 |
默认情况下,管理员密钥存储在kube-system
项目中。如果已在install-config.yaml
文件中将credentialsMode
参数配置为Manual
,则必须使用以下替代方案之一。
要手动管理长期云凭据,请按照手动创建长期凭据中的步骤操作。
要实现由集群外部为各个组件管理的短期凭据,请按照配置 AWS 集群以使用短期凭据中的步骤操作。
在无法访问云身份和访问管理 (IAM) API 或管理员不希望在集群kube-system
命名空间中存储管理员级凭据密钥的环境中,可以在安装之前将云凭据操作员 (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)
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: AWSProviderSpec
statementEntries:
- effect: Allow
action:
- iam:GetUser
- iam:GetUserPolicy
- iam:ListAccessKeys
resource: "*"
...
为之前生成的openshift-install
清单目录中的密钥创建 YAML 文件。必须使用每个CredentialsRequest
对象的spec.secretRef
中定义的命名空间和密钥名称来存储密钥。
CredentialsRequest
对象示例apiVersion: cloudcredential.openshift.io/v1
kind: CredentialsRequest
metadata:
name: <component_credentials_request>
namespace: openshift-cloud-credential-operator
...
spec:
providerSpec:
apiVersion: cloudcredential.openshift.io/v1
kind: 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 处于可升级状态。 |
要安装配置为使用 AWS 安全令牌服务 (STS) 的集群,必须配置 CCO 实用程序并为集群创建所需的 AWS 资源。
当云凭据操作员 (CCO) 处于手动模式时,要从集群外部创建和管理云凭据,请提取并准备 CCO 实用程序 (ccoctl
) 二进制文件。
|
您可以访问具有集群管理员访问权限的 OpenShift Container Platform 帐户。
您已安装 OpenShift CLI (oc
)。
您已为ccoctl
实用程序创建了一个 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
如果您计划将 OIDC 配置存储在通过公共 CloudFront 分发 URL 由 IAM 身份提供者访问的私有 S3 存储桶中,则运行ccoctl
实用程序的 AWS 帐户需要以下附加权限:
cloudfront:CreateCloudFrontOriginAccessIdentity
cloudfront:CreateDistribution
cloudfront:DeleteCloudFrontOriginAccessIdentity
cloudfront:DeleteDistribution
cloudfront:GetCloudFrontOriginAccessIdentity
cloudfront:GetCloudFrontOriginAccessIdentityConfig
cloudfront:GetDistribution
cloudfront:TagResource
cloudfront:UpdateDistribution
这些附加权限支持在使用 |
通过运行以下命令,为 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)
确保 |
通过运行以下命令,从 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 。有效值为:
|
更改权限以使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.
创建 AWS 资源时,您可以选择以下选项:
您可以使用ccoctl aws create-all
命令自动创建 AWS 资源。这是创建资源最快的方法。请参阅使用单个命令创建 AWS 资源。
如果您需要在修改 AWS 资源之前查看ccoctl
工具创建的 JSON 文件,或者ccoctl
工具用于自动创建 AWS 资源的过程不符合贵组织的要求,则可以分别创建 AWS 资源。请参阅分别创建 AWS 资源。
如果ccoctl
工具用于自动创建 AWS 资源的过程符合贵组织的要求,则可以使用ccoctl aws create-all
命令来自动创建 AWS 资源。
否则,您可以分别创建 AWS 资源。有关更多信息,请参阅“分别创建 AWS 资源”。
默认情况下, |
您必须:
已解压并准备好了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)
1 | --included 参数仅包含特定集群配置所需的清单。 |
2 | 指定install-config.yaml 文件的位置。 |
3 | 指定要存储CredentialsRequest 对象的目录的路径。如果指定的目录不存在,此命令将创建它。 |
此命令可能需要几分钟才能运行。 |
使用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配置存储在私有S3存储桶中(通过公共CloudFront分发URL由IAM身份提供者访问),请使用--create-private-s3-bucket 参数。 |
如果您的集群使用由 |
要验证是否已创建OpenShift Container Platform密钥,请列出<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角色。有关更多信息,请参阅AWS关于列出IAM角色的文档。
您可以使用ccoctl
工具单独创建AWS资源。对于在不同用户或部门之间共享创建这些资源责任的组织,此选项可能很有用。
否则,您可以使用ccoctl aws create-all
命令自动创建AWS资源。有关更多信息,请参见“使用单个命令创建AWS资源”。
默认情况下, 一些 |
解压并准备ccoctl
二进制文件。
通过运行以下命令生成用于设置集群OpenID Connect提供程序的公钥和私钥文件:
$ 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)
1 | <name> 是用于标记为跟踪而创建的任何云资源的名称。 |
2 | <aws-region> 是将创建云资源的AWS区域。 |
3 | <path_to_ccoctl_output_dir> 是ccoctl aws create-key-pair 命令生成的公钥文件的路径。 |
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
是一个发现文档,keys.json
是一个JSON Web密钥集文件。
此命令还会在/<path_to_ccoctl_output_dir>/manifests/cluster-authentication-02-config.yaml
中创建一个YAML配置文件。此文件设置集群生成的Service Account令牌的发行者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)
1 | --included 参数仅包含特定集群配置所需的清单。 |
2 | 指定install-config.yaml 文件的位置。 |
3 | 指定要存储CredentialsRequest 对象的目录的路径。如果指定的目录不存在,此命令将创建它。 |
使用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端点(例如GovCloud)的AWS环境,您还必须使用 如果您的集群使用由 |
对于每个CredentialsRequest
对象,ccoctl
都会创建一个IAM角色,该角色具有与指定的OIDC身份提供程序绑定的信任策略,以及在OpenShift Container Platform发行版镜像中每个CredentialsRequest
对象中定义的权限策略。
要验证是否已创建OpenShift Container Platform密钥,请列出<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角色。有关更多信息,请参阅AWS关于列出IAM角色的文档。
要实现为各个组件管理集群外部的短期安全凭据,您必须将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 .
您可以在兼容的云平台上安装OpenShift Container Platform。
您只能在初始安装期间运行安装程序的 |
您已配置了托管集群的云平台帐户。
您拥有OpenShift Container Platform安装程序和集群的pull密钥。
您已验证主机上的云提供商帐户是否具有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示一条错误消息,其中显示缺少的权限。
更改到包含安装程序的目录,并初始化集群部署:
$ ./openshift-install create cluster --dir <installation_directory> \ (1)
--log-level=info (2)
1 | 对于<installation_directory> ,请指定您自定义的./install-config.yaml 文件的位置。 |
2 | 要查看不同的安装详细信息,请指定warn 、debug 或error 代替info 。 |
可选:从用于安装集群的IAM帐户中删除或禁用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
|
您可以通过导出集群的kubeconfig
文件以默认系统用户身份登录集群。kubeconfig
文件包含集群信息,命令行工具 (CLI) 使用该文件将客户端连接到正确的集群和API服务器。该文件特定于某个集群,并在安装OpenShift Container Platform期间创建。
您已部署了一个OpenShift Container Platform集群。
您已安装oc
命令行工具。
导出kubeadmin
凭据
$ export KUBECONFIG=<installation_directory>/auth/kubeconfig (1)
1 | 对于<installation_directory> ,请指定您存储安装文件的目录路径。 |
验证您可以使用导出的配置成功运行oc
命令
$ oc whoami
system:admin
安装OpenShift Container Platform后,默认情况下会存在kubeadmin
用户。您可以使用OpenShift Container Platform Web控制台以kubeadmin
用户身份登录集群。
您可以访问安装主机。
您已完成集群安装,并且所有集群运算符都可用。
从安装主机上的kubeadmin-password
文件中获取kubeadmin
用户的密码
$ cat <installation_directory>/auth/kubeadmin-password
或者,您可以从安装主机上的 |
列出OpenShift Container Platform Web控制台路由
$ oc get routes -n openshift-console | grep 'console-openshift'
或者,您可以从安装主机上的 |
console console-openshift-console.apps.<cluster_name>.<base_domain> console https reencrypt/Redirect None
在Web浏览器中导航到前面命令输出中详细说明的路由,并以kubeadmin
用户身份登录。
有关访问和了解OpenShift Container Platform Web控制台的更多详细信息,请参阅访问Web控制台。
验证安装.
如有必要,您可以选择退出远程健康报告。
如有必要,您可以删除云提供商凭据。