第 5 章 使用出口锁定在 AWS 集群上创建 Red Hat OpenShift Service
使用出口锁定在 AWS 集群上创建 Red Hat OpenShift Service 提供了一种方式,以便在集群无法访问互联网时,通过允许集群在本地区域中使用镜像 registry 来增强集群的稳定性和安全性。您的集群将尝试从 Quay 中拉取镜像,但在未达到时,它将从本地区域中的镜像 registry 中拉取镜像。
您只能在使用以下 AWS 区域的集群中使用出口锁定:
-
us-west-1
-
us-west-2
-
us-east-1
-
us-east-2
-
ap-northeast-1
-
ap-northeast-2
-
ap-northeast-3
-
ap-south-1
-
ap-southeast-1
-
ap-southeast-2
-
ca-central-1
-
eu-central-1
-
eu-north-1
-
eu-west-1
-
eu-west-2
-
eu-west-3
-
sa-east-1
具有出口锁定的所有公共和私有集群从位于集群本地区域的注册中获取红帽容器镜像,而不是从不同端点收集这些镜像,并在互联网上注册。您可以通过配置虚拟私有云(VPC)并在创建集群时使用- properties zero_egress:true
标志来创建不需要公共出口的完整集群。
出口锁定只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 您有一个有足够权限的 AWS 帐户来创建 VPC、子网和其他所需的基础架构。
- 已安装 Terraform v1.4.0+ CLI。
- 已安装 ROSA v1.2.45+ CLI。
- 已使用所需凭证安装和配置 AWS CLI。
- 已安装 git CLI。
您可以使用托管 control plane 架构的所有支持的 Red Hat OpenShift Service 版本中的出口锁定。但是,红帽建议为每个 OpenShift Container Platform 版本使用最新的可用 z-stream 版本。
虽然您可以像常规集群一样安装和升级集群,但由于内部镜像 registry 的功能在断开连接的环境中,使用出口锁定的集群将无法完全使用所有平台组件,如镜像 registry。您可以在升级或安装集群时使用最新的 ROSA 版本恢复这些功能。
5.1. 为您的出口锁定 ROSA 使用 HCP 集群创建虚拟私有云
您必须有一个 Virtual Private Cloud (VPC)才能使用 HCP 集群创建 ROSA。您可以使用以下方法之一创建 VPC:
- 使用 Terraform 模板创建 VPC
- 在 AWS 控制台中手动创建 VPC 资源
Terraform 指令用于测试和演示目的。您自己的安装需要根据您的特定需求和限制对 VPC 进行修改。您还应确保使用以下 Terraform 脚本,它位于您要安装集群的同一区域。
5.1.1. 使用 Terraform 创建虚拟私有云
Terraform 是一个工具,允许您使用已建立的模板创建各种资源。以下过程使用默认选项来创建带有 HCP 集群的 ROSA。有关使用 Terraform 的更多信息,请参阅其他资源。
先决条件
- 您已在机器上安装 Terraform 版本 1.4.0 或更新版本。
- 您已在机器上安装了 Git。
流程
运行以下命令,打开 shell 提示符并克隆 Terraform VPC 存储库:
$ git clone https://github.com/openshift-cs/terraform-vpc-example
运行以下命令进入创建的目录:
$ cd terraform-vpc-example/zero-egress
运行以下命令来启动 Terraform 文件:
$ terraform init
此进程完成后会出现确认初始化的消息。
要基于现有的 Terraform 模板构建 VPC Terraform 计划,请运行
plan
命令。您必须包含 AWS 区域、可用区、CIDR 块和专用子网。您可以选择指定集群名称。terraform
计划完成后,rosa-zero-egress.tfplan
文件被添加到hypershift-tf
目录中。有关更详细的选项,请参阅 Terraform VPC 存储库的 README 文件。$ terraform plan -out rosa-zero-egress.tfplan -var region=<aws_region> \ 1 -var 'availability_zones=["aws_region_1a","aws_region_1b","aws_region_1c"]'\ 2 -var vpc_cidr_block=10.0.0.0/16 \ 3 -var 'private_subnets=["10.0.0.0/24", "10.0.1.0/24", "10.0.2.0/24"]' 4
- 1
- 输入 AWS 区域。重要
您只能在使用 us-west-1,
us-west-1, us-east-1, us-east-1, us-east-2, ap-northeast-1, ap-northeast-2, ap-northeast-2, ap-northeast-3, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, eu-central-1, eu-west-1, eu-west-1, eu-west-1, eu-west
-1, ap-east-1,
us-east-1 - 2
- 输入 VPC 的可用区。例如,对于使用
ap-southeast-1
的 VPC,您可以使用以下内容作为可用区:["ap-southeast-1a", "ap-southeast-1b", "ap-southeast-1c"]
。 - 3
- 输入 VPC 的 CIDR 块。
- 4
- 输入为 VPC 创建的每个子网。
运行以下命令应用此计划文件来构建 VPC:
$ terraform apply rosa-zero-egress.tfplan
其他资源
- 如需了解自定义 VPC 时可用的选项的详细列表,请参阅 Zero Egress Terraform VPC 示例 存储库。
5.1.2. 手动创建虚拟私有云
如果您选择手动创建 Virtual Private Cloud (VPC)而不是使用 Terraform,请访问 AWS 控制台中的 VPC 页面。您的 VPC 必须满足下表中显示的要求。
要求 | 详情 |
---|---|
VPC 名称 | 创建集群时需要具有特定的 VPC 名称和 ID。 |
CIDR 范围 | 您的 VPC CIDR 范围应该与您的机器 CIDR 匹配。 |
可用区 | 单个区需要一个可用区,对于多区的可用区需要三个可用区。 |
公共子网 | 您必须有一个公共子网,其中包含公共集群的互联网网关。 |
专用子网 | 您必须在每个可用区(AZ)中只有一个专用子网,才能在 ROSA HCP 集群中安装机器池。NAT 网关可以与此子网关联,以允许实例的出站互联网访问。私有集群不需要公共子网。 |
DNS 主机名和解析 | 您必须确保启用 DNS 主机名和解析。 |
标记您的子网
在使用 VPC 创建使用 HCP 集群的 ROSA 之前,您必须标记 VPC 子网。在使用这些资源前,自动化服务 preflight 检查会验证这些资源是否已正确标记。下表显示了您的资源应如何标记为以下内容:
资源 | 键 | 值 |
---|---|---|
公共子网 |
|
|
专用子网 |
|
|
您必须至少标记一个专用子网,如果适用,以及一个公共子网。
先决条件
- 您已创建了 VPC。
-
已安装
aws
CLI。
流程
运行以下命令在终端中标记您的资源:
对于公共子网,请运行:
$ aws ec2 create-tags --resources <public-subnet-id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
对于专用子网,请运行:
$ aws ec2 create-tags --resources <private-subnet-id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
验证
运行以下命令验证标签是否已正确应用:
$ aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
输出示例
TAGS Name <subnet-id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet-id> subnet 1
配置 AWS 安全组和 PrivateLink 连接
创建 VPC 后,创建 AWS 安全组和 VPC 端点。
流程
运行以下命令来创建 AWS 安全组:
$ aws ec2 create-security-group \ --group-name allow-inbound-traffic \ --description "allow inbound traffic" \ --vpc-id <vpc_id> \ 1 --region <aws_region> \ 2
运行以下命令,授予对安全组的 ingress 的访问权限:
$ aws ec2 authorize-security-group-ingress \ --group-id <group_id> \ 1 --protocol -1 \ --port 0-0 \ --cidr <vpc_cidr> \ 2 --region <aws_region> \ 3
运行以下命令来创建 STS VPC 端点:
$ aws ec2 create-vpc-endpoint \ --vpc-id <vpc_id> \ 1 --service-name com.amazonaws.<aws_region>.sts \ 2 --vpc-endpoint-type Interface
运行以下命令来创建 ECR VPC 端点:
$ aws ec2 create-vpc-endpoint \ --vpc-id <vpc_id> \ --service-name com.amazonaws.<aws_region>.ecr.dkr \ 1 --vpc-endpoint-type Interface
- 1
- 输入 VPC 所在的 AWS 区域。
运行以下命令来创建 S3 VPC 端点:
$ aws ec2 create-vpc-endpoint \ --vpc-id <vpc_id> \ --service-name com.amazonaws.<aws_region>.s3