×

创建具有出口锁定功能的 AWS 集群上的 Red Hat OpenShift Service 提供了一种方法,可以通过允许集群在无法访问互联网时使用本地区域中的镜像注册表来增强集群的稳定性和安全性。您的集群将尝试从 Quay 拉取镜像,但如果无法访问,则将从本地区域的镜像注册表中拉取镜像。所有具有出口锁定的公共和私有集群都从位于集群本地区域的注册表获取其 Red Hat 容器镜像,而不是从互联网上的各种端点和注册表收集这些镜像。您可以通过配置虚拟私有云 (VPC) 并在创建集群时使用 `--properties zero_egress:true` 标志来创建无需公共出口即可完全运行的集群。

出口锁定仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供了对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

先决条件
  • 您拥有一个 AWS 帐户,具有创建 VPC、子网和其他所需基础设施的足够权限。

  • 您已安装 Terraform v1.4.0+ CLI。

  • 您已安装 ROSA v1.2.45+ CLI。

  • 您已安装并配置了具有必要凭据的 AWS CLI。

  • 您已安装 git CLI。

您可以在使用托管控制平面架构的所有受支持版本的 Red Hat OpenShift Service on AWS 上使用出口锁定;但是,Red Hat 建议为每个 OpenShift Container Platform 版本使用最新的可用 z 流版本。

虽然您可以像安装常规集群一样安装和升级集群,但由于上游问题导致内部镜像注册表在脱机环境中的功能受到限制,因此使用出口锁定的集群将无法完全使用所有平台组件,例如镜像注册表。在升级或安装集群时,您可以使用最新的 ROSA 版本来恢复这些功能。

为您的出口锁定 ROSA 与 HCP 集群创建虚拟私有云

您必须拥有虚拟私有云 (VPC) 才能创建 ROSA 与 HCP 集群。您可以使用以下方法之一创建 VPC

  • 使用 Terraform 模板创建 VPC

  • 在 AWS 控制台中手动创建 VPC 资源

Terraform 指令用于测试和演示目的。您自己的安装需要根据您的特定需求和约束修改 VPC。您还应确保在使用以下 Terraform 脚本时,它位于您打算安装集群的同一区域。在以下示例中,使用 `us-east-2`。

使用 Terraform 创建虚拟私有云

Terraform 是一种允许您使用既定模板创建各种资源的工具。以下过程使用创建 ROSA 与 HCP 集群所需的默认选项。有关使用 Terraform 的更多信息,请参阅其他资源。

先决条件
  • 您已在您的机器上安装了 1.4.0 或更高版本的 Terraform。

  • 您已在您的机器上安装了 Git。

步骤
  1. 打开 shell 提示符并通过运行以下命令克隆 Terraform VPC 存储库

    $ git clone https://github.com/openshift-cs/terraform-vpc-example
  2. 通过运行以下命令导航到已创建的目录

    $ cd terraform-vpc-example/zero-egress
  3. 通过运行以下命令初始化 Terraform 文件

    $ terraform init

    此过程完成后,将显示一条确认初始化的消息。

  4. 要根据现有的 Terraform 模板构建您的 VPC Terraform 计划,请运行 `plan` 命令。您必须包含您的 AWS 区域、可用区、CIDR 块和私有子网。您可以选择指定集群名称。`terraform plan` 完成后,`rosa-zero-egress.tfplan` 文件将添加到 `hypershift-tf` 目录中。有关更详细的选项,请参阅 Terraform VPC 存储库的自述文件

    $ 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 区域。
    2 输入 VPC 的可用区。例如,对于使用ap-southeast-1的 VPC,可用区应如下所示:["ap-southeast-1a", "ap-southeast-1b", "ap-southeast-1c"]
    3 输入您的 VPC 的 CIDR 块。
    4 输入为 VPC 创建的每个子网。
  5. 运行以下命令,应用此计划文件来构建您的 VPC

    $ terraform apply rosa-zero-egress.tfplan
附加资源

手动创建虚拟私有云

如果您选择手动创建虚拟私有云 (VPC) 而不是使用 Terraform,请访问AWS 控制台中的 VPC 页面。您的 VPC 必须满足下表中显示的要求。

表 1. VPC 的要求
要求 详情

VPC 名称

创建集群时,您需要具有特定的 VPC 名称和 ID。

CIDR 范围

您的 VPC CIDR 范围应与您的机器 CIDR 匹配。

可用区

单可用区需要一个可用区,多可用区需要三个可用区。

公共子网

对于公共集群,您必须拥有一个具有互联网网关的公共子网。

私有子网

在 ROSA HCP 集群中安装机器池时,您必须在每个可用区 (AZ) 中拥有一个私有子网。可以将 NAT 网关与该子网关联,以允许实例进行出站互联网访问。私有集群不需要公共子网。

DNS 主机名和解析

您必须确保已启用 DNS 主机名和解析。

标记您的子网

在使用您的 VPC 创建具有 HCP 集群的 ROSA 之前,您必须标记您的 VPC 子网。自动化服务预检检查会在您使用这些资源之前验证这些资源是否已正确标记。下表显示了应如何标记您的资源

资源

公共子网

kubernetes.io/role/elb

1 或无值

私有子网

kubernetes.io/role/internal-elb

1 或无值

您必须至少标记一个私有子网,如果适用,还要标记一个公共子网。

先决条件
  • 您已创建 VPC。

  • 您已安装aws CLI。

步骤
  1. 通过运行以下命令在您的终端中标记您的资源

    1. 对于公共子网,请运行

      $ aws ec2 create-tags --resources <public-subnet-id> --region <aws_region> --tags Key=kubernetes.io/role/elb,Value=1
    2. 对于私有子网,请运行

      $ 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 端点。

步骤
  1. 通过运行以下命令创建 AWS 安全组

    $ aws ec2 create-security-group \
            --group-name allow-inbound-traffic \
            --description "allow inbound traffic" \
            --vpc-id <vpc_id> \ (1)
            --region <aws_region> \ (2)
    1 输入您的 VPC 的 ID。
    2 输入安装 VPC 的 AWS 区域。
  2. 通过运行以下命令授予安全组的入口访问权限

    $ aws ec2 authorize-security-group-ingress \
            --group-id <group_id> \ (1)
            --protocol -1 \
            --port 0-0 \
            --cidr <vpc_cidr> \ (2)
            --region <aws_region> \ (3)
    1 --group-id 使用前面命令创建的安全组的 ID。
    2 输入您的 VPC 的 CIDR。
    3 安装 VPC 的 AWS 区域
  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
    1 输入您的 VPC 的 ID。
    2 输入安装 VPC 的 AWS 区域。
  4. 通过运行以下命令创建您的 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 区域。
  5. 通过运行以下命令创建您的 S3 VPC 端点

    $ aws ec2 create-vpc-endpoint \
        --vpc-id <vpc_id> \
        --service-name com.amazonaws.<aws_region>.s3

创建帐户范围的 STS 角色和策略

在使用 Red Hat OpenShift Service on AWS (ROSA) CLI (rosa) 创建具有托管控制平面 (HCP) 集群的 Red Hat OpenShift Service on AWS (ROSA) 之前,请创建所需的帐户范围角色和策略,包括 Operator 策略。

ROSA 与 HCP 集群需要附加了 AWS 托管策略的帐户和 Operator 角色。不支持客户管理的策略。有关 ROSA 与 HCP 集群的 AWS 托管策略的更多信息,请参阅ROSA 帐户角色的 AWS 托管策略

先决条件
  • 您已完成 ROSA 与 HCP 的 AWS 预先要求。

  • 您有可用的 AWS 服务配额。

  • 您已在 AWS 控制台中启用 ROSA 服务。

  • 您已在安装主机上安装并配置了最新的 ROSA CLI (rosa)。

  • 您已使用 ROSA CLI 登录到您的 Red Hat 帐户。

步骤
  1. 如果它们不存在于您的 AWS 帐户中,请通过运行以下命令创建所需的帐户范围 STS 角色并附加策略

    $ rosa create account-roles --hosted-cp
  2. 确保您的工作程序角色具有正确的 AWS 策略,方法是运行以下命令

    $ aws iam attach-role-policy \
    --role-name ManagedOpenShift-HCP-ROSA-Worker-Role \ (1)
    --policy-arn "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
    1 此角色需要包含在前面步骤中创建的前缀。
  3. 可选:通过运行以下命令将您的前缀设置为环境变量

    $ export ACCOUNT_ROLES_PREFIX=<account_role_prefix>
    • 通过运行以下命令查看变量的值

      $ echo $ACCOUNT_ROLES_PREFIX
      示例输出
      ManagedOpenShift

有关 ROSA 的 AWS 托管 IAM 策略的更多信息,请参阅ROSA 的 AWS 托管 IAM 策略

创建 OpenID Connect 配置

使用 Red Hat OpenShift Service on AWS 集群时,您可以在创建集群之前创建 OpenID Connect (OIDC) 配置。此配置已注册以与 OpenShift Cluster Manager 一起使用。

先决条件
  • 您已在安装主机上安装并配置了最新的 Red Hat OpenShift Service on AWS (ROSA) CLI,即rosa

步骤
  1. 要与 AWS 资源一起创建您的 OIDC 配置,请运行以下命令

    $ rosa create oidc-config --mode=auto --yes

    此命令返回以下信息。

    示例输出
    ? Would you like to create a Managed (Red Hat hosted) OIDC Configuration Yes
    I: Setting up managed OIDC configuration
    I: To create Operator Roles for this OIDC Configuration, run the following command and remember to replace <user-defined> with a prefix of your choice:
    	rosa create operator-roles --prefix <user-defined> --oidc-config-id 13cdr6b
    If you are going to create a Hosted Control Plane cluster please include '--hosted-cp'
    I: Creating OIDC provider using 'arn:aws:iam::4540112244:user/userName'
    ? Create the OIDC provider? Yes
    I: Created OIDC provider with ARN 'arn:aws:iam::4540112244:oidc-provider/dvbwgdztaeq9o.cloudfront.net/13cdr6b'

    创建集群时,您必须提供 OIDC 配置 ID。CLI 输出为--mode auto提供此值,否则您必须根据--mode manualaws CLI 输出确定这些值。

  2. 可选:您可以将 OIDC 配置 ID 保存为稍后使用的变量。运行以下命令保存变量

    $ export OIDC_ID=<oidc_config_id>(1)
    1 在上例输出中,OIDC 配置 ID 为 13cdr6b。
    • 通过运行以下命令查看变量的值

      $ echo $OIDC_ID
      示例输出
      13cdr6b
验证
  • 您可以列出与您的用户组织关联的集群可用的 OIDC 配置。运行以下命令

    $ rosa list oidc-config
    示例输出
    ID                                MANAGED  ISSUER URL                                                             SECRET ARN
    2330dbs0n8m3chkkr25gkkcd8pnj3lk2  true     https://dvbwgdztaeq9o.cloudfront.net/2330dbs0n8m3chkkr25gkkcd8pnj3lk2
    233hvnrjoqu14jltk6lhbhf2tj11f8un  false    https://oidc-r7u1.s3.us-east-1.amazonaws.com                           aws:secretsmanager:us-east-1:242819244:secret:rosa-private-key-oidc-r7u1-tM3MDN
    

创建 Operator 角色和策略

使用具有 HCP 集群的 ROSA 时,您必须创建 Red Hat OpenShift Service on AWS (ROSA) 具有托管控制平面 (HCP) 部署所需的 Operator IAM 角色。集群 Operator 使用 Operator 角色来获取执行集群操作(例如管理后端存储、云提供商凭据和对集群的外部访问)所需的临时权限。

先决条件
  • 您已完成 ROSA 与 HCP 的 AWS 预先要求。

  • 您已在安装主机上安装并配置了最新的 AWS 上的 Red Hat OpenShift Service ROSA 命令行界面 (rosa)。

  • 您已创建了帐户范围的 AWS 角色。

步骤
  1. 使用以下命令将您的前缀名称设置为环境变量

    $ export OPERATOR_ROLES_PREFIX=<prefix_name>
  2. 要创建您的 Operator 角色,请运行以下命令

    $ rosa create operator-roles --hosted-cp --prefix=$OPERATOR_ROLES_PREFIX --oidc-config-id=$OIDC_ID --installer-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ACCOUNT_ROLES_PREFIX}-HCP-ROSA-Installer-Role

    以下细分提供了 Operator 角色创建的选项。

    $ rosa create operator-roles --hosted-cp
    	--prefix=$OPERATOR_ROLES_PREFIX (1)
    	--oidc-config-id=$OIDC_ID (2)
    	--installer-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/${ACCOUNT_ROLES_PREFIX}-HCP-ROSA-Installer-Role (3)
    1 创建这些 Operator 角色时,必须提供前缀。否则会产生错误。有关 Operator 前缀的信息,请参阅本节的“其他资源”。
    2 此值是您为 ROSA with HCP 集群创建的 OIDC 配置 ID。
    3 此值是您在创建 ROSA 帐户角色时创建的安装程序角色 ARN。

    您必须包含--hosted-cp 参数才能为 ROSA with HCP 集群创建正确的角色。此命令将返回以下信息。

    示例输出
    ? Role creation mode: auto
    ? Operator roles prefix: <pre-filled_prefix> (1)
    ? OIDC Configuration ID: 23soa2bgvpek9kmes9s7os0a39i13qm4 | https://dvbwgdztaeq9o.cloudfront.net/23soa2bgvpek9kmes9s7os0a39i13qm4 (2)
    ? Create hosted control plane operator roles: Yes
    W: More than one Installer role found
    ? Installer role ARN: arn:aws:iam::4540112244:role/<prefix>-HCP-ROSA-Installer-Role
    ? Permissions boundary ARN (optional):
    I: Reusable OIDC Configuration detected. Validating trusted relationships to operator roles:
    I: Creating roles using 'arn:aws:iam::4540112244:user/<userName>'
    I: Created role '<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials'
    I: Created role '<prefix>-openshift-cloud-network-config-controller-cloud-credenti' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-cloud-network-config-controller-cloud-credenti'
    I: Created role '<prefix>-kube-system-kube-controller-manager' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-kube-controller-manager'
    I: Created role '<prefix>-kube-system-capa-controller-manager' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-capa-controller-manager'
    I: Created role '<prefix>-kube-system-control-plane-operator' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-control-plane-operator'
    I: Created role '<prefix>-kube-system-kms-provider' with ARN 'arn:aws:iam::4540112244:role/<prefix>-kube-system-kms-provider'
    I: Created role '<prefix>-openshift-image-registry-installer-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-image-registry-installer-cloud-credentials'
    I: Created role '<prefix>-openshift-ingress-operator-cloud-credentials' with ARN 'arn:aws:iam::4540112244:role/<prefix>-openshift-ingress-operator-cloud-credentials'
    I: To create a cluster with these roles, run the following command:
    	rosa create cluster --sts --oidc-config-id 23soa2bgvpek9kmes9s7os0a39i13qm4 --operator-roles-prefix <prefix> --hosted-cp
    1 此字段已预先填充了您在初始创建命令中设置的前缀。
    2 此字段要求您选择为 ROSA with HCP 集群创建的 OIDC 配置。

    Operator 角色现已创建,可用于创建您的 ROSA with HCP 集群。

验证
  • 您可以列出与您的 ROSA 帐户关联的 Operator 角色。运行以下命令

    $ rosa list operator-roles
    示例输出
    I: Fetching operator roles
    ROLE PREFIX  AMOUNT IN BUNDLE
    <prefix>      8
    ? Would you like to detail a specific prefix Yes (1)
    ? Operator Role Prefix: <prefix>
    ROLE NAME                                                         ROLE ARN                                                                                         VERSION  MANAGED
    <prefix>-kube-system-capa-controller-manager                       arn:aws:iam::4540112244:role/<prefix>-kube-system-capa-controller-manager                       4.13     No
    <prefix>-kube-system-control-plane-operator                        arn:aws:iam::4540112244:role/<prefix>-kube-system-control-plane-operator                        4.13     No
    <prefix>-kube-system-kms-provider                                  arn:aws:iam::4540112244:role/<prefix>-kube-system-kms-provider                                  4.13     No
    <prefix>-kube-system-kube-controller-manager                       arn:aws:iam::4540112244:role/<prefix>-kube-system-kube-controller-manager                       4.13     No
    <prefix>-openshift-cloud-network-config-controller-cloud-credenti  arn:aws:iam::4540112244:role/<prefix>-openshift-cloud-network-config-controller-cloud-credenti  4.13     No
    <prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials       arn:aws:iam::4540112244:role/<prefix>-openshift-cluster-csi-drivers-ebs-cloud-credentials       4.13     No
    <prefix>-openshift-image-registry-installer-cloud-credentials      arn:aws:iam::4540112244:role/<prefix>-openshift-image-registry-installer-cloud-credentials      4.13     No
    <prefix>-openshift-ingress-operator-cloud-credentials              arn:aws:iam::4540112244:role/<prefix>-openshift-ingress-operator-cloud-credentials              4.13     No
    1 命令运行后,它将显示与您的 AWS 帐户关联的所有前缀,并说明有多少个角色与该前缀关联。如果您需要查看所有这些角色及其详细信息,请在详细信息提示符中输入“Yes”以列出这些角色的具体信息。

使用 CLI 创建具有出口锁定功能的 ROSA with HCP 集群

当使用 AWS 上的 Red Hat OpenShift Service (ROSA) 命令行界面 (CLI) (rosa) 创建集群时,您可以选择默认选项以快速创建集群。

先决条件
  • 您已完成 ROSA 与 HCP 的 AWS 预先要求。

  • 您有可用的 AWS 服务配额。

  • 您已在 AWS 控制台中启用 ROSA 服务。

  • 您已在安装主机上安装并配置了最新的 ROSA CLI (rosa)。运行rosa version以查看您当前安装的 ROSA CLI 版本。如果可用较新版本,CLI 将提供下载此升级的链接。

  • 您已使用 ROSA CLI 登录到您的 Red Hat 帐户。

  • 您已创建 OIDC 配置。

  • 您已验证 AWS Elastic Load Balancing (ELB) 服务角色存在于您的 AWS 帐户中。

步骤
  1. 使用以下命令之一创建您的 ROSA with HCP 集群

    创建 ROSA with HCP 集群时,默认的机器无类域间路由 (CIDR) 为10.0.0.0/16。如果这与 VPC 子网的 CIDR 范围不对应,请将--machine-cidr <address_block>添加到以下命令中。要了解有关 AWS 上的 Red Hat OpenShift Service 的默认 CIDR 范围的更多信息,请参阅 CIDR 范围定义。

    • 如果您未设置环境变量,请运行以下命令

      $ rosa create cluster --cluster-name=<cluster_name> \ (1)
           --mode=auto --hosted-cp [--private] \ (2)
           --operator-roles-prefix <operator-role-prefix> \ (3)
           --oidc-config-id <id-of-oidc-configuration> \
           --subnet-ids=<private-subnet-id> --region <region> \
           --machine-cidr 10.0.0.0/16 --service-cidr 172.30.0.0/16 \
           --pod-cidr 10.128.0.0/14 --host-prefix 23 \
           --billing-account <root-acct-id> \ (4)
           --properties zero_egress:true
      1 指定集群的名称。如果您的集群名称超过 15 个字符,它将在 openshiftapps.com 上为您配置的集群包含一个自动生成的域前缀作为子域。要自定义子域,请使用--domain-prefix标志。域前缀不能超过 15 个字符,必须唯一,并且在集群创建后无法更改。
      2 默认情况下,特定于集群的 Operator 角色名称以集群名称和随机的 4 位哈希值作为前缀。您可以选择指定自定义前缀以替换角色名称中的<cluster_name>-<hash>。在创建特定于集群的 Operator IAM 角色时应用此前缀。有关前缀的信息,请参阅关于自定义 Operator IAM 角色前缀

      如果您在创建关联的帐户范围角色时指定了自定义 ARN 路径,则会自动检测自定义路径。在后续步骤中创建特定于集群的 Operator 角色时,将应用自定义路径。

      3 提供负责所有计费的 AWS 帐户。
    • 如果您设置了环境变量,请使用私有可用 API 和私有可用入口创建具有出口锁定功能且具有单个初始机器池的集群,并运行以下命令

      $ rosa create cluster --private --cluster-name=<cluster_name> \
          --mode=auto --hosted-cp --operator-roles-prefix=$OPERATOR_ROLES_PREFIX \
          --oidc-config-id=$OIDC_ID --subnet-ids=$SUBNET_IDS \
          --region <region> --machine-cidr 10.0.0.0/16 --service-cidr 172.30.0.0/16 \
          --pod-cidr 10.128.0.0/14 --host-prefix 23 --billing-account <root-acct-id> \
          --private --properties zero_egress:true
  2. 运行以下命令检查集群的状态

    $ rosa describe cluster --cluster=<cluster_name>

    集群安装进度中,输出中列出了以下State字段的更改

    • pending (正在准备帐户)

    • installing (DNS 设置正在进行中)

    • installing (安装中)

    • ready (已准备就绪)

      如果安装失败或State字段在 10 分钟后未更改为ready,请查看安装故障排除文档了解详细信息。有关更多信息,请参阅安装故障排除。有关联系 Red Hat 支持寻求帮助的步骤,请参阅获取 AWS 上 Red Hat OpenShift Service 的支持

  3. 通过监视 AWS 上的 Red Hat OpenShift Service 安装程序日志来跟踪集群创建进度。要检查日志,请运行以下命令

    $ rosa logs install --cluster=<cluster_name> --watch \ (1)
    1 可选:要在安装过程中监视新的日志消息,请使用--watch参数。