安全集群
使用基于角色的访问控制和证书保护集群。
摘要
第 1 章 保护集群 复制链接链接已复制到粘贴板!
您可能需要手动创建和管理集群上的访问控制。您必须为 Red Hat Advanced Cluster Management for Kubernetes 配置身份验证(authentication)服务,以便将工作负载加载到 Identity and Access Management(IAM)。
使用基于角色的访问控制和身份验证来识别用户关联的角色和集群凭证。要创建和管理集群凭证,请通过访问存储它们的 Kubernetes secret 来访问凭证。有关访问和凭证的详情,请查看以下文档。
需要的访问权限:集群管理员
1.1. 基于角色的访问控制 复制链接链接已复制到粘贴板!
Red Hat Advanced Cluster Management for Kubernetes 支持的基于角色的控制访问(RBAC)。您的角色决定了您可以执行的操作。RBAC 基于 Kubernetes 中的授权机制,类似于 Red Hat OpenShift Container Platform。有关 RBAC 的更多信息,请参阅OpenShift Container Platform 文档中的 OpenShift RBAC概述。
备注: 如果用户角色访问不可用,则控制台中的 Action 按钮会被禁用。
1.1.1. 角色概述 复制链接链接已复制到粘贴板!
有些产品资源是基于集群范围的,有些则是命名空间范围。您必须将集群角色绑定和命名空间角色绑定应用到用户,以使访问控制具有一致性。查看 Red Hat Advanced Cluster Management for Kubernetes 支持的以下角色定义表列表:
| 角色 | 定义 |
|
|
这是 OpenShift Container Platform 的默认角色。具有集群范围内的绑定到 |
|
|
具有集群范围内的绑定到 |
|
|
具有集群范围内的绑定到 |
|
|
具有集群范围内的绑定到 |
|
|
具有集群范围内的绑定到 |
|
|
具有集群范围内的绑定到 |
|
|
具有 |
| admin, edit, view |
admin、edit 和 view 是 OpenShift Container Platform 的默认角色。具有命名空间范围绑定的用户可以访问特定命名空间中的 |
|
|
带有 |
重要:
- 任何用户都可以从 OpenShift Container Platform 创建项目,这为命名空间授予管理员角色权限。
-
如果用户无法访问集群的角色,则不会显示集群名称。集群名称可能显示有以下符号:
-。
如需了解更多详细信息,请参阅实现基于角色的访问控制。
1.2. 实施基于角色的访问控制 复制链接链接已复制到粘贴板!
Red Hat Advanced Cluster Management for Kubernetes RBAC 在控制台级别和 API 级别进行验证。控制台中的操作可根据用户访问角色权限启用或禁用。
multicluster engine operator 是一个前提条件,Red Hat Advanced Cluster Management 的集群生命周期功能。要使用 multicluster engine operator 管理集群 RBAC,请参阅集群生命周期multicluster engine for Kubernetes operator Role-based access control 文档中的 RBAC 指导信息。
查看以下部分以了解有关 Red Hat Advanced Cluster Management 特定生命周期的 RBAC 的更多信息:
1.2.1. 应用程序生命周期 RBAC 复制链接链接已复制到粘贴板!
在创建应用程序时,subscription 命名空间会被创建,配置映射会在 subscription 命名空间中创建。您还必须有权访问 channel 命名空间。如果需要应用订阅,则必须是订阅管理员。有关管理应用程序的更多信息,请参阅作为订阅管理员创建允许和拒绝列表。
查看以下应用程序生命周期 RBAC 操作:
使用名为
username的用户在所有受管集群中创建和管理应用程序。您必须创建一个集群角色绑定,并将其绑定到username。运行以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:cluster-manager-admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个角色是一个超级用户,可访问所有资源和操作。您可以使用此角色为应用程序和命名空间中的所有应用程序资源创建命名空间。
创建将资源部署到多个命名空间的应用程序。您必须创建一个集群角色绑定到
open-cluster-management:subscription-admin集群角色,并将其绑定到名为username的用户。运行以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用用户名用户创建和管理cluster-name受管集群中的应用程序。您必须输入以下命令创建一个到open-cluster-management:admin:<cluster-name>集群角色绑定的集群角色绑定,并将其绑定到username:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对受管集群
cluster-name上所有application资源的读写访问权限。如果需要访问其他受管集群,请重复此操作。输入以下命令,创建一个到使用
admin角色的application命名空间的命名空间角色绑定,并把它绑定到username:oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>
oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对
application命名空间中的所有application资源的读和写的访问权限。如果需要访问其他应用程序,或者应用部署到多个命名空间,请重复此操作。您可以创建将资源部署到多个命名空间的应用程序。输入以下命令创建到
open-cluster-management:subscription-admin集群角色的集群角色绑定,并将其绑定到username:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用名为
username的用户查看在一个名为cluster-name的受管集群中的应用程序,请创建一个集群角色绑定到open-cluster-management:view:集群角色,并将其绑定到username。输入以下命令:oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对受管集群
cluster-name上所有application资源的读访问权限。如果需要访问其他受管集群,请重复此操作。使用
view角色创建到application命名空间的命名空间角色绑定,并将它绑定到username。输入以下命令:oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>
oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此角色具有对
application命名空间中的 所有application资源的读访问权限。如果需要访问其他应用程序,请重复此操作。
1.2.1.1. 应用程序生命周期的控制台和 API RBAC 表 复制链接链接已复制到粘贴板!
查看以下应用程序生命周期控制台和 API RBAC 表:
| 资源 | Admin | Edit | View |
|---|---|---|---|
| Application | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| Channel | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| Subscription | 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
| API | Admin | Edit | View |
|---|---|---|---|
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
|
| 创建、读取、更新、删除 | 创建、读取、更新、删除 | 读取 |
1.2.2. 监管生命周期 RBAC 复制链接链接已复制到粘贴板!
要执行监管生命周期操作,用户必须有权访问创建策略的命名空间,以及访问应用策略的受管集群。受管集群还必须是绑定到命名空间的 ManagedClusterSet 的一部分。要继续了解 ManagedClusterSet,请参阅 ManagedClusterSets Introduction。
在选择了命名空间后,如 rhacm-policies,带有一个或多个绑定的 ManagedClusterSets,并在您有权在命名空间中创建 放置 对象后,查看以下操作:
要使用
Policy,PlacementBinding, 和PolicyAutomationedit 访问创建名为rhacm-edit-policy的ClusterRole,请运行以下命令:oc create clusterrole rhacm-edit-policy --resource=policies.policy.open-cluster-management.io,placementbindings.policy.open-cluster-management.io,policyautomations.policy.open-cluster-management.io,policysets.policy.open-cluster-management.io --verb=create,delete,get,list,patch,update,watch
oc create clusterrole rhacm-edit-policy --resource=policies.policy.open-cluster-management.io,placementbindings.policy.open-cluster-management.io,policyautomations.policy.open-cluster-management.io,policysets.policy.open-cluster-management.io --verb=create,delete,get,list,patch,update,watchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在
rhacm-policies命名空间中创建策略,请使用之前创建的ClusterRole将命名空间RoleBinding(如rhacm-edit-policy)创建到rhacm-policies命名空间。运行以下命令:oc create rolebinding rhacm-edit-policy -n rhacm-policies --clusterrole=rhacm-edit-policy --user=<username>
oc create rolebinding rhacm-edit-policy -n rhacm-policies --clusterrole=rhacm-edit-policy --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看受管集群的策略状态,您需要有权查看 hub 集群上的受管集群命名空间中的策略。如果您没有
查看访问权限,如通过 OpenShift视图ClusterRole,请创建一个ClusterRole,如rhacm-view-policy,使用以下命令查看策略的访问权限:oc create clusterrole rhacm-view-policy --resource=policies.policy.open-cluster-management.io --verb=get,list,watch
oc create clusterrole rhacm-view-policy --resource=policies.policy.open-cluster-management.io --verb=get,list,watchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要将新
ClusterRole绑定到受管集群命名空间,请运行以下命令来创建命名空间RoleBinding:oc create rolebinding rhacm-view-policy -n <cluster name> --clusterrole=rhacm-view-policy --user=<username>
oc create rolebinding rhacm-view-policy -n <cluster name> --clusterrole=rhacm-view-policy --user=<username>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.2.1. 监管生命周期的控制台和 API RBAC 表 复制链接链接已复制到粘贴板!
查看以下监管生命周期控制台和 API RBAC 表:
| 资源 | Admin | Edit | View |
|---|---|---|---|
| 策略(policy) | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| PlacementBindings | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| 放置 | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| PlacementRules (已弃用) | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| PolicyAutomations | 创建、读取、更新、删除 | 读取、更新 | 读取 |
| API | Admin | Edit | View |
|---|---|---|---|
|
| 创建、读取、更新、删除 | 读取、更新 | 读取 |
|
| 创建、读取、更新、删除 | 读取、更新 | 读取 |
|
| 创建、读取、更新、删除 | 读取、更新 | 读取 |
1.2.3. Observability RBAC 复制链接链接已复制到粘贴板!
要查看受管集群的可观察性指标,您必须具有对 hub 集群中该受管集群的 view 访问权限。查看以下可观察功能列表:
访问受管集群指标。
如果没有将用户分配给 hub 集群上的受管集群的
view角色,则拒绝用户访问受管集群的指标。运行以下命令,以验证用户是否有在受管集群命名空间中创建managedClusterView角色:oc auth can-i create ManagedClusterView -n <managedClusterName> --as=<user>
oc auth can-i create ManagedClusterView -n <managedClusterName> --as=<user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为集群管理员,在受管集群命名空间中创建一个
managedClusterView角色。运行以下命令:oc create role create-managedclusterview --verb=create --resource=managedclusterviews -n <managedClusterName>
oc create role create-managedclusterview --verb=create --resource=managedclusterviews -n <managedClusterName>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 然后,通过创建角色绑定来将角色应用到用户。运行以下命令:
oc create rolebinding user-create-managedclusterview-binding --role=create-managedclusterview --user=<user> -n <managedClusterName>
oc create rolebinding user-create-managedclusterview-binding --role=create-managedclusterview --user=<user> -n <managedClusterName>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索资源。
要验证用户是否可以访问资源类型,请使用以下命令:
oc auth can-i list <resource-type> -n <namespace> --as=<rbac-user>
oc auth can-i list <resource-type> -n <namespace> --as=<rbac-user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 备注:
<resource-type>必须是复数。要在 Grafana 中查看可观察性数据,则必须在受管集群相同的命名空间中有一个
RoleBinding资源。查看以下
RoleBinding示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅角色绑定策略。请参阅 Observability 高级配置 来配置可观察性。
1.2.3.1. Observability 生命周期的控制台和 API RBAC 表 复制链接链接已复制到粘贴板!
要管理可观察性组件,请查看以下 API RBAC 表:
| API | Admin | Edit | View |
|
| create、read、update 和 delete | 读取、更新 | 读取 |
|
| create, get, list, watch, update, delete, patch | - | - |
|
| get、list、watch | get、list、watch | get、list、watch |
1.3. 使用控制台实现细粒度的基于角色的访问控制(技术预览) 复制链接链接已复制到粘贴板!
技术预览: Red Hat Advanced Cluster Management for Kubernetes 支持细粒度的基于角色的访问控制 (RBAC)。作为集群管理员,您可以使用ClusterPermission资源管理和控制权限,该资源控制托管集群上的命名空间级别以及集群级别的权限。向集群内的虚拟机命名空间授予权限,但不向整个托管集群授予权限。
了解如何从控制台设置细粒度的基于角色的访问控制 (RBAC) 和ClusterPermission资源。
需要的访问权限:集群管理员
要了解 OpenShift Container Platform 默认和虚拟化角色及权限,请参阅 OpenShift Container Platform 文档中的授权。
有关 Red Hat Advanced Cluster Management 基于角色的访问的更多详细信息,请参阅实施基于角色的访问控制。
先决条件
要开始使用细粒度的基于角色的访问控制,请参阅以下要求:
-
必须
启用MultiClusterHub自定义资源spec.overrides.components字段进行搜索,才能检索可代表用于访问控制的虚拟机的托管集群命名空间列表。 - 您需要虚拟机。
1.3.1. 在控制台中分配细粒度的基于角色的访问控制 复制链接链接已复制到粘贴板!
您可以分配用户来管理具有细粒度的基于角色的访问控制的虚拟机。如果不允许用户角色访问,则控制台中的操作将被禁用。滑动YAML选项以查看您在 YAML 编辑器中输入的数据。
您可以授予 OpenShift Virtualization 以下角色的访问权限,这些角色是默认角色的扩展:
-
kubevirt.io:view:仅查看资源 -
kubevirt.io:edit:修改资源 -
kubevirt.io:admin:查看、修改、删除资源;授予权限
重要提示:作为管理员,您需要为有效的ClusterPermission资源添加RoleBinding或ClusterRoleBinding资源。您也可以选择添加这两种资源。
导航到您的
MultiClusterHub自定义资源以编辑资源并启用该功能。- 从本地集群视图中,单击操作员>已安装的操作员> Kubernetes 的高级集群管理。
- 单击MultiClusterHub选项卡来编辑资源。
- 滑动YAML选项以查看 YAML 编辑器中的数据。
-
在您的
MultiClusterHub自定义资源spec.overrides.components字段中,将fine-grained-rbac-preview设置为true以启用该功能。在 YAML 编辑器中将configOverrides规范更改为enabled: true并保存更改。请参阅以下启用了fine-grained-rbac-preview的示例:
- configOverrides: {}
enabled: true
name: fine-grained-rbac-preview
- configOverrides: {}
enabled: true
name: fine-grained-rbac-preview
使用
environment=virtualization标记您的local-cluster。- 从所有集群视图中,单击基础架构>集群>
-
找到您的
本地集群并单击“操作”进行编辑。 -
添加
environment=virtualization标签并保存更改。请参见以下示例:
environment=virtualization
environment=virtualizationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
remediationAction的policy-virt-clusterroles值更改为enforce,这会将kubevirtclusterroles添加到 hub 集群。- 单击治理>策略。
找到
policy-virt-clusterroles策略并单击Actions将remediationAction值更改为enforcement。重要提示:策略中有两个remediationAction规范,但您只需更改后者的remediationAction。这不适用于 YAML 文件中的第一个模板。请参见以下示例:remediationAction: enforce
remediationAction: enforceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 滑动YAML选项以查看 YAML 编辑器中的数据并保存更改。请参见以下 YAML 示例:
创建
ClusterRole资源并命名您的文件。- 从本地集群视图中,单击用户管理>角色>创建角色。
-
在 YAML 编辑器中添加以下
ClusterRole资源信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ClusterRoleBinding资源。- 从本地集群视图中,单击用户管理>角色绑定>创建绑定。
-
对于绑定类型,选择
集群范围的角色绑定。 -
添加与
ClusterRole名称匹配的RoleBinding名称,该名称是您之前选择的<cluster-role-name>。 - 添加匹配的角色名称。
- 对于主题,选择用户或组,输入用户或组名称,然后保存更改。
创建
ClusterPermission资源以在命名空间级别授予权限。- 单击访问控制>创建权限。
- 在基本信息窗口中,添加集群名称和被授予权限的用户或组。
- 选择该权限的集群。
添加
角色绑定信息,在命名空间级别设置权限。- 在集群中添加虚拟机命名空间。
- 添加用户或组。
-
添加角色(例如
kubevirt.io:view ),以实现细粒度的基于角色的访问控制。您可以选择RoleBindings的组合。
-
添加具有相同信息的
ClusterRoleBinding资源以在集群级别设置权限。 查看并单击“创建权限”以创建
ClusterPermission资源,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查控制台中的
“就绪”状态。 -
您可以点击编辑权限来编辑
角色绑定和集群角色绑定。 - 可选:单击导出 YAML以将资源用于 GitOps 或在终端中使用它。
-
准备就绪后,您可以删除
ClusterPermissions资源。 可选:如果启用了
可观察性服务,请在中心集群上创建额外的RoleBinding资源,以便用户可以在 Grafana 中查看虚拟机详细信息。- 从本地集群视图中,单击用户管理>角色绑定>角色绑定。
-
对于绑定类型,选择
命名空间角色绑定。 -
指定
RoleBindings的名称,它将角色分配给用户或组。 - 添加集群名称,这也是 hub 集群上的命名空间。
-
选择角色名称的
视图。 - 对于主题,选择用户或组,输入用户或组名称,然后保存更改。
1.4. 在终端中实现细粒度的基于角色的访问控制(技术预览) 复制链接链接已复制到粘贴板!
技术预览: Red Hat Advanced Cluster Management for Kubernetes 支持细粒度的基于角色的访问控制 (RBAC)。作为集群管理员,您可以使用ClusterPermission资源管理和控制权限,该资源控制托管集群上的命名空间级别以及集群级别的权限。向集群内的虚拟机命名空间授予权限,但不向整个托管集群授予权限。
了解如何从终端设置细粒度的基于角色的访问控制 (RBAC) 和ClusterPermission资源。
需要的访问权限:集群管理员
要了解 OpenShift Container Platform 默认和虚拟化角色及权限,请参阅 OpenShift Container Platform 文档中的授权。
有关 Red Hat Advanced Cluster Management 基于角色的访问的更多详细信息,请参阅实施基于角色的访问控制。
先决条件
要开始使用细粒度的基于角色的访问控制,请参阅以下要求:
-
必须
启用MultiClusterHub自定义资源spec.overrides.components字段进行搜索,才能检索可代表用于访问控制的虚拟机的托管集群命名空间列表。 - 您需要虚拟机。
1.4.1. 在终端中分配细粒度的基于角色的访问控制 复制链接链接已复制到粘贴板!
您可以授予 OpenShift Virtualization 以下角色的访问权限,这些角色是默认角色的扩展:
-
kubevirt.io:view:仅查看资源 -
kubevirt.io:edit:修改资源 -
kubevirt.io:admin:查看、修改、删除资源;授予权限
完成以下步骤:
在
MultiClusterHub资源中启用fine-grained-rbac-preview。运行以下命令:
oc edit mch -n open-cluster-management multiclusterhub
oc edit mch -n open-cluster-management multiclusterhubCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑以将
configOverrides规范从enabled: false更改为enabled: true。请参阅以下启用该功能的示例:- configOverrides: {} enabled: true name: fine-grained-rbac-preview- configOverrides: {} enabled: true name: fine-grained-rbac-previewCopy to Clipboard Copied! Toggle word wrap Toggle overflow
注意:如果您不使用
open-cluster-management命名空间,请运行oc get mch -A来获取MultiClusterHub资源的名称和命名空间。使用
environment=virtualization标记您的local-cluster。运行以下命令:oc label managedclusters local-cluster environment=virtualization
oc label managedclusters local-cluster environment=virtualizationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
policy-virt-clusterroles更改为enforce,这会将kubevirtclusterroles添加到 hub 集群。运行以下命令来编辑策略:
oc edit policy -n open-cluster-management-global-set policy-virt-clusterroles
oc edit policy -n open-cluster-management-global-set policy-virt-clusterrolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
remediationAction值从inform编辑为force。重要提示:策略中有两个remediationAction规范,但您只需更改后者的remediationAction。这不适用于 YAML 文件中的第一个模板。请参见以下示例:
remediationAction: enforce
remediationAction: enforceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下 YAML 文件并命名该文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ClusterRole资源。运行以下命令并更改文件名(如果您在此过程的早期更改过它):oc apply -f <filename>.yml
oc apply -f <filename>.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为
ClusterPermission资源创建一个 YAML 文件并命名该文件。 通过指定集群名称、托管集群命名空间和用户或组名称,从
ClusterPermission资源分配基于角色的细粒度访问权限:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您之前更改了名称,请运行以下命令来应用该文件并更改该文件的名称:
oc apply -f <filename>.yml
oc apply -f <filename>.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果启用了
可观察性,请在中心集群上创建额外的RoleBinding,以便用户可以在 Grafana 中查看虚拟机详细信息。创建用于 Grafana 访问的
RoleBinding资源。请参阅以下示例 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用以下命令应用
ClusterRoleBinding资源:
oc apply -f <filename>.yml
oc apply -f <filename>.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. 证书 复制链接链接已复制到粘贴板!
在安装 Red Hat Advanced Cluster Management 时,会创建在 Red Hat Advanced Cluster Management 上运行的服务所需的所有证书。查看以下由 Red Hat OpenShift Container Platform 组件创建和管理的证书列表:
- OpenShift Service Serving 证书
- Red Hat Advanced Cluster Management Webhook 控制器
- Kubernetes 证书 API
- OpenShift 默认入口
需要的访问权限: 集群管理员
继续阅读以了解有关证书管理的更多信息:
注意 :用户负责证书轮转和更新。
1.5.1. Red Hat Advanced Cluster Management hub 集群证书 复制链接链接已复制到粘贴板!
OpenShift Container Platform 默认入口证书是 hub 集群证书类型。安装 Red Hat Advanced Cluster Management 后,可观察性证书会被可观察性组件创建并使用,以便在 hub 集群和受管集群之间的流量上提供 mutual TLS。根据您的需要,访问可观察性命名空间以检索并实现不同的可观察证书。
open-cluster-management-observability命名空间包含以下证书:-
Observability-server-ca-certs:获取 CA 证书来签署服务器端证书 -
Observability-client-ca-certs:获取 CA 证书来签署客户端的证书 -
Observability-server-certs:获取由observability-observatorium-api 部署使用的服务器证书 -
Observability-grafana-certs:获取observability-rbac-query-proxy部署使用的客户端证书
-
open-cluster-management-addon-observability命名空间在受管集群中包含以下证书:-
Observability-managed-cluster-certs:与 hub 服务器中的observability-server-ca-certs相同的服务器 CA 证书 -
observability-controller-open-cluster-management.io-observability-signer-client-cert:由被metrics-collector-deployment使用的客户证书
-
CA 证书的有效期为五年,其他证书的有效期为一年。所有可观察证书会在过期后自动刷新。查看以下列表以了解证书自动更新时的影响:
- 当剩余的有效时间不超过 73 天时,非 CA 证书将自动续订。续订证书后,相关部署中的 Pod 会自动重启以使用更新的证书。
- 当剩余有效时间不超过一年时,CA 证书会被自动续订。证书被续订后,旧的 CA 不会被删除,而是与更新的 CA 共存。相关部署同时使用旧和更新的证书,并继续工作。旧的 CA 证书在过期时会被删除。
- 当证书被续订时,hub 集群和受管集群之间的流量不会中断。
查看以下 Red Hat Advanced Cluster Management hub 集群证书表:
| Namespace | Secret 名称 | Pod 标签 | |
|---|---|---|---|
| open-cluster-management | channels-apps-open-cluster-management-webhook-svc-ca | app=multicluster-operators-channel | open-cluster-management |
| channels-apps-open-cluster-management-webhook-svc-signed-ca | app=multicluster-operators-channel | open-cluster-management | multicluster-operators-application-svc-ca |
| app=multicluster-operators-application | open-cluster-management | multicluster-operators-application-svc-signed-ca | app=multicluster-operators-application |
| open-cluster-management-hub | registration-webhook-serving-cert signer-secret | 不是必需的 | open-cluster-management-hub |
1.5.2. Red Hat Advanced Cluster Management 管理的证书 复制链接链接已复制到粘贴板!
查看下表,了解包含 Red Hat Advanced Cluster Management 管理的证书和相关 secret 的组件 pod 的总结列表:
| Namespace | Secret 名称(如果适用) |
|---|---|
| open-cluster-management-agent-addon | cluster-proxy-open-cluster-management.io-proxy-agent-signer-client-cert |
| open-cluster-management-agent-addon | cluster-proxy-service-proxy-server-certificates |
使用这些 Red Hat Advanced Cluster Management 受管证书在 hub 集群中验证受管集群。这些受管集群证书得到管理并自动刷新。如果您自定义 hub 集群 API 服务器证书,受管集群会自动更新其证书。
1.5.3. 其他资源 复制链接链接已复制到粘贴板!
- 如果您试图重新连接没有自动重新连接的受管 hub 集群,请参阅在 证书更改后对导入的集群进行故障排除。
- 在受管集群中使用证书策略控制器来创建和管理证书策略。如需了解更多详细信息,请参阅证书策略控制器。
- 有关使用 SSL 证书安全连接到私有托管的 Git 服务器的更多详细信息,请参阅使用自定义 CA 证书进行安全 HTTPS 连接。
- 有关更多详细信息,请参阅OpenShift 服务服务证书。
- OpenShift Container Platform 默认入口是 hub 集群证书。有关更多详细信息,请参阅替换默认入口证书。
1.6. 管理证书 复制链接链接已复制到粘贴板!
继续阅读以了解有关如何刷新、替换、轮转和列出证书的信息。
- 刷新 Red Hat Advanced Cluster Management Webhook 证书
- 替换 Alertmanager 路由的证书
- 轮转 gatekeeper Webhook 证书
- 验证证书轮转
- 列出 hub 集群受管证书
1.6.1. 刷新 Red Hat Advanced Cluster Management Webhook 证书 复制链接链接已复制到粘贴板!
您可以刷新 Red Hat Advanced Cluster Management 受管证书,它们是由 Red Hat Advanced Cluster Management 服务创建和管理的证书。
完成以下步骤以刷新 Red Hat Advanced Cluster Management 管理的证书:
运行以下命令,删除与 Red Hat Advanced Cluster Management 管理证书关联的 secret:
oc delete secret -n <namespace> <secret>
oc delete secret -n <namespace> <secret>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace>和<secret>替换为您要使用的值。
运行以下命令,重启与 Red Hat Advanced Cluster Management 受管证书关联的服务:
oc delete pod -n <namespace> -l <pod-label>
oc delete pod -n <namespace> -l <pod-label>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<namespace>和<pod-label>替换为 Red Hat Advanced Cluster Management 受管集群证书 表中的值。
注: 如果没有指定
pod-label,则不会重启任何服务。secret 被重新创建并自动使用。
1.6.2. 替换 alertmanager 路由的证书 复制链接链接已复制到粘贴板!
如果您不想使用 OpenShift Container Platform 默认入口证书,请通过更新 Alertmanager 路由来替换可观察性警报管理器证书。完成以下步骤:
使用以下命令检查可观察证书:
openssl x509 -noout -text -in ./observability.crt
openssl x509 -noout -text -in ./observability.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将证书上的通用名称 (
CN) 更改为alertmanager。 -
使用 alertmanager 路由的主机名更改
csr.cnf配置文件中的 SAN。 在
open-cluster-management-observability命名空间中创建以下两个 secret。运行以下命令:oc -n open-cluster-management-observability create secret tls alertmanager-byo-ca --cert ./ca.crt --key ./ca.key oc -n open-cluster-management-observability create secret tls alertmanager-byo-cert --cert ./ingress.crt --key ./ingress.key
oc -n open-cluster-management-observability create secret tls alertmanager-byo-ca --cert ./ca.crt --key ./ca.key oc -n open-cluster-management-observability create secret tls alertmanager-byo-cert --cert ./ingress.crt --key ./ingress.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6.3. 轮转 gatekeeper Webhook 证书 复制链接链接已复制到粘贴板!
完成以下步骤以轮转 gatekeeper Webhook 证书:
使用以下命令编辑包含证书的 secret:
oc edit secret -n openshift-gatekeeper-system gatekeeper-webhook-server-cert
oc edit secret -n openshift-gatekeeper-system gatekeeper-webhook-server-certCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
删除
data部分中的以下内容:ca.crt、ca.key、tls.crt和tls.key。 使用以下命令删除
gatekeeper-controller-managerpod 来重启 gatekeeper Webhook 服务:oc delete pod -n openshift-gatekeeper-system -l control-plane=controller-manager
oc delete pod -n openshift-gatekeeper-system -l control-plane=controller-managerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
gatekeeper Webhook 证书被轮转。
1.6.4. 验证证书轮转 复制链接链接已复制到粘贴板!
按照以下流程验证您的证书是否已轮转:
- 找到要检查的 secret。
-
检查
tls.crt密钥以验证证书是否可用。 使用以下命令显示证书信息:
oc get secret <your-secret-name> -n open-cluster-management -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -nooutoc get secret <your-secret-name> -n open-cluster-management -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -nooutCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<your-secret-name>替换为您要验证的 secret 的名称。如果需要,还要更新命名空间和 JSON 路径。检查输出中的
Validity详情。查看以下Validity示例:Validity Not Before: Jul 13 15:17:50 2023 GMT Not After : Jul 12 15:17:50 2024 GMTValidity Not Before: Jul 13 15:17:50 2023 GMT1 Not After : Jul 12 15:17:50 2024 GMT2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6.5. 列出 hub 集群受管证书 复制链接链接已复制到粘贴板!
您可以查看在内部使用 OpenShift Service Serving 证书服务的 hub 集群受管证书列表。运行以下命令列出证书:
for ns in multicluster-engine open-cluster-management ; do echo "$ns:" ; oc get secret -n $ns -o custom-columns=Name:.metadata.name,Expiration:.metadata.annotations.service\\.beta\\.openshift\\.io/expiry | grep -v '<none>' ; echo ""; done
for ns in multicluster-engine open-cluster-management ; do echo "$ns:" ; oc get secret -n $ns -o custom-columns=Name:.metadata.name,Expiration:.metadata.annotations.service\\.beta\\.openshift\\.io/expiry | grep -v '<none>' ; echo ""; done
如需更多信息,请参阅附加资源部分中的 OpenShift Service Serving 证书部分。
注:如果启用了可观察性,则还需要额外的命名空间来创建证书。
1.6.6. 其他资源 复制链接链接已复制到粘贴板!
- 请参阅使用服务服务证书机密保护服务流量。
1.7. 使用您自己的可观察证书颁发机构 (CA) 证书 复制链接链接已复制到粘贴板!
安装 Red Hat Advanced Cluster Management for Kubernetes 时,默认只为可观察性提供证书颁发机构 (CA)证书。如果您不想使用 Red Hat Advanced Cluster Management 生成的默认可观察性 CA 证书,您可以在启用可观察性前选择使用自己的可观察 CA 证书。
1.7.1. 使用 OpenSSL 命令生成 CA 证书 复制链接链接已复制到粘贴板!
Observability 需要两个 CA 证书,一个用于服务器端,另一个用于客户端。
使用以下命令生成您的 CA RSA 私钥:
openssl genrsa -out serverCAKey.pem 2048 openssl genrsa -out clientCAKey.pem 2048
openssl genrsa -out serverCAKey.pem 2048 openssl genrsa -out clientCAKey.pem 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用私钥生成自签名 CA 证书。运行以下命令:
openssl req -x509 -sha256 -new -nodes -key serverCAKey.pem -days 1825 -out serverCACert.pem openssl req -x509 -sha256 -new -nodes -key clientCAKey.pem -days 1825 -out clientCACert.pem
openssl req -x509 -sha256 -new -nodes -key serverCAKey.pem -days 1825 -out serverCACert.pem openssl req -x509 -sha256 -new -nodes -key clientCAKey.pem -days 1825 -out clientCACert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.2. 创建与您自己的可观察 CA 证书关联的 secret 复制链接链接已复制到粘贴板!
完成以下步骤以创建 secret:
使用您的证书和私钥创建
observability-server-ca-certssecret。运行以下命令:oc -n open-cluster-management-observability create secret tls observability-server-ca-certs --cert ./serverCACert.pem --key ./serverCAKey.pem
oc -n open-cluster-management-observability create secret tls observability-server-ca-certs --cert ./serverCACert.pem --key ./serverCAKey.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您的证书和私钥创建
observability-client-ca-certssecret。运行以下命令:oc -n open-cluster-management-observability create secret tls observability-client-ca-certs --cert ./clientCACert.pem --key ./clientCAKey.pem
oc -n open-cluster-management-observability create secret tls observability-client-ca-certs --cert ./clientCACert.pem --key ./clientCAKey.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.3. 替换 rbac-query-proxy 路由的证书 复制链接链接已复制到粘贴板!
您还可以替换 therbac-query-proxy 路由的证书:请参阅使用 OpenSSL 命令创建证书生成 CA 证书。
当您使用 csr.cnf 文件创建证书签名请求(CSR)时,更新 subjectAltName 部分中的 DNS.1 字段,以匹配 rbac-query-proxy 路由的主机名。
完成以下步骤:
通过运行以下命令检索主机名:
oc get route rbac-query-proxy -n open-cluster-management-observability -o jsonpath=" {.spec.host}"oc get route rbac-query-proxy -n open-cluster-management-observability -o jsonpath=" {.spec.host}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用生成的证书创建
proxy-byo-ca机密。运行以下命令:oc -n open-cluster-management-observability create secret tls proxy-byo-ca --cert ./ca.crt --key ./ca.key
oc -n open-cluster-management-observability create secret tls proxy-byo-ca --cert ./ca.crt --key ./ca.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用生成的证书创建
proxy-byo-certsecret:oc -n open-cluster-management-observability create secret tls proxy-byo-cert --cert ./ingress.crt --key ./ingress.key
oc -n open-cluster-management-observability create secret tls proxy-byo-cert --cert ./ingress.crt --key ./ingress.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.7.4. 其他资源 复制链接链接已复制到粘贴板!
- 自定义路由认证
- 自定义用于访问对象存储的证书