7.2. 为 Red Hat OpenShift Service on AWS 集群创建虚拟私有云
您必须具有 Virtual Private Cloud (VPC)才能在 AWS 集群上创建 Red Hat OpenShift Service。要通过 VPC 端点从本地 ECR 镜像拉取镜像,您必须配置 privatelink 服务连接,并使用特定标签修改默认安全组。使用以下方法之一创建 VPC:
- 使用 ROSA 命令行界面(CLI)创建 VPC
- 使用 Terraform 模板创建 VPC
- 使用 AWS CLI 创建 VPC
- 在 AWS 控制台中手动创建 VPC 资源
7.2.1. 使用 ROSA CLI 创建 AWS VPC 复制链接链接已复制到粘贴板!
rosa create network
命令在 ROSA CLI 的 v.1.2.48 或更高版本中提供。命令使用 AWS CloudFormation 创建 VPC 以及在 AWS 集群上安装 Red Hat OpenShift Service 所需的相关网络组件。CloudFormation 是一个原生 AWS 基础架构即代码工具,与 AWS CLI 兼容。
如果没有指定模板,CloudFormation 将使用以下参数来创建资源的默认模板:
VPC 参数 | value |
---|---|
可用区 | 1 |
区域 |
|
VPC CIDR |
|
您可以创建和自定义 CloudFormation 模板,以用于 rosa create network
命令。如需有关默认 VPC 模板的信息,请参阅本节的其他资源。
先决条件
- 您已配置了 AWS 帐户
- 您已配置了您的红帽帐户
- 已安装 ROSA CLI 并将其配置为最新版本
验证
完成后,您会收到创建的资源概述:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
标记子网
在使用 VPC 创建 Red Hat OpenShift Service on AWS 集群前,您必须标记 VPC 子网。自动服务 preflight 检查验证这些资源是否已正确标记。下表显示了如何标记您的资源:
资源 | 键 | value |
---|---|---|
公共子网 |
|
|
专用子网 |
|
|
如果需要,您必须至少标记一个专用子网和一个公共子网。
在终端中标记您的资源:
对于公共子网,运行以下命令:
aws ec2 create-tags --resources <public_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
$ aws ec2 create-tags --resources <public_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于专用子网,运行以下命令:
aws ec2 create-tags --resources <private_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
$ aws ec2 create-tags --resources <private_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证标签是否正确:
aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
$ aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
TAGS Name <subnet_id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet_id> subnet 1
TAGS Name <subnet_id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet_id> subnet 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2. 使用 Terraform 创建虚拟私有云 复制链接链接已复制到粘贴板!
Terraform 是一个工具,可让您使用已建立的模板创建各种资源。以下流程根据需要使用默认选项在 AWS 集群上创建 Red Hat OpenShift Service。有关使用 Terraform 的更多信息,请参阅其他资源。
Terraform 指令用于测试和演示目的。您自己的安装需要对 VPC 的一些修改才能自行使用。您还应确保使用此 Terraform 脚本时,它位于您要安装集群的同一区域。这些示例使用 us-east-2
。
先决条件
- 您已在机器上安装 Terraform 版本 1.4.0 或更新版本。
- 您已在机器上安装了 Git。
流程
运行以下命令,打开 shell 提示符并克隆 Terraform VPC 存储库:
git clone https://github.com/openshift-cs/terraform-vpc-example
$ git clone https://github.com/openshift-cs/terraform-vpc-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来进入创建的目录:
cd terraform-vpc-example/zero-egress
$ cd terraform-vpc-example/zero-egress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来启动 Terraform 文件:
terraform init
$ terraform init
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在此过程完成后会显示确认初始化的消息。
要根据现有的 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> \ -var 'availability_zones=["aws_region_1a","aws_region_1b","aws_region_1c"]'\ -var vpc_cidr_block=10.0.0.0/16 \ -var 'private_subnets=["10.0.0.0/24", "10.0.1.0/24", "10.0.2.0/24"]'
$ 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 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令应用此计划文件来构建 VPC:
terraform apply rosa-zero-egress.tfplan
$ terraform apply rosa-zero-egress.tfplan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
标记子网
在使用 VPC 创建 Red Hat OpenShift Service on AWS 集群前,您必须标记 VPC 子网。自动服务 preflight 检查验证这些资源是否已正确标记。下表显示了如何标记您的资源:
资源 | 键 | value |
---|---|---|
公共子网 |
|
|
专用子网 |
|
|
如果需要,您必须至少标记一个专用子网和一个公共子网。
在终端中标记您的资源:
对于公共子网,运行以下命令:
aws ec2 create-tags --resources <public_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
$ aws ec2 create-tags --resources <public_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于专用子网,运行以下命令:
aws ec2 create-tags --resources <private_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
$ aws ec2 create-tags --resources <private_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证标签是否正确:
aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
$ aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
TAGS Name <subnet_id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet_id> subnet 1
TAGS Name <subnet_id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet_id> subnet 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3. 使用 AWS CLI 创建 VPC 复制链接链接已复制到粘贴板!
您可以使用 AWS CLI 创建 VPC。有关使用此 CLI 的详情,请查看 AWS create-vpc 文档。
7.2.4. 手动创建 AWS Virtual Private Cloud 复制链接链接已复制到粘贴板!
如果您选择手动创建 AWS Virtual Private Cloud (VPC)而不是使用 Terraform,请访问 AWS 控制台中的 VPC 页面。
您的 VPC 必须满足下表中显示的要求。
要求 | 详情 |
---|---|
VPC 名称 | 创建集群时,您需要具有特定的 VPC 名称和 ID。 |
CIDR 范围 | 您的 VPC CIDR 范围应该与您的机器 CIDR 匹配。 |
可用区 | 您需要一个区域的可用区,并且需要三个用于多区的可用区。 |
公共子网 | 您必须有一个公共子网,其中包含公共集群的 NAT 网关。私有集群不需要公共子网。 |
DNS 主机名和解析 | 您必须确保启用 DNS 主机名和解析。 |
标记子网
在使用 VPC 创建 Red Hat OpenShift Service on AWS 集群前,您必须标记 VPC 子网。自动服务 preflight 检查验证这些资源是否已正确标记。下表显示了如何标记您的资源:
资源 | 键 | value |
---|---|---|
公共子网 |
|
|
专用子网 |
|
|
如果需要,您必须至少标记一个专用子网和一个公共子网。
在终端中标记您的资源:
对于公共子网,运行以下命令:
aws ec2 create-tags --resources <public_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
$ aws ec2 create-tags --resources <public_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于专用子网,运行以下命令:
aws ec2 create-tags --resources <private_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
$ aws ec2 create-tags --resources <private_subnet_id> --region <aws_region> --tags Key=kubernetes.io/role/internal-elb,Value=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证标签是否正确:
aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
$ aws ec2 describe-tags --filters "Name=resource-id,Values=<subnet_id>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
TAGS Name <subnet_id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet_id> subnet 1
TAGS Name <subnet_id> subnet <prefix>-subnet-public1-us-east-1a TAGS kubernetes.io/role/elb <subnet_id> subnet 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow