15.5. 所需的 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 模板,了解组件如何相互连接的更多详情。
15.5.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 |
|
|
|
|
|
| |
|
|
|
15.5.2. 集群机器
以下机器需要 AWS::EC2::Instance
对象:
- bootstrap 机器。安装过程中需要此机器,但可在集群部署后删除。
- 三个 control plane 机器。control plane 机器不受 control plane 机器集的管控。
- 计算机器。在安装过程中创建至少两台计算(compute)机器(也称为 worker 机器)。这些机器不受计算机器集的管控。
15.5.3. IAM 用户所需的 AWS 权限
您的 IAM 用户必须在区域 us-east-1
中有权限 tag:GetResources
来删除基本集群资源。作为 AWS API 的要求的一部分,OpenShift Container Platform 安装程序在此区域中执行各种操作。
将 AdministratorAccess
策略附加到您在 Amazon Web Services (AWS) 中创建的 IAM 用户时,授予该用户所有需要的权限。要部署 OpenShift Container Platform 集群的所有组件,IAM 用户需要以下权限:
例 15.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
例 15.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,您的帐户不需要这些权限来创建网络资源。
例 15.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
例 15.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
例 15.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
权限。
例 15.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
例 15.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
例 15.10. 集群 Operators 所需的 S3 权限
-
s3:DeleteObject
-
s3:GetObject
-
s3:GetObjectAcl
-
s3:GetObjectTagging
-
s3:GetObjectVersion
-
s3:PutObject
-
s3:PutObjectAcl
-
s3:PutObjectTagging
例 15.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
例 15.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
权限就能删除网络资源。
例 15.13. 使用共享实例角色删除集群所需的权限
-
iam:UntagRole
例 15.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
权限。
例 15.15. 实例的可选权限和安装配额检查
-
ec2:DescribeInstanceTypeOfferings
-
servicequotas:ListAWSDefaultServiceQuotas