第 2 章 在 AWS 上安装

2.1. 配置 AWS 帐户

在安装 OpenShift Container Platform 之前,您必须先配置 Amazon Web Services(AWS)帐户。

2.1.1. 配置路由 53(Route 53)

要安装 OpenShift Container Platform,您使用的 Amazon Web Services (AWS) 帐户必须在 Route 53 服务中有一个专用的公共托管区。此区域必须对域具有权威。Route 53 服务为集群外部连接提供集群 DNS 解析和名称查询。

流程

  1. 标识您的域或子域,以及注册商(registrar)。您可以转移现有的域和注册商,或通过 AWS 或其他来源获取新的域和注册商。

    注意

    如果您通过 AWS 购买了一个新域,则需要一定时间来传播相关的 DNS 更改信息。有关通过 AWS 购买域的更多信息,请参阅 AWS 文档中的使用 Amazon Route 53 注册域名

  2. 如果您使用现有的域和注册商,请将其 DNS 迁移到 AWS。请参阅 AWS 文档中的使 Amazon Route 53 成为现有域的 DNS 服务
  3. 为您的域或子域创建一个公共托管区。请参阅 AWS 文档中的创建公共托管区

    使用合适的根域(如 openshiftcorp.com)或子域(如 clusters.openshiftcorp.com)。

  4. 从托管区记录中提取新的权威名称服务器。请参阅 AWS 文档中的获取公共托管区的名称服务器
  5. 更新域所用 AWS Route 53 名称服务器的注册商记录。例如,如果您将域注册到不同帐户中的 Route 53 服务,请参阅 AWS 文档中的以下主题:添加或更改名称服务器或粘附记录
  6. 如果使用子域,请将其委托记录添加到父域中。这为子域赋予 Amazon Route 53 责任。按照父域的 DNS 供应商概述的委托程序。请参阅 创建使用 Amazon Route 53 作为 DNS 服务的子域,而无需迁移 AWS 文档 中的父域以获取示例高级流程。

2.1.1.1. AWS Route 53 的 Ingress Operator 端点配置

如果您在 Amazon Web Services(AWS)GovCloud(US)US-West 或 US-East 区域中安装,Ingress Operator 使用 us-gov-west-1 区域用于 Route53 并标记 API 客户端。

如果配置了带有字符串 'us-gov-east-1' 的自定义端点,Ingress Operator 使用 https://tagging.us-gov-west-1.amazonaws.com 作为 tagging API 端点。

有关 AWS GovCloud(US)端点的更多信息,请参阅 AWS 文档中的有关 GovCloud(US)的服务端点的内容。

重要

us-gov-east-1 区域中安装时,AWS GovCloud 不支持私有的、断开连接的安装。

Route 53 配置示例

platform:
  aws:
    region: us-gov-west-1
    serviceEndpoints:
    - name: ec2
      url: https://ec2.us-gov-west-1.amazonaws.com
    - name: elasticloadbalancing
      url: https://elasticloadbalancing.us-gov-west-1.amazonaws.com
    - name: route53
      url: https://route53.us-gov.amazonaws.com 1
    - name: tagging
      url: https://tagging.us-gov-west-1.amazonaws.com 2

1
对于所有两个 AWS GovCloud(US)区域,Route53 默认为 https://route53.us-gov.amazonaws.com
2
只有 US-West 区域有标记端点。如果集群位于另一个区域,则省略此参数。

2.1.2. AWS 帐户限值

OpenShift Container Platform 集群使用诸多 Amazon Web Services (AWS) 组件,默认的服务限值会影响您安装 OpenShift Container Platform 集群的能力。如果您使用特定的集群配置,在某些 AWS 区域部署集群,或者从您的帐户运行多个集群,您可能需要为 AWS 帐户请求其他资源。

下表总结了 AWS 组件,它们的限值可能会影响您安装和运行 OpenShift Container Platform 集群的能力。

组件默认可用的集群数默认 AWS 限值描述

实例限值

可变

可变

默认情况下,每个集群创建以下实例:

  • 一台 Bootstrap 机器,在安装后删除
  • 三个 control plane 节点(也称为 master 节点)
  • 三个 worker 节点

这些实例类型数量在新帐户的默认限值之内。若要部署更多 worker 节点、启用自动扩展、部署大型工作负载或使用不同的实例类型,请检查您的帐户限制,以确保集群可以部署您需要的机器。

在大多数区域中,bootstrap 和 worker 机器使用 m4.large 机器,control plane 机器使用 m4.xlarge 实例。在一些区域,包括所有不支持这些实例类型的区域,则使用 m5.largem5.xlarge 实例。

弹性 IP (EIP)

0 到 1

每个帐户 5 个 EIP

要在高可用性配置中置备集群,安装程序将为区域中的每个可用区创建一个公共和专用子网。每个专用子网都需要 NAT 网关,每个 NAT 网关需要单独的弹性 IP。查看 AWS 区域图来确定每个区域有多少个可用区。要利用默认高可用性,请在至少含有三个可用区的区域安装集群。要在有超过五个可用区的区域安装集群,您必须提高 EIP 限值。

重要

要使用 us-east-1 区域,必须提高您帐户的 EIP 限值。

虚拟私有云 (VPC)

5

每个区域 5 个 VPC

每个集群创建自己的 VPC。

弹性负载均衡 (ELB/NLB)

3

每个区域 20 个

在默认情况下,每个集群为 master API 服务器创建一个内部和外部网络负载均衡器,并为路由器创建一个典型的弹性负载均衡器。使用类型 LoadBalancer 部署更多 Kubernetes Service 对象将创建额外的负载均衡器

NAT 网关

5

每个可用区 5 个

集群在每个可用区中部署一个 NAT 网关。

弹性网络接口 (ENI)

至少 12 个

每个区域 350 个

默认安装创建 21 个 ENI,并为区域中的每个可用区创建一个 ENI。例如,us-east-1 区域包含六个可用区,因此在该区部署的集群将使用 27 个 ENI。查看 AWS 区域图来确定每个区域有多少个可用区。

针对根据集群使用情况和部署的工作负载创建的额外机器和弹性负载均衡器,为其创建额外的 ENI。

VPC 网关

20

每个帐户 20 个

每个集群创建一个 VPC 网关来访问 S3。

S3 存储桶

99

每个帐户有 100 个存储桶

因为安装过程会创建一个临时存储桶,并且每个集群中的 registry 组件会创建一个存储桶,所以您只能为每个 AWS 帐户创建 99 个 OpenShift Container Platform 集群。

安全组

250

每个帐户 2,500 个

每个集群创建 10 个不同的安全组。

2.1.3. 所需的 AWS 权限

注意

您的 IAM 用户必须具有 region us-east-1 s 中的 permissions tag:GetResources 才能删除基本集群资源。作为 AWS API 要求的一部分,OpenShift Container Platform 安装程序在此区域中执行各种操作。

AdministratorAccess 策略附加到您在 Amazon Web Services (AWS) 中创建的 IAM 用户时,授予该用户所有需要的权限。要部署 OpenShift Container Platform 集群的所有组件,IAM 用户需要以下权限:

例 2.1. 安装所需的 EC2 权限

  • tag:TagResources
  • tag:UntagResources
  • ec2:AllocateAddress
  • ec2:AssociateAddress
  • 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: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:ReleaseAddress
  • ec2:RevokeSecurityGroupEgress
  • ec2:RevokeSecurityGroupIngress
  • ec2:RunInstances
  • ec2:TerminateInstances

例 2.2. 安装过程中创建网络资源所需的权限

  • 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,您的帐户不需要这些权限来创建网络资源。

例 2.3. 安装所需的 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

例 2.4. 安装所需的 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

例 2.5. 安装所需的 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 帐户中创建弹性负载均衡器(ELB),IAM 用户还需要 iam:CreateServiceLinkedRole 权限。

例 2.6. 安装所需的 Route 53 权限

  • route53:ChangeResourceRecordSets
  • route53:ChangeTagsForResource
  • route53:CreateHostedZone
  • route53:DeleteHostedZone
  • route53:GetChange
  • route53:GetHostedZone
  • route53:ListHostedZones
  • route53:ListHostedZonesByName
  • route53:ListResourceRecordSets
  • route53:ListTagsForResource
  • route53:UpdateHostedZoneComment

例 2.7. 安装所需的 S3 权限

  • s3:CreateBucket
  • s3:DeleteBucket
  • s3:GetAccelerateConfiguration
  • s3:GetBucketAcl
  • s3:GetBucketCors
  • s3:GetBucketLocation
  • s3:GetBucketLogging
  • 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

例 2.8. 集群 Operators 所需的 S3 权限

  • s3:DeleteObject
  • s3:GetObject
  • s3:GetObjectAcl
  • s3:GetObjectTagging
  • s3:GetObjectVersion
  • s3:PutObject
  • s3:PutObjectAcl
  • s3:PutObjectTagging

例 2.9. 删除基本集群资源所需的权限

  • autoscaling:DescribeAutoScalingGroups
  • 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

例 2.10. 删除网络资源所需的权限

  • ec2:DeleteDhcpOptions
  • ec2:DeleteInternetGateway
  • ec2:DeleteNatGateway
  • ec2:DeleteRoute
  • ec2:DeleteRouteTable
  • ec2:DeleteSubnet
  • ec2:DeleteVpc
  • ec2:DeleteVpcEndpoints
  • ec2:DetachInternetGateway
  • ec2:DisassociateRouteTable
  • ec2:ReplaceRouteTableAssociation
注意

如果您使用现有的 VPC,您的帐户不需要这些权限来删除网络资源。

例 2.11. 创建清单所需的额外 IAM 和 S3 权限

  • iam:DeleteAccessKey
  • iam:DeleteUser
  • iam:DeleteUserPolicy
  • iam:GetUserPolicy
  • iam:ListAccessKeys
  • iam:PutUserPolicy
  • iam:TagUser
  • iam:GetUserPolicy
  • iam:ListAccessKeys
  • s3:PutBucketPublicAccessBlock
  • s3:GetBucketPublicAccessBlock
  • s3:PutLifecycleConfiguration
  • s3:HeadBucket
  • s3:ListBucketMultipartUploads
  • s3:AbortMultipartUpload
注意

如果您要使用 mint 模式管理云供应商凭证,IAM 用户还需要 The iam:CreateAccessKey and iam:CreateUser 权限。

例 2.12. 安装时配额检查的可选权限

  • servicequotas:ListAWSDefaultServiceQuotas

2.1.4. 创建 IAM 用户

每个 Amazon Web Services (AWS) 帐户都包含一个根用户帐户,它基于您用来创建帐户的电子邮件地址。这是一个高权限帐户,建议仅用于初始帐户和账单配置、创建初始用户集,以及保护帐户安全。

在安装 OpenShift Container Platform 之前,请创建一个辅助 IAM 管理用户。完成 AWS 文档中所述的在 AWS 帐户中创建 IAM 用户流程时,请设置以下选项:

流程

  1. 指定 IAM 用户名并选择 Programmatic access
  2. 附加 AdministratorAccess 策略,以确保帐户有充足的权限来创建集群。此策略让集群能够为每个 OpenShift Container Platform 组件授予凭证。集群只为组件授予它们需要的凭证。

    注意

    虽然可以创建赋予所有所需 AWS 权限的策略并将其附加到用户,但这不是首选的选项。集群将无法为各个组件授予额外的凭证,因此所有组件都使用相同的凭证。

  3. 可选:通过附加标签向用户添加元数据。
  4. 确认您指定的用户名被授予了 AdministratorAccess 策略。
  5. 记录访问密钥 ID 和 Secret 访问密钥值。在配置本地机器时,您必须使用这些值来运行安装程序。

    重要

    在部署集群时,您无法在使用多因素验证设备来验证 AWS 的同时使用您生成的临时会话令牌。在集群的整个生命周期中,集群会持续使用您的当前 AWS 凭证来创建 AWS 资源,因此您必须使用基于密钥的长期凭证。

其他资源

  • 有关在安装前将 Cloud Credential Operator(CCO)设置为手动模式的步骤,请参阅手动为 AWS 创建 IAM。在无法使用云身份和访问管理(IAM)API 的环境里,或不希望将管理员级别的凭证 secret 保存在集群 kube-system 项目中时,可以使用这个模式。

2.1.5. 支持的 AWS 区域

您可以将 OpenShift Container Platform 集群部署到以下公共区域:

注意

您的 IAM 用户必须具有 region us-east-1 s 中的 permissions tag:GetResources 才能删除基本集群资源。作为 AWS API 要求的一部分,OpenShift Container Platform 安装程序在此区域中执行各种操作。

  • af-south-1 (Cape Town)
  • ap-east-1 (Hong Kong)
  • ap-northeast-1 (Tokyo)
  • ap-northeast-2 (Seoul)
  • ap-northeast-3 (Osaka)
  • ap-south-1 (Mumbai)
  • ap-southeast-1 (Singapore)
  • ap-southeast-2 (Sydney)
  • ca-central-1 (Central)
  • eu-central-1 (Frankfurt)
  • eu-north-1 (Stockholm)
  • eu-south-1 (Milan)
  • eu-west-1 (Ireland)
  • eu-west-2 (London)
  • eu-west-3 (Paris)
  • me-south-1 (Bahrain)
  • sa-east-1 (São Paulo)
  • us-east-1 (N. Virginia)
  • us-east-2 (Ohio)
  • us-west-1 (N. California)
  • us-west-2 (Oregon)

支持以下 AWS GovCloud 区域:

  • us-gov-west-1
  • us-gov-east-1

2.1.6. 后续步骤

  • 安装 OpenShift Container Platform 集群: