7.8. 在 kube-system 项目中存储管理员级别的 secret 的替代方案
默认情况下,管理员 secret 存储在 kube-system 项目中。如果您在 install-config.yaml 文件中将 credentialsMode 参数配置为 Manual,则必须使用以下替代方案之一:
- 要手动管理长期云凭证,请按照手动创建长期凭证中的步骤操作。
- 要实现在集群外为各个组件管理的短期凭证,请按照配置 A WS 集群以使用短期凭证中的步骤操作。
7.8.1. 手动创建长期凭证 复制链接链接已复制到粘贴板!
在无法访问云身份和访问管理(IAM)API 的环境中,或者管理员更不希望将管理员级别的凭证 secret 存储在集群 kube-system 命名空间中时,可以在安装前将 Cloud Credential Operator(CCO)放入手动模式。
流程
如果您没有将
install-config.yaml配置文件中的credentialsMode参数设置为Manual,请修改值,如下所示:配置文件片段示例
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您之前还没有创建安装清单文件,请运行以下命令:
openshift-install create manifests --dir <installation_directory>
$ openshift-install create manifests --dir <installation_directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<installation_directory>是安装程序在其中创建文件的目录。运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE变量:RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest自定义资源 (CR) 列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令为每个
CredentialsRequest对象创建一个 YAML 文件。CredentialsRequest对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在之前生成的
openshift-install清单目录中为 secret 创建 YAML 文件。secret 必须使用在spec.secretRef中为每个CredentialsRequest定义的命名空间和 secret 名称存储。带有 secret 的
CredentialsRequest对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow Secret对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在升级使用手动维护凭证的集群前,您必须确保 CCO 处于可升级状态。
7.8.2. 将 AWS 集群配置为使用短期凭证 复制链接链接已复制到粘贴板!
要安装配置为使用 AWS 安全令牌服务 (STS) 的集群,您必须配置 CCO 实用程序并为集群创建所需的 AWS 资源。
7.8.2.1. 配置 Cloud Credential Operator 工具 复制链接链接已复制到粘贴板!
当 Cloud Credential Operator(CCO)以手动模式运行时,要从集群外部创建和管理云凭证,提取并准备 CCO 实用程序(ccoctl)二进制文件。
ccoctl 工具是在 Linux 环境中运行的 Linux 二进制文件。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
-
已安装 OpenShift CLI(
oc)。
您已为
ccoctl工具创建了用于以下权限的 AWS 帐户:例 7.4. 所需的 AWS 权限
所需的
iam权限-
iam:CreateOpenIDConnectProvider -
iam:CreateRole -
iam:DeleteOpenIDConnectProvider -
iam:DeleteRole -
iam:DeleteRolePolicy -
iam:GetOpenIDConnectProvider -
iam:GetRole -
iam:GetUser -
iam:ListOpenIDConnectProviders -
iam:ListRolePolicies -
iam:ListRoles -
iam:PutRolePolicy -
iam:TagOpenIDConnectProvider -
iam:TagRole
所需的
s3权限-
s3:CreateBucket -
s3:DeleteBucket -
s3:DeleteObject -
s3:GetBucketAcl -
s3:GetBucketTagging -
s3:GetObject -
s3:GetObjectAcl -
s3:GetObjectTagging -
s3:ListBucket -
s3:PutBucketAcl -
s3:PutBucketPolicy -
s3:PutBucketPublicAccessBlock -
s3:PutBucketTagging -
s3:PutObject -
s3:PutObjectAcl -
s3:PutObjectTagging
所需的
cloudfront权限-
cloudfront:ListCloudFrontOriginAccessIdentities -
cloudfront:ListDistributions -
cloudfront:ListTagsForResource
如果您计划通过公共 CloudFront 发行版 URL 将 OIDC 配置存储在 IAM 身份提供程序访问的私有 S3 存储桶中,则运行
ccoctl工具的 AWS 帐户需要以下额外权限:例 7.5. 使用 CloudFront 私有 S3 存储桶的额外权限
-
cloudfront:CreateCloudFrontOriginAccessIdentity -
cloudfront:CreateDistribution -
cloudfront:DeleteCloudFrontOriginAccessIdentity -
cloudfront:DeleteDistribution -
cloudfront:GetCloudFrontOriginAccessIdentity -
cloudfront:GetCloudFrontOriginAccessIdentityConfig -
cloudfront:GetDistribution -
cloudfront:TagResource -
cloudfront:UpdateDistribution
注意在使用
ccoctl aws create-all命令处理凭证请求时,这些额外权限支持使用--create-private-s3-bucket选项。-
流程
运行以下命令,为 OpenShift Container Platform 发行镜像设置变量:
RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从 OpenShift Container Platform 发行镜像获取 CCO 容器镜像:
CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保
$RELEASE_IMAGE的架构与将使用ccoctl工具的环境架构相匹配。运行以下命令,将 CCO 容器镜像中的
ccoctl二进制文件提取到 OpenShift Container Platform 发行镜像中:oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令更改权限以使
ccoctl可执行:chmod 775 ccoctl
$ chmod 775 ccoctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证
ccoctl是否准备就绪,可以尝试显示帮助文件。运行命令时使用相对文件名,例如:./ccoctl.rhel9
$ ./ccoctl.rhel9Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.8.2.2. 使用 Cloud Credential Operator 实用程序创建 AWS 资源 复制链接链接已复制到粘贴板!
创建 AWS 资源时有以下选项:
-
您可以使用
ccoctl aws create-all命令自动创建 AWS 资源。这是创建资源的最快速方法。请参阅 使用单个命令创建 AWS 资源。 -
如果您需要在修改 AWS 资源前查看
ccoctl工具创建的 JSON 文件,或者ccoctl工具用于创建 AWS 资源的过程无法自动满足组织的要求,您可以单独创建 AWS 资源。请参阅 单独创建 AWS 资源。
7.8.2.2.1. 使用单个命令创建 AWS 资源 复制链接链接已复制到粘贴板!
如果 ccoctl 工具用于创建 AWS 资源的过程自动满足机构的要求,您可以使用 ccoctl aws create-all 命令自动创建 AWS 资源。
否则,您可以单独创建 AWS 资源。如需更多信息,请参阅"单独创建 AWS 资源"。
默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。
先决条件
您必须:
-
提取并准备好
ccoctl二进制文件。
流程
运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE变量:RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest对象列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此命令可能需要一些时间才能运行。
运行以下命令,使用
ccoctl工具处理所有CredentialsRequest对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定用于标记创建用于跟踪的任何云资源的名称。
- 2
- 指定在其中创建云资源的 AWS 区域。
- 3
- 指定包含组件
CredentialsRequest对象文件的目录。 - 4
- 可选:指定您希望
ccoctl实用程序在其中创建对象的目录。默认情况下,实用程序在运行命令的目录中创建对象。 - 5
- 可选:默认情况下,
ccoctl实用程序将 OpenID Connect (OIDC) 配置文件存储在公共 S3 存储桶中,并使用 S3 URL 作为公共 OIDC 端点。要将 OIDC 配置存储在 IAM 身份提供程序通过公共 CloudFront 发行版 URL 访问的专用 S3 存储桶中,请使用--create-private-s3-bucket参数。
注意如果您的集群使用
TechPreviewNoUpgrade功能集启用的技术预览功能,则必须包含--enable-tech-preview参数。
验证
要验证 OpenShift Container Platform secret 是否已创建,列出
<path_to_ccoctl_output_dir>/manifests目录中的文件:ls <path_to_ccoctl_output_dir>/manifests
$ ls <path_to_ccoctl_output_dir>/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过查询 AWS 来验证是否已创建 IAM 角色。如需更多信息,请参阅有关列出 IAM 角色的 AWS 文档。
7.8.2.2.2. 单独创建 AWS 资源 复制链接链接已复制到粘贴板!
您可以使用 ccoctl 工具单独创建 AWS 资源。这个选项对于在不同用户或部门之间创建这些资源的组织可能很有用。
否则,您可以使用 ccoctl aws create-all 命令自动创建 AWS 资源。如需更多信息,请参阅"使用单个命令创建 AWS 资源"。
默认情况下,ccoctl 在运行命令的目录中创建对象。要在其他目录中创建对象,请使用 --output-dir 标志。此流程使用 <path_to_ccoctl_output_dir> 来引用这个目录。
有些 ccoctl 命令会发出 AWS API 调用来创建或修改 AWS 资源。您可以使用 --dry-run 标志来避免 API 调用。使用此标志可在本地文件系统中创建 JSON 文件。您可以使用 --cli-input-json 参数查看和修改 JSON 文件,然后使用 AWS CLI 工具应用它们。
先决条件
-
提取并准备
ccoctl二进制文件。
流程
运行以下命令,生成用于为集群设置 OpenID Connect 供应商的公共和私有 RSA 密钥文件:
ccoctl aws create-key-pair
$ ccoctl aws create-key-pairCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2021/04/13 11:01:02 Generating RSA keypair 2021/04/13 11:01:03 Writing private key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.private 2021/04/13 11:01:03 Writing public key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.public 2021/04/13 11:01:03 Copying signing key for use by installer
2021/04/13 11:01:02 Generating RSA keypair 2021/04/13 11:01:03 Writing private key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.private 2021/04/13 11:01:03 Writing public key to /<path_to_ccoctl_output_dir>/serviceaccount-signer.public 2021/04/13 11:01:03 Copying signing key for use by installerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
serviceaccount-signer.private和serviceaccount-signer.public是生成的密钥文件。此命令还会在
/<path_to_ccoctl_output_dir>/tls/bound-service-account-signing-key.key中创建集群在安装过程中所需的私钥。运行以下命令,在 AWS 上创建 OpenID Connect 身份提供程序和 S3 存储桶:
ccoctl aws create-identity-provider \ --name=<name> \ --region=<aws_region> \ --public-key-file=<path_to_ccoctl_output_dir>/serviceaccount-signer.public
$ ccoctl aws create-identity-provider \ --name=<name> \1 --region=<aws_region> \2 --public-key-file=<path_to_ccoctl_output_dir>/serviceaccount-signer.public3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2021/04/13 11:16:09 Bucket <name>-oidc created 2021/04/13 11:16:10 OpenID Connect discovery document in the S3 bucket <name>-oidc at .well-known/openid-configuration updated 2021/04/13 11:16:10 Reading public key 2021/04/13 11:16:10 JSON web key set (JWKS) in the S3 bucket <name>-oidc at keys.json updated 2021/04/13 11:16:18 Identity Provider created with ARN: arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
2021/04/13 11:16:09 Bucket <name>-oidc created 2021/04/13 11:16:10 OpenID Connect discovery document in the S3 bucket <name>-oidc at .well-known/openid-configuration updated 2021/04/13 11:16:10 Reading public key 2021/04/13 11:16:10 JSON web key set (JWKS) in the S3 bucket <name>-oidc at keys.json updated 2021/04/13 11:16:18 Identity Provider created with ARN: arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
openid-configuration是发现文档和key.json是一个 JSON Web 密钥集文件。此命令还会在
/<path_to_ccoctl_output_dir>/manifests/cluster-authentication-02-config.yaml中创建 YAML 配置文件。此文件为集群生成的服务帐户令牌设置签发者 URL 字段,以便 AWS IAM 身份提供程序信任令牌。为集群中的每个组件创建 IAM 角色:
运行以下命令,使用安装文件中的发行镜像设置
$RELEASE_IMAGE变量:RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 OpenShift Container Platform 发行镜像中提取
CredentialsRequest对象列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
ccoctl工具处理所有CredentialsRequest对象:ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_credentials_requests_directory> \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
$ ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_credentials_requests_directory> \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于使用其他 IAM API 端点的 AWS 环境(如 GovCloud),还必须使用
--region参数指定您的区域。如果您的集群使用
TechPreviewNoUpgrade功能集启用的技术预览功能,则必须包含--enable-tech-preview参数。对于每个
CredentialsRequest对象,ccoctl创建一个带有信任策略的 IAM 角色,该角色与指定的 OIDC 身份提供程序相关联,以及来自 OpenShift Container Platform 发行镜像的每个CredentialsRequest对象中定义的权限策略。
验证
要验证 OpenShift Container Platform secret 是否已创建,列出
<path_to_ccoctl_output_dir>/manifests目录中的文件:ls <path_to_ccoctl_output_dir>/manifests
$ ls <path_to_ccoctl_output_dir>/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过查询 AWS 来验证是否已创建 IAM 角色。如需更多信息,请参阅有关列出 IAM 角色的 AWS 文档。
7.8.2.3. 整合 Cloud Credential Operator 实用程序清单 复制链接链接已复制到粘贴板!
要为单个组件在集群外实现短期安全凭证,您必须将创建 Cloud Credential Operator 实用程序 (ccoctl) 的清单文件移到安装程序的正确目录中。
先决条件
- 您已使用托管集群的云平台配置了帐户。
-
您已配置了 Cloud Credential Operator 实用程序 (
ccoctl)。 -
已使用
ccoctl工具创建了集群所需的云供应商资源。
流程
如果您没有将
install-config.yaml配置文件中的credentialsMode参数设置为Manual,请修改值,如下所示:配置文件片段示例
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您之前还没有创建安装清单文件,请运行以下命令:
openshift-install create manifests --dir <installation_directory>
$ openshift-install create manifests --dir <installation_directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<installation_directory>是安装程序在其中创建文件的目录。运行以下命令,将
ccoctl工具生成的清单复制到安装程序创建的manifests目录中:cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将包含私钥的
tls目录复制到安装目录中:cp -a /<path_to_ccoctl_output_dir>/tls .
$ cp -a /<path_to_ccoctl_output_dir>/tls .Copy to Clipboard Copied! Toggle word wrap Toggle overflow