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

  • AWS::EC2::VPC
  • AWS::EC2::VPCEndpoint

您必须提供一个公共 VPC 供集群使用。VPC 使用引用每个子网的路由表的端点,以改进与托管在 S3 中的 registry 的通信。

公共子网

  • AWS::EC2::Subnet
  • AWS::EC2::SubnetNetworkAclAssociation

您的 VPC 必须有 1 到 3 个可用区的公共子网,并将其与适当的入口规则关联。

互联网网关

  • AWS::EC2::InternetGateway
  • AWS::EC2::VPCGatewayAttachment
  • AWS::EC2::RouteTable
  • AWS::EC2::Route
  • AWS::EC2::SubnetRouteTableAssociation
  • AWS::EC2::NatGateway
  • AWS::EC2::EIP

您必须有一个公共互联网网关,以及附加到 VPC 的公共路由。在提供的模板中,每个公共子网都有一个具有 EIP 地址的 NAT 网关。这些 NAT 网关允许集群资源(如专用子网实例)访问互联网,而有些受限网络或代理场景则不需要它们。

网络访问控制

  • AWS::EC2::NetworkAcl
  • AWS::EC2::NetworkAclEntry

您必须允许 VPC 访问下列端口:

端口

原因

80

入站 HTTP 流量

443

入站 HTTPS 流量

22

入站 SSH 流量

1024 - 65535

入站临时流量

0 - 65535

出站临时流量

专用子网

  • AWS::EC2::Subnet
  • AWS::EC2::RouteTable
  • AWS::EC2::SubnetRouteTableAssociation

您的 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

AWS::Route53::HostedZone

内部 DNS 的托管区。

公共负载均衡器

AWS::ElasticLoadBalancingV2::LoadBalancer

公共子网的负载均衡器。

外部 API 服务器记录

AWS::Route53::RecordSetGroup

外部 API 服务器的别名记录。

外部监听程序

AWS::ElasticLoadBalancingV2::Listener

为外部负载均衡器监听端口 6443 的监听程序。

外部目标组

AWS::ElasticLoadBalancingV2::TargetGroup

外部负载均衡器的目标组。

专用负载均衡器

AWS::ElasticLoadBalancingV2::LoadBalancer

专用子网的负载均衡器。

内部 API 服务器记录

AWS::Route53::RecordSetGroup

内部 API 服务器的别名记录。

内部监听程序

AWS::ElasticLoadBalancingV2::Listener

为内部负载均衡器监听端口 22623 的监听程序。

内部目标组

AWS::ElasticLoadBalancingV2::TargetGroup

内部负载均衡器的目标组。

内部监听程序

AWS::ElasticLoadBalancingV2::Listener

为内部负载均衡器监听端口 6443 的监听程序。

内部目标组

AWS::ElasticLoadBalancingV2::TargetGroup

内部负载均衡器的目标组。

安全组

control plane 和 worker 机器需要访问下列端口:

类型IP 协议端口范围

MasterSecurityGroup

AWS::EC2::SecurityGroup

icmp

0

tcp

22

tcp

6443

tcp

22623

WorkerSecurityGroup

AWS::EC2::SecurityGroup

icmp

0

tcp

22

BootstrapSecurityGroup

AWS::EC2::SecurityGroup

tcp

22

tcp

19531

control plane 入口

control plane 机器需要以下入口组。每个入口组都是 AWS::EC2::SecurityGroupIngress 资源。

入口组描述IP 协议端口范围

MasterIngressEtcd

etcd

tcp

2379- 2380

MasterIngressVxlan

Vxlan 数据包

udp

4789

MasterIngressWorkerVxlan

Vxlan 数据包

udp

4789

MasterIngressInternal

内部集群通信和 Kubernetes 代理指标

tcp

9000 - 9999

MasterIngressWorkerInternal

内部集群通信

tcp

9000 - 9999

MasterIngressKube

kubernetes kubelet、调度程序和控制器管理器

tcp

10250 - 10259

MasterIngressWorkerKube

kubernetes kubelet、调度程序和控制器管理器

tcp

10250 - 10259

MasterIngressIngressServices

Kubernetes 入口服务

tcp

30000 - 32767

MasterIngressWorkerIngressServices

Kubernetes 入口服务

tcp

30000 - 32767

MasterIngressGeneve

Geneve 包

udp

6081

MasterIngressWorkerGeneve

Geneve 包

udp

6081

MasterIngressIpsecIke

IPsec IKE 数据包

udp

500

MasterIngressWorkerIpsecIke

IPsec IKE 数据包

udp

500

MasterIngressIpsecNat

IPsec NAT-T 数据包

udp

4500

MasterIngressWorkerIpsecNat

IPsec NAT-T 数据包

udp

4500

MasterIngressIpsecEsp

IPsec ESP 数据包

50

All

MasterIngressWorkerIpsecEsp

IPsec ESP 数据包

50

All

MasterIngressInternalUDP

内部集群通信

udp

9000 - 9999

MasterIngressWorkerInternalUDP

内部集群通信

udp

9000 - 9999

MasterIngressIngressServicesUDP

Kubernetes 入口服务

udp

30000 - 32767

MasterIngressWorkerIngressServicesUDP

Kubernetes 入口服务

udp

30000 - 32767

worker 入口

worker 机器需要以下入口组。每个入口组都是 AWS::EC2::SecurityGroupIngress 资源。

入口组描述IP 协议端口范围

WorkerIngressVxlan

Vxlan 数据包

udp

4789

WorkerIngressWorkerVxlan

Vxlan 数据包

udp

4789

WorkerIngressInternal

内部集群通信

tcp

9000 - 9999

WorkerIngressWorkerInternal

内部集群通信

tcp

9000 - 9999

WorkerIngressKube

Kubernetes kubelet、调度程序和控制器管理器

tcp

10250

WorkerIngressWorkerKube

Kubernetes kubelet、调度程序和控制器管理器

tcp

10250

WorkerIngressIngressServices

Kubernetes 入口服务

tcp

30000 - 32767

WorkerIngressWorkerIngressServices

Kubernetes 入口服务

tcp

30000 - 32767

WorkerIngressGeneve

Geneve 包

udp

6081

WorkerIngressMasterGeneve

Geneve 包

udp

6081

WorkerIngressIpsecIke

IPsec IKE 数据包

udp

500

WorkerIngressMasterIpsecIke

IPsec IKE 数据包

udp

500

WorkerIngressIpsecNat

IPsec NAT-T 数据包

udp

4500

WorkerIngressMasterIpsecNat

IPsec NAT-T 数据包

udp

4500

WorkerIngressIpsecEsp

IPsec ESP 数据包

50

All

WorkerIngressMasterIpsecEsp

IPsec ESP 数据包

50

All

WorkerIngressInternalUDP

内部集群通信

udp

9000 - 9999

WorkerIngressMasterInternalUDP

内部集群通信

udp

9000 - 9999

WorkerIngressIngressServicesUDP

Kubernetes 入口服务

udp

30000 - 32767

WorkerIngressMasterIngressServicesUDP

Kubernetes 入口服务

udp

30000 - 32767

角色和实例配置集

您必须在 AWS 中为机器授予权限。提供的 CloudFormation 模板为以下 AWS::IAM::Role 对象授予机器 Allow 权限,并为每一组角色提供一个 AWS::IAM::InstanceProfile。如果不使用模板,您可以为机器授予以下宽泛权限或单独权限。

角色影响操作资源

Master

Allow

ec2:*

*

Allow

elasticloadbalancing:*

*

Allow

iam:PassRole

*

Allow

s3:GetObject

*

Worker

Allow

ec2:Describe*

*

bootstrap

Allow

ec2:Describe*

*

Allow

ec2:AttachVolume

*

Allow

ec2:DetachVolume

*

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:CreateAccessKeyiam:CreateUser 权限。

例 15.15. 实例的可选权限和安装配额检查

  • ec2:DescribeInstanceTypeOfferings
  • servicequotas:ListAWSDefaultServiceQuotas
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.