13.4. 所需的 AWS 基础架构组件
要在 Amazon Web Services (AWS) 中用户置备的基础架构上安装 OpenShift Container Platform,您必须手动创建机器及其支持的基础架构。
如需有关不同平台集成测试的更多信息,请参阅 OpenShift Container Platform 4.x Tested Integrations页面。
通过使用提供的 CloudFormation 模板,您可以创建代表以下组件的 AWS 资源堆栈:
- 一个 AWS Virtual Private Cloud (VPC)
- 网络和负载均衡组件
- 安全组和角色
- 一个 OpenShift Container Platform bootstrap 节点
- OpenShift Container Platform control plane 节点
- 一个 OpenShift Container Platform 计算节点
或者,您可以手动创建组件,也可以重复使用满足集群要求的现有基础架构。查看 CloudFormation 模板,了解组件如何相互连接的更多详情。
13.4.1. 其他基础架构组件 复制链接链接已复制到粘贴板!
- VPC
- DNS 条目
- 负载均衡器(典型或网络)和监听器
- 公共和专用路由 53 区域
- 安全组
- IAM 角色
- S3 存储桶
如果您在断开连接的环境中工作,则无法访问 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 个可用区创建专用子网。如果您使用专用子网,必须为其提供适当的路由和表。 | |
所需的 DNS 和负载均衡组件
您的 DNS 和负载均衡器配置需要使用公共托管区,并可使用类似安装程序使用的专用托管区(如果安装程序置备了集群的基础架构)。您必须创建一个解析到负载均衡器的 DNS 条目。api.<cluster_name>.<domain> 的条目必须指向外部负载均衡器,api-int.<cluster_name>.<domain> 的条目则必须指向内部负载均衡器。
集群还需要负载均衡器,以及监听端口 6443(用于 Kubernetes API 及其扩展)和端口 22623(用于新机器的 Ignition 配置文件)的监听程序。目标是 control plane 节点。集群外的客户端和集群内的节点都必须能够访问端口 6443。集群内的节点必须能够访问端口 22623。
| 组件 | AWS 类型 | 描述 |
|---|---|---|
| DNS |
| 内部 DNS 的托管区。 |
| 公共负载均衡器 |
| 公共子网的负载均衡器。 |
| 外部 API 服务器记录 |
| 外部 API 服务器的别名记录。 |
| 外部监听程序 |
| 为外部负载均衡器监听端口 6443 的监听程序。 |
| 外部目标组 |
| 外部负载均衡器的目标组。 |
| 专用负载均衡器 |
| 专用子网的负载均衡器。 |
| 内部 API 服务器记录 |
| 内部 API 服务器的别名记录。 |
| 内部监听程序 |
| 为内部负载均衡器监听端口 22623 的监听程序。 |
| 内部目标组 |
| 内部负载均衡器的目标组。 |
| 内部监听程序 |
| 为内部负载均衡器监听端口 6443 的监听程序。 |
| 内部目标组 |
| 内部负载均衡器的目标组。 |
安全组
control plane 和 worker 机器需要访问下列端口:
| 组 | 类型 | IP 协议 | 端口范围 |
|---|---|---|---|
|
|
|
|
|
|
|
| ||
|
|
| ||
|
|
| ||
|
|
|
|
|
|
|
| ||
|
|
|
|
|
|
|
|
control plane 入口
control plane 机器需要以下入口组。每个入口组都是 AWS::EC2::SecurityGroupIngress 资源。
| 入口组 | 描述 | IP 协议 | 端口范围 |
|---|---|---|---|
|
| etcd |
|
|
|
| Vxlan 数据包 |
|
|
|
| Vxlan 数据包 |
|
|
|
| 内部集群通信和 Kubernetes 代理指标 |
|
|
|
| 内部集群通信 |
|
|
|
| kubernetes kubelet、调度程序和控制器管理器 |
|
|
|
| kubernetes kubelet、调度程序和控制器管理器 |
|
|
|
| Kubernetes 入口服务 |
|
|
|
| Kubernetes 入口服务 |
|
|
|
| Geneve 包 |
|
|
|
| Geneve 包 |
|
|
|
| IPsec IKE 数据包 |
|
|
|
| IPsec IKE 数据包 |
|
|
|
| IPsec NAT-T 数据包 |
|
|
|
| IPsec NAT-T 数据包 |
|
|
|
| IPsec ESP 数据包 |
|
|
|
| IPsec ESP 数据包 |
|
|
|
| 内部集群通信 |
|
|
|
| 内部集群通信 |
|
|
|
| Kubernetes 入口服务 |
|
|
|
| Kubernetes 入口服务 |
|
|
worker 入口
worker 机器需要以下入口组。每个入口组都是 AWS::EC2::SecurityGroupIngress 资源。
| 入口组 | 描述 | IP 协议 | 端口范围 |
|---|---|---|---|
|
| Vxlan 数据包 |
|
|
|
| Vxlan 数据包 |
|
|
|
| 内部集群通信 |
|
|
|
| 内部集群通信 |
|
|
|
| Kubernetes kubelet、调度程序和控制器管理器 |
|
|
|
| Kubernetes kubelet、调度程序和控制器管理器 |
|
|
|
| Kubernetes 入口服务 |
|
|
|
| Kubernetes 入口服务 |
|
|
|
| Geneve 包 |
|
|
|
| Geneve 包 |
|
|
|
| IPsec IKE 数据包 |
|
|
|
| IPsec IKE 数据包 |
|
|
|
| IPsec NAT-T 数据包 |
|
|
|
| IPsec NAT-T 数据包 |
|
|
|
| IPsec ESP 数据包 |
|
|
|
| IPsec ESP 数据包 |
|
|
|
| 内部集群通信 |
|
|
|
| 内部集群通信 |
|
|
|
| Kubernetes 入口服务 |
|
|
|
| Kubernetes 入口服务 |
|
|
角色和实例配置集
您必须在 AWS 中为机器授予权限。提供的 CloudFormation 模板为以下 AWS::IAM::Role 对象授予机器 Allow 权限,并为每一组角色提供一个 AWS::IAM::InstanceProfile。如果不使用模板,您可以为机器授予以下宽泛权限或单独权限。
| 角色 | 影响 | 操作 | 资源 |
|---|---|---|---|
| Master |
|
|
|
|
|
|
| |
|
|
|
| |
|
|
|
| |
| Worker |
|
|
|
| bootstrap |
|
|
|
|
|
|
| |
|
|
|
|
13.4.2. 集群机器 复制链接链接已复制到粘贴板!
以下机器需要 AWS::EC2::Instance 对象:
- bootstrap 机器。安装过程中需要此机器,但可在集群部署后删除。
- 三个 control plane 机器。control plane 机器不受 control plane 机器集的管控。
- 计算机器。在安装过程中创建至少两台计算(compute)机器(也称为 worker 机器)。这些机器不受计算机器集的管控。
13.4.3. IAM 用户所需的 AWS 权限 复制链接链接已复制到粘贴板!
您的 IAM 用户必须在区域 us-east-1 中有权限 tag:GetResources 来删除基本集群资源。作为 AWS API 的要求的一部分,OpenShift Container Platform 安装程序在此区域中执行各种操作。
将 AdministratorAccess 策略附加到您在 Amazon Web Services (AWS) 中创建的 IAM 用户时,授予该用户所有需要的权限。要部署 OpenShift Container Platform 集群的所有组件,IAM 用户需要以下权限:
例 13.3. 安装所需的 EC2 权限
-
ec2:AuthorizeSecurityGroupEgress -
ec2:AuthorizeSecurityGroupIngress -
ec2:CopyImage -
ec2:CreateNetworkInterface -
ec2:AttachNetworkInterface -
ec2:CreateSecurityGroup -
ec2:CreateTags -
ec2:CreateVolume -
ec2:DeleteSecurityGroup -
ec2:DeleteSnapshot -
ec2:DeleteTags -
ec2:DeregisterImage -
ec2:DescribeAccountAttributes -
ec2:DescribeAddresses -
ec2:DescribeAvailabilityZones -
ec2:DescribeDhcpOptions -
ec2:DescribeImages -
ec2:DescribeInstanceAttribute -
ec2:DescribeInstanceCreditSpecifications -
ec2:DescribeInstances -
ec2:DescribeInstanceTypes -
ec2:DescribeInternetGateways -
ec2:DescribeKeyPairs -
ec2:DescribeNatGateways -
ec2:DescribeNetworkAcls -
ec2:DescribeNetworkInterfaces -
ec2:DescribePrefixLists -
ec2:DescribeRegions -
ec2:DescribeRouteTables -
ec2:DescribeSecurityGroups -
ec2:DescribeSubnets -
ec2:DescribeTags -
ec2:DescribeVolumes -
ec2:DescribeVpcAttribute -
ec2:DescribeVpcClassicLink -
ec2:DescribeVpcClassicLinkDnsSupport -
ec2:DescribeVpcEndpoints -
ec2:DescribeVpcs -
ec2:GetEbsDefaultKmsKeyId -
ec2:ModifyInstanceAttribute -
ec2:ModifyNetworkInterfaceAttribute -
ec2:RevokeSecurityGroupEgress -
ec2:RevokeSecurityGroupIngress -
ec2:RunInstances -
ec2:TerminateInstances
例 13.4. 安装过程中创建网络资源所需的权限
-
ec2:AllocateAddress -
ec2:AssociateAddress -
ec2:AssociateDhcpOptions -
ec2:AssociateRouteTable -
ec2:AttachInternetGateway -
ec2:CreateDhcpOptions -
ec2:CreateInternetGateway -
ec2:CreateNatGateway -
ec2:CreateRoute -
ec2:CreateRouteTable -
ec2:CreateSubnet -
ec2:CreateVpc -
ec2:CreateVpcEndpoint -
ec2:ModifySubnetAttribute -
ec2:ModifyVpcAttribute
如果您使用现有的 VPC,您的帐户不需要这些权限来创建网络资源。
例 13.5. 安装所需的 Elastic Load Balancing 权限(ELB)
-
elasticloadbalancing:AddTags -
elasticloadbalancing:ApplySecurityGroupsToLoadBalancer -
elasticloadbalancing:AttachLoadBalancerToSubnets -
elasticloadbalancing:ConfigureHealthCheck -
elasticloadbalancing:CreateLoadBalancer -
elasticloadbalancing:CreateLoadBalancerListeners -
elasticloadbalancing:DeleteLoadBalancer -
elasticloadbalancing:DeregisterInstancesFromLoadBalancer -
elasticloadbalancing:DescribeInstanceHealth -
elasticloadbalancing:DescribeLoadBalancerAttributes -
elasticloadbalancing:DescribeLoadBalancers -
elasticloadbalancing:DescribeTags -
elasticloadbalancing:ModifyLoadBalancerAttributes -
elasticloadbalancing:RegisterInstancesWithLoadBalancer -
elasticloadbalancing:SetLoadBalancerPoliciesOfListener
例 13.6. 安装所需的 Elastic Load Balancing 权限(ELBv2)
-
elasticloadbalancing:AddTags -
elasticloadbalancing:CreateListener -
elasticloadbalancing:CreateLoadBalancer -
elasticloadbalancing:CreateTargetGroup -
elasticloadbalancing:DeleteLoadBalancer -
elasticloadbalancing:DeregisterTargets -
elasticloadbalancing:DescribeListeners -
elasticloadbalancing:DescribeLoadBalancerAttributes -
elasticloadbalancing:DescribeLoadBalancers -
elasticloadbalancing:DescribeTargetGroupAttributes -
elasticloadbalancing:DescribeTargetHealth -
elasticloadbalancing:ModifyLoadBalancerAttributes -
elasticloadbalancing:ModifyTargetGroup -
elasticloadbalancing:ModifyTargetGroupAttributes -
elasticloadbalancing:RegisterTargets
例 13.7. 安装所需的 IAM 权限
-
iam:AddRoleToInstanceProfile -
iam:CreateInstanceProfile -
iam:CreateRole -
iam:DeleteInstanceProfile -
iam:DeleteRole -
iam:DeleteRolePolicy -
iam:GetInstanceProfile -
iam:GetRole -
iam:GetRolePolicy -
iam:GetUser -
iam:ListInstanceProfilesForRole -
iam:ListRoles -
iam:ListUsers -
iam:PassRole -
iam:PutRolePolicy -
iam:RemoveRoleFromInstanceProfile -
iam:SimulatePrincipalPolicy -
iam:TagRole
如果您还没有在 AWS 帐户中创建负载均衡器,IAM 用户还需要 iam:CreateServiceLinkedRole 权限。
例 13.8. 安装所需的 Route 53 权限
-
route53:ChangeResourceRecordSets -
route53:ChangeTagsForResource -
route53:CreateHostedZone -
route53:DeleteHostedZone -
route53:GetChange -
route53:GetHostedZone -
route53:ListHostedZones -
route53:ListHostedZonesByName -
route53:ListResourceRecordSets -
route53:ListTagsForResource -
route53:UpdateHostedZoneComment
例 13.9. 安装所需的 S3 权限
-
s3:CreateBucket -
s3:DeleteBucket -
s3:GetAccelerateConfiguration -
s3:GetBucketAcl -
s3:GetBucketCors -
s3:GetBucketLocation -
s3:GetBucketLogging -
s3:GetBucketPolicy -
s3:GetBucketObjectLockConfiguration -
s3:GetBucketReplication -
s3:GetBucketRequestPayment -
s3:GetBucketTagging -
s3:GetBucketVersioning -
s3:GetBucketWebsite -
s3:GetEncryptionConfiguration -
s3:GetLifecycleConfiguration -
s3:GetReplicationConfiguration -
s3:ListBucket -
s3:PutBucketAcl -
s3:PutBucketTagging -
s3:PutEncryptionConfiguration
例 13.10. 集群 Operators 所需的 S3 权限
-
s3:DeleteObject -
s3:GetObject -
s3:GetObjectAcl -
s3:GetObjectTagging -
s3:GetObjectVersion -
s3:PutObject -
s3:PutObjectAcl -
s3:PutObjectTagging
例 13.11. 删除基本集群资源所需的权限
-
autoscaling:DescribeAutoScalingGroups -
ec2:DeletePlacementGroup -
ec2:DeleteNetworkInterface -
ec2:DeleteVolume -
elasticloadbalancing:DeleteTargetGroup -
elasticloadbalancing:DescribeTargetGroups -
iam:DeleteAccessKey -
iam:DeleteUser -
iam:ListAttachedRolePolicies -
iam:ListInstanceProfiles -
iam:ListRolePolicies -
iam:ListUserPolicies -
s3:DeleteObject -
s3:ListBucketVersions -
tag:GetResources
例 13.12. 删除网络资源所需的权限
-
ec2:DeleteDhcpOptions -
ec2:DeleteInternetGateway -
ec2:DeleteNatGateway -
ec2:DeleteRoute -
ec2:DeleteRouteTable -
ec2:DeleteSubnet -
ec2:DeleteVpc -
ec2:DeleteVpcEndpoints -
ec2:DetachInternetGateway -
ec2:DisassociateRouteTable -
ec2:ReleaseAddress -
ec2:ReplaceRouteTableAssociation
如果您使用现有的 VPC,您的帐户不需要这些权限来删除网络资源。您的帐户只需要有 tag:UntagResources 权限就能删除网络资源。
例 13.13. 使用共享实例角色删除集群所需的权限
-
iam:UntagRole
例 13.14. 创建清单所需的额外 IAM 和 S3 权限
-
iam:DeleteAccessKey -
iam:DeleteUser -
iam:DeleteUserPolicy -
iam:GetUserPolicy -
iam:ListAccessKeys -
iam:PutUserPolicy -
iam:TagUser -
s3:PutBucketPublicAccessBlock -
s3:GetBucketPublicAccessBlock -
s3:PutLifecycleConfiguration -
s3:ListBucket -
s3:ListBucketMultipartUploads -
s3:AbortMultipartUpload
如果您要使用 mint 模式管理云供应商凭证,IAM 用户还需要 The iam:CreateAccessKey 和 iam:CreateUser 权限。
例 13.15. 实例的可选权限和安装配额检查
-
ec2:DescribeInstanceTypeOfferings -
servicequotas:ListAWSDefaultServiceQuotas