安全集群


Red Hat Advanced Cluster Management for Kubernetes 2.14

使用基于角色的访问控制和证书保护集群。

摘要

确保用户可以访问执行特定角色所需的资源。

第 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 支持的以下角色定义表列表:

Expand
表 1.1. 角色定义表

角色

定义

cluster-admin

这是 OpenShift Container Platform 的默认角色。具有集群范围内的绑定到 cluster-admin 角色的用户,是一个 OpenShift Container Platform 超级用户,其具有所有访问权限。

open-cluster-management:cluster-manager-admin

具有集群范围内的绑定到 open-cluster-management:cluster-manager-admin 角色的用户,是一个 Red Hat Advanced Cluster Management for Kubernetes 超级用户,其具有所有访问权限。此角色允许用户创建 ManagedCluster 资源。

open-cluster-management:admin:<managed_cluster_name>

具有集群范围内的绑定到 open-cluster-management:admin:<managed_cluster_name> 角色的用户,具有对名为 <managed_cluster_name>ManagedCluster 资源的管理员访问权限。当用户具有受管集群时,会自动创建此角色。

open-cluster-management:view:<managed_cluster_name>

具有集群范围内的绑定到 open-cluster-management:view:<managed_cluster_name> 角色的用户,可以访问名为 <managed_cluster_name>ManagedCluster 资源。

open-cluster-management:managedclusterset:admin:<managed_clusterset_name>

具有集群范围内的绑定到 open-cluster-management:managedclusterset:admin:<managed_clusterset_name> 角色的用户,具有对名为 <managed_clusterset_name>ManagedCluster 资源的管理员访问权限。用户还有对 managedcluster.cluster.open-cluster-management.ioclusterclaim.hive.openshift.ioclusterdeployment.hive.openshift.ioclusterpool.hive.openshift.io 资源的管理员访问权限,这些资源具有受管集群集标签:cluster.open-cluster-management.io/clusterset=<managed_clusterset_name>。使用集群集时会自动生成角色绑定。请参阅创建 ManagedClusterSet 以了解如何管理该资源。

open-cluster-management:managedclusterset:view:<managed_clusterset_name>

具有集群范围内的绑定到 open-cluster-management:managedclusterset:view:<managed_clusterset_name> 角色的用户,可以访问名为 <managed_clusterset_name>' 的 ManagedCluster 资源。用户还有对 managedcluster.cluster.open-cluster-management.ioclusterclaim.hive.openshift.ioclusterdeployment.hive.openshift.ioclusterpool.hive.openshift.io 资源的查看访问权限,这些资源具有受管集群集标签: cluster.open-cluster-management.io,clusterset=<managed_clusterset_name>。有关如何管理受管集群设置资源的详情,请参阅创建 ManagedClusterSet

open-cluster-management:subscription-admin

具有 open-cluster-management:subscription-admin 角色的用户,可以创建 Git 订阅将资源部署到多个命名空间中。资源在订阅的 Git 仓库中的 Kubernetes 资源 YAML 文件中指定。备注:当一个非 subscription-admin 用户创建订阅时,无论资源中的指定命名空间是什么,所有资源都会部署到订阅命名空间中。如需更多信息,请参阅应用程序生命周期 RBAC 部分。

admin, edit, view

admin、edit 和 view 是 OpenShift Container Platform 的默认角色。具有命名空间范围绑定的用户可以访问特定命名空间中的 open-cluster-management 资源,而集群范围的绑定到同一角色可以访问整个集群范围的 open-cluster-management 资源。

open-cluster-management:managedclusterset:bind:<managed_clusterset_name>

带有 open-cluster-management:managedclusterset:bind:<managed_clusterset_name> 角色的用户具有可以查看被称为 <managed_clusterset_name> 的受管集群资源的权限。用户可以将 <managed_clusterset_name> 绑定到一个命名空间。用户还有对 managedcluster.cluster.open-cluster-management.ioclusterclaim.hive.openshift.ioclusterdeployment.hive.openshift.ioclusterpool.hive.openshift.io 资源的查看访问权限,这些资源具有以下受管集群集标签:cluster.open-cluster-management.io/clusterset=<managed_clusterset_name>。请参阅创建 ManagedClusterSet 以了解如何管理该资源。

重要:

  • 任何用户都可以从 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>
    Copy to Clipboard Toggle word wrap

    这个角色是一个超级用户,可访问所有资源和操作。您可以使用此角色为应用程序和命名空间中的所有应用程序资源创建命名空间。

  • 创建将资源部署到多个命名空间的应用程序。您必须创建一个集群角色绑定到 open-cluster-management:subscription-admin 集群角色,并将其绑定到名为 username 的用户。运行以下命令:

    oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
    Copy to Clipboard Toggle word wrap
  • 使用用户名 用户创建和管理 cluster-name 受管集群中的应用程序。您必须输入以下命令创建一个到 open-cluster-management:admin:<cluster-name> 集群角色绑定的集群角色绑定,并将其绑定到 username

    oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:admin:<cluster-name> --user=<username>
    Copy to Clipboard Toggle word wrap

    此角色具有对受管集群 cluster-name 上所有 application 资源的读写访问权限。如果需要访问其他受管集群,请重复此操作。

  • 输入以下命令,创建一个到使用 admin 角色的 application 命名空间的命名空间角色绑定,并把它绑定到 username

    oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=admin --user=<username>
    Copy to Clipboard Toggle word wrap

    此角色具有对 application 命名空间中的所有 application 资源的读和写的访问权限。如果需要访问其他应用程序,或者应用部署到多个命名空间,请重复此操作。

  • 您可以创建将资源部署到多个命名空间的应用程序。输入以下命令创建到 open-cluster-management:subscription-admin 集群角色的集群角色绑定,并将其绑定到 username

    oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:subscription-admin --user=<username>
    Copy to Clipboard Toggle word wrap
  • 要使用名为 username 的用户查看在一个名为 cluster-name 的受管集群中的应用程序,请创建一个集群角色绑定到 open-cluster-management:view: 集群角色,并将其绑定到 username。输入以下命令:

    oc create clusterrolebinding <role-binding-name> --clusterrole=open-cluster-management:view:<cluster-name> --user=<username>
    Copy to Clipboard Toggle word wrap

    此角色具有对受管集群 cluster-name 上所有 application 资源的读访问权限。如果需要访问其他受管集群,请重复此操作。

  • 使用 view 角色创建到 application 命名空间的命名空间角色绑定,并将它绑定到 username。输入以下命令:

    oc create rolebinding <role-binding-name> -n <application-namespace> --clusterrole=view --user=<username>
    Copy to Clipboard Toggle word wrap

    此角色具有对 application 命名空间中的 所有 application 资源的读访问权限。如果需要访问其他应用程序,请重复此操作。

查看以下应用程序生命周期控制台和 API RBAC 表:

Expand
表 1.2. 应用程序生命周期的控制台 RBAC 表
资源AdminEditView

Application

创建、读取、更新、删除

创建、读取、更新、删除

读取

Channel

创建、读取、更新、删除

创建、读取、更新、删除

读取

Subscription

创建、读取、更新、删除

创建、读取、更新、删除

读取

Expand
表 1.3. 应用程序生命周期的 API RBAC 表
APIAdminEditView

applications.app.k8s.io

创建、读取、更新、删除

创建、读取、更新、删除

读取

channels.apps.open-cluster-management.io

创建、读取、更新、删除

创建、读取、更新、删除

读取

deployables.apps.open-cluster-management.io

创建、读取、更新、删除

创建、读取、更新、删除

读取

helmreleases.apps.open-cluster-management.io

创建、读取、更新、删除

创建、读取、更新、删除

读取

placements.apps.open-cluster-management.io

创建、读取、更新、删除

创建、读取、更新、删除

读取

placementrules.apps.open-cluster-management.io (已弃用)

创建、读取、更新、删除

创建、读取、更新、删除

读取

subscriptions.apps.open-cluster-management.io

创建、读取、更新、删除

创建、读取、更新、删除

读取

configmaps

创建、读取、更新、删除

创建、读取、更新、删除

读取

secrets

创建、读取、更新、删除

创建、读取、更新、删除

读取

命名空间

创建、读取、更新、删除

创建、读取、更新、删除

读取

1.2.2. 监管生命周期 RBAC

要执行监管生命周期操作,用户必须有权访问创建策略的命名空间,以及访问应用策略的受管集群。受管集群还必须是绑定到命名空间的 ManagedClusterSet 的一部分。要继续了解 ManagedClusterSet,请参阅 ManagedClusterSets Introduction

在选择了命名空间后,如 rhacm-policies,带有一个或多个绑定的 ManagedClusterSets,并在您有权在命名空间中创建 放置 对象后,查看以下操作:

  • 要使用 Policy,PlacementBinding, 和 PolicyAutomation edit 访问创建名为 rhacm-edit-policyClusterRole,请运行以下命令:

    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
    Copy to Clipboard Toggle word wrap
  • 要在 rhacm-policies 命名空间中创建策略,请使用之前创建的 ClusterRole 将命名空间 RoleBinding (如 rhacm-edit-policy )创建到 rhacm-policies 命名空间。运行以下命令:

    oc create rolebinding rhacm-edit-policy -n rhacm-policies --clusterrole=rhacm-edit-policy --user=<username>
    Copy to Clipboard Toggle word wrap
  • 要查看受管集群的策略状态,您需要有权查看 hub 集群上的受管集群命名空间中的策略。如果您没有 查看 访问权限,如通过 OpenShift 视图 ClusterRole,请创建一个 ClusterRole,如 rhacm-view-policy,使用以下命令查看策略的访问权限:

    oc create clusterrole rhacm-view-policy --resource=policies.policy.open-cluster-management.io --verb=get,list,watch
    Copy to Clipboard Toggle word wrap
  • 要将新 ClusterRole 绑定到受管集群命名空间,请运行以下命令来创建命名空间 RoleBinding

    oc create rolebinding rhacm-view-policy -n <cluster name> --clusterrole=rhacm-view-policy --user=<username>
    Copy to Clipboard Toggle word wrap
1.2.2.1. 监管生命周期的控制台和 API RBAC 表

查看以下监管生命周期控制台和 API RBAC 表:

Expand
表 1.4. 监管生命周期的控制台 RBAC 表
资源AdminEditView

策略(policy)

创建、读取、更新、删除

读取、更新

读取

PlacementBindings

创建、读取、更新、删除

读取、更新

读取

放置

创建、读取、更新、删除

读取、更新

读取

PlacementRules (已弃用)

创建、读取、更新、删除

读取、更新

读取

PolicyAutomations

创建、读取、更新、删除

读取、更新

读取

Expand
表 1.5. 监管生命周期的 API RBAC 表
APIAdminEditView

policies.policy.open-cluster-management.io

创建、读取、更新、删除

读取、更新

读取

placementbindings.policy.open-cluster-management.io

创建、读取、更新、删除

读取、更新

读取

policyautomations.policy.open-cluster-management.io

创建、读取、更新、删除

读取、更新

读取

1.2.3. Observability RBAC

要查看受管集群的可观察性指标,您必须具有对 hub 集群中该受管集群的 view 访问权限。查看以下可观察功能列表:

  • 访问受管集群指标。

    如果没有将用户分配给 hub 集群上的受管集群的 view 角色,则拒绝用户访问受管集群的指标。运行以下命令,以验证用户是否有在受管集群命名空间中创建 managedClusterView 角色:

    oc auth can-i create ManagedClusterView -n <managedClusterName> --as=<user>
    Copy to Clipboard Toggle word wrap

    作为集群管理员,在受管集群命名空间中创建一个 managedClusterView 角色。运行以下命令:

    oc create role create-managedclusterview --verb=create --resource=managedclusterviews -n <managedClusterName>
    Copy to Clipboard Toggle word wrap

    然后,通过创建角色绑定来将角色应用到用户。运行以下命令:

    oc create rolebinding user-create-managedclusterview-binding --role=create-managedclusterview --user=<user>  -n <managedClusterName>
    Copy to Clipboard Toggle word wrap
  • 搜索资源。

    要验证用户是否可以访问资源类型,请使用以下命令:

    oc auth can-i list <resource-type> -n <namespace> --as=<rbac-user>
    Copy to Clipboard Toggle word wrap

    备注: <resource-type> 必须是复数。

  • 要在 Grafana 中查看可观察性数据,则必须在受管集群相同的命名空间中有一个 RoleBinding 资源。

    查看以下 RoleBinding 示例:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
     name: <replace-with-name-of-rolebinding>
     namespace: <replace-with-name-of-managedcluster-namespace>
    subjects:
     - kind: <replace with User|Group|ServiceAccount>
       apiGroup: rbac.authorization.k8s.io
       name: <replace with name of User|Group|ServiceAccount>
    roleRef:
     apiGroup: rbac.authorization.k8s.io
     kind: ClusterRole
     name: view
    Copy to Clipboard Toggle word wrap

如需更多信息,请参阅角色绑定策略。请参阅 Observability 高级配置 来配置可观察性。

要管理可观察性组件,请查看以下 API RBAC 表:

Expand
表 1.6. 用于 observability 的 API RBAC 表

API

Admin

Edit

View

multiclusterobservabilities.observability.open-cluster-management.io

create、read、update 和 delete

读取、更新

读取

searchcustomizations.search.open-cluster-management.io

create, get, list, watch, update, delete, patch

-

-

policyreports.wgpolicyk8s.io

get、list、watch

get、list、watch

get、list、watch

技术预览: 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字段进行搜索,才能检索可代表用于访问控制的虚拟机的托管集群命名空间列表。
  • 您需要虚拟机。

您可以分配用户来管理具有细粒度的基于角色的访问控制的虚拟机。如果不允许用户角色访问,则控制台中的操作将被禁用。滑动YAML选项以查看您在 YAML 编辑器中输入的数据。

您可以授予 OpenShift Virtualization 以下角色的访问权限,这些角色是默认角色的扩展:

  • kubevirt.io:view :仅查看资源
  • kubevirt.io:edit :修改资源
  • kubevirt.io:admin :查看、修改、删除资源;授予权限

重要提示:作为管理员,您需要为有效的ClusterPermission资源添加RoleBindingClusterRoleBinding资源。您也可以选择添加这两种资源。

  1. 导航到您的MultiClusterHub自定义资源以编辑资源并启用该功能。

    1. 本地集群视图中,单击操作员>已安装的操作员> Kubernetes 的高级集群管理
    2. 单击MultiClusterHub选项卡来编辑资源。
    3. 滑动YAML选项以查看 YAML 编辑器中的数据。
    4. 在您的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
Copy to Clipboard Toggle word wrap
  1. 使用environment=virtualization标记您的local-cluster

    1. 所有集群视图中,单击基础架构>集群>
    2. 找到您的本地集群并单击“操作”进行编辑。
    3. 添加environment=virtualization标签并保存更改。请参见以下示例:
    environment=virtualization
    Copy to Clipboard Toggle word wrap
  2. remediationActionpolicy-virt-clusterroles值更改为enforce ,这会将kubevirt clusterroles添加到 hub 集群。

    1. 单击治理>策略
    2. 找到policy-virt-clusterroles策略并单击ActionsremediationAction值更改为enforcement重要提示:策略中有两个remediationAction规范,但您只需更改后者的remediationAction 。这不适用于 YAML 文件中的第一个模板。请参见以下示例:

        remediationAction: enforce
      Copy to Clipboard Toggle word wrap
    3. 滑动YAML选项以查看 YAML 编辑器中的数据并保存更改。请参见以下 YAML 示例:
  3. 创建ClusterRole资源并命名您的文件。

    1. 本地集群视图中,单击用户管理>角色>创建角色
    2. 在 YAML 编辑器中添加以下ClusterRole资源信息:
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <cluster-role-name> 
    1
    
    rules:
      - apiGroups: ["clusterview.open-cluster-management.io"]
        resources: ["kubevirtprojects"]
        verbs: ["list"]
      - apiGroups: ["clusterview.open-cluster-management.io"]
        resources: ["managedclusters"]
        verbs: ["list","get","watch"]
      - apiGroups: ["cluster.open-cluster-management.io"]
        resources: ["managedclusters"]
        verbs: ["get"]
        resourceNames: ["<cluster-name-01>", "<cluster-name-02>", "<cluster-name-03>"] 
    2
    Copy to Clipboard Toggle word wrap
    1
    您可以使用不同的名称,但在创建ClusterRoleBinding资源时必须继续使用该名称。
    2
    添加您希望用户或组访问的托管集群的名称。每个名称必须是唯一的。
  4. 创建ClusterRoleBinding资源。

    1. 本地集群视图中,单击用户管理>角色绑定>创建绑定
    2. 对于绑定类型,选择集群范围的角色绑定
    3. 添加与ClusterRole名称匹配的RoleBinding名称,该名称是您之前选择的<cluster-role-name>
    4. 添加匹配的角色名称。
    5. 对于主题,选择用户或组,输入用户或组名称,然后保存更改。
  5. 创建ClusterPermission资源以在命名空间级别授予权限。

    1. 单击访问控制>创建权限
    2. 基本信息窗口中,添加集群名称和被授予权限的用户或组。
    3. 选择该权限的集群。
  6. 添加角色绑定信息,在命名空间级别设置权限。

    1. 在集群中添加虚拟机命名空间。
    2. 添加用户或组。
    3. 添加角色(例如kubevirt.io:view ) ,以实现细粒度的基于角色的访问控制。您可以选择RoleBindings的组合。
  7. 添加具有相同信息的ClusterRoleBinding资源以在集群级别设置权限。
  8. 查看并单击“创建权限”以创建ClusterPermission资源,如下例所示:

    apiVersion: rbac.open-cluster-management.io/v1alpha1
    kind: ClusterPermission
    metadata:
      name: <cluster-premission-name> 
    1
    
      namespace: <cluster-name-01> 
    2
    
    spec:
      roleBindings:
        - name: <role-binding-name> 
    3
    
          namespace: <your-namespace> 
    4
    
          roleRef:
            name: kubevirt.io:admin
            apiGroup: rbac.authorization.k8s.io
            kind: ClusterRole
          subjects:
            - kind: User 
    5
    
              apiGroup: rbac.authorization.k8s.io
              name: <user-name> 
    6
    Copy to Clipboard Toggle word wrap
    1
    指定权限的名称。
    2
    添加集群名称,它也是权限的命名空间。
    3
    指定<role-binding-name>的名称,用于将角色分配给用户或组。
    4
    指定托管集群中授予用户或组访问权限的命名空间。
    5
    选择“用户”“组”
    6
    指定用户或组
  9. 检查控制台中的“就绪”状态。
  10. 您可以点击编辑权限来编辑角色绑定集群角色绑定
  11. 可选:单击导出 YAML以将资源用于 GitOps 或在终端中使用它。
  12. 准备就绪后,您可以删除ClusterPermissions资源。
  13. 可选:如果启用了可观察性服务,请在中心集群上创建额外的RoleBinding资源,以便用户可以在 Grafana 中查看虚拟机详细信息。

    1. 本地集群视图中,单击用户管理>角色绑定>角色绑定
    2. 对于绑定类型,选择命名空间角色绑定
    3. 指定RoleBindings的名称,它将角色分配给用户或组。
    4. 添加集群名称,这也是 hub 集群上的命名空间。
    5. 选择角色名称视图
    6. 对于主题,选择用户,输入用户或组名称,然后保存更改。

技术预览: 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字段进行搜索,才能检索可代表用于访问控制的虚拟机的托管集群命名空间列表。
  • 您需要虚拟机。

您可以授予 OpenShift Virtualization 以下角色的访问权限,这些角色是默认角色的扩展:

  • kubevirt.io:view :仅查看资源
  • kubevirt.io:edit :修改资源
  • kubevirt.io:admin :查看、修改、删除资源;授予权限

完成以下步骤:

  1. MultiClusterHub资源中启用fine-grained-rbac-preview

    1. 运行以下命令:

      oc edit mch -n open-cluster-management multiclusterhub
      Copy to Clipboard Toggle word wrap
    2. 编辑以将configOverrides规范从enabled: false更改为enabled: true 。请参阅以下启用该功能的示例:

          - configOverrides: {}
            enabled: true
            name: fine-grained-rbac-preview
      Copy to Clipboard Toggle word wrap

    注意:如果您不使用open-cluster-management命名空间,请运行oc get mch -A来获取MultiClusterHub资源的名称和命名空间。

  2. 使用environment=virtualization标记您的local-cluster 。运行以下命令:

    oc label managedclusters local-cluster environment=virtualization
    Copy to Clipboard Toggle word wrap
  3. policy-virt-clusterroles更改为enforce ,这会将kubevirt clusterroles添加到 hub 集群。

    1. 运行以下命令来编辑策略:

      oc edit policy -n open-cluster-management-global-set policy-virt-clusterroles
      Copy to Clipboard Toggle word wrap
    2. remediationAction值从inform编辑为force重要提示:策略中有两个remediationAction规范,但您只需更改后者的remediationAction 。这不适用于 YAML 文件中的第一个模板。请参见以下示例:
      remediationAction: enforce
    Copy to Clipboard Toggle word wrap
  4. 创建以下 YAML 文件并命名该文件:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <cluster-role-name> 
    1
    
    rules:
      - apiGroups: ["clusterview.open-cluster-management.io"]
        resources: ["kubevirtprojects"]
        verbs: ["list"]
      - apiGroups: ["clusterview.open-cluster-management.io"]
        resources: ["managedclusters"]
        verbs: ["list","get","watch"]
      - apiGroups: ["cluster.open-cluster-management.io"]
        resources: ["managedclusters"]
        verbs: ["get"]
        resourceNames: ["<cluster-name-01>", "<cluster-name-02>", "<cluster-name-03>"] 
    2
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: <role-binding-name> 
    3
    
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: <cluster-role-name> 
    4
    
    subjects:
      - kind: User 
    5
    
        apiGroup: rbac.authorization.k8s.io
        name: <user-name> 
    6
    Copy to Clipboard Toggle word wrap
    1
    您可以使用任何名称,但必须继续使用该名称。
    2
    添加您希望用户或组访问的托管集群的名称。每个名称必须是唯一的。
    3
    指定RoleBindings的名称,它将角色分配给用户或组。
    4
    确保名称与ClusterRole名称匹配。
    5
    选择用户或组。
    6
    指定用户或组名。
  5. 应用ClusterRole资源。运行以下命令并更改文件名(如果您在此过程的早期更改过它):

    oc apply -f <filename>.yml
    Copy to Clipboard Toggle word wrap
  6. ClusterPermission资源创建一个 YAML 文件并命名该文件。
  7. 通过指定集群名称、托管集群命名空间和用户或组名称,从ClusterPermission资源分配基于角色的细粒度访问权限:

    apiVersion: rbac.open-cluster-management.io/v1alpha1
    kind: ClusterPermission
    metadata:
      name: <cluster-premission-name> 
    1
    
      namespace: <cluster-name-01> 
    2
    
    spec:
      roleBindings:
        - name: <role-binding-name> 
    3
    
          namespace: <your-namespace> 
    4
    
          roleRef:
            name: kubevirt.io:admin
            apiGroup: rbac.authorization.k8s.io
            kind: ClusterRole
          subjects:
            - kind: User 
    5
    
              apiGroup: rbac.authorization.k8s.io
              name: <user-name> 
    6
    Copy to Clipboard Toggle word wrap
    1
    指定权限的名称。
    2
    添加集群名称,它也是权限的命名空间。
    3
    指定RoleBindings的名称,它将角色分配给用户或组。
    4
    指定托管集群中授予用户或组访问权限的命名空间。
    5
    选择“用户”“组”
    6
    指定用户或组
  8. 如果您之前更改了名称,请运行以下命令来应用该文件并更改该文件的名称:

    oc apply -f <filename>.yml
    Copy to Clipboard Toggle word wrap
  9. 可选:如果启用了可观察性,请在中心集群上创建额外的RoleBinding ,以便用户可以在 Grafana 中查看虚拟机详细信息。

    1. 创建用于 Grafana 访问的RoleBinding资源。请参阅以下示例 YAML 文件:

      kind: RoleBinding
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
       name: <role-binding-name> 
      1
      
       namespace: <cluster-name-01> 
      2
      
      subjects:
       - kind: User 
      3
      
         apiGroup: rbac.authorization.k8s.io
         name: <user-name> 
      4
      
      roleRef:
       apiGroup: rbac.authorization.k8s.io
       kind: ClusterRole
       name: view
      Copy to Clipboard Toggle word wrap
      1
      指定<role-binding-name>的名称,用于将角色分配给用户或组。
      2
      添加集群名称,这也是 hub 集群上的命名空间。
      3
      选择“用户”“组”
      4
      选择用户或组
    2. 使用以下命令应用ClusterRoleBinding资源:
    oc apply -f <filename>.yml
    Copy to Clipboard Toggle word wrap

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 集群证书表:

Expand
表 1.7. Red Hat Advanced Cluster Management hub 集群证书
NamespaceSecret 名称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 的总结列表:

Expand
表 1.8. 包含 Red Hat Advanced Cluster Management 管理证书的 Pod
NamespaceSecret 名称(如果适用)

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. 其他资源

1.6. 管理证书

继续阅读以了解有关如何刷新、替换、轮转和列出证书的信息。

您可以刷新 Red Hat Advanced Cluster Management 受管证书,它们是由 Red Hat Advanced Cluster Management 服务创建和管理的证书。

完成以下步骤以刷新 Red Hat Advanced Cluster Management 管理的证书:

  1. 运行以下命令,删除与 Red Hat Advanced Cluster Management 管理证书关联的 secret:

    oc delete secret -n <namespace> <secret> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <namespace><secret> 替换为您要使用的值。
  2. 运行以下命令,重启与 Red Hat Advanced Cluster Management 受管证书关联的服务:

    oc delete pod -n <namespace> -l <pod-label> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <namespace><pod-label> 替换为 Red Hat Advanced Cluster Management 受管集群证书 表中的值。

    注: 如果没有指定 pod-label,则不会重启任何服务。secret 被重新创建并自动使用。

1.6.2. 替换 alertmanager 路由的证书

如果您不想使用 OpenShift Container Platform 默认入口证书,请通过更新 Alertmanager 路由来替换可观察性警报管理器证书。完成以下步骤:

  1. 使用以下命令检查可观察证书:

    openssl x509  -noout -text -in ./observability.crt
    Copy to Clipboard Toggle word wrap
  2. 将证书上的通用名称 (CN) 更改为 alertmanager
  3. 使用 alertmanager 路由的主机名更改 csr.cnf 配置文件中的 SAN。
  4. 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
    Copy to Clipboard Toggle word wrap

1.6.3. 轮转 gatekeeper Webhook 证书

完成以下步骤以轮转 gatekeeper Webhook 证书:

  1. 使用以下命令编辑包含证书的 secret:

    oc edit secret -n openshift-gatekeeper-system gatekeeper-webhook-server-cert
    Copy to Clipboard Toggle word wrap
  2. 删除 data 部分中的以下内容: ca.crtca.keytls.crttls.key
  3. 使用以下命令删除 gatekeeper-controller-manager pod 来重启 gatekeeper Webhook 服务:

    oc delete pod -n openshift-gatekeeper-system -l control-plane=controller-manager
    Copy to Clipboard Toggle word wrap

gatekeeper Webhook 证书被轮转。

1.6.4. 验证证书轮转

按照以下流程验证您的证书是否已轮转:

  1. 找到要检查的 secret。
  2. 检查 tls.crt 密钥以验证证书是否可用。
  3. 使用以下命令显示证书信息:

    oc get secret <your-secret-name> -n open-cluster-management -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout
    Copy to Clipboard Toggle word wrap

    <your-secret-name> 替换为您要验证的 secret 的名称。如果需要,还要更新命名空间和 JSON 路径。

  4. 检查输出中的 Validity 详情。查看以下 Validity 示例:

    Validity
                Not Before: Jul 13 15:17:50 2023 GMT 
    1
    
                Not After : Jul 12 15:17:50 2024 GMT 
    2
    Copy to Clipboard Toggle word wrap
    1
    Not Before 值是您轮转证书的日期和时间。
    2
    Not After 值是证书过期的日期和时间。

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
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅附加资源部分中的 OpenShift Service Serving 证书部分。

:如果启用了可观察性,则还需要额外的命名空间来创建证书。

1.6.6. 其他资源

安装 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
    Copy to Clipboard Toggle word wrap
  • 使用私钥生成自签名 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
    Copy to Clipboard Toggle word wrap

完成以下步骤以创建 secret:

  1. 使用您的证书和私钥创建 observability-server-ca-certs secret。运行以下命令:

    oc -n open-cluster-management-observability create secret tls observability-server-ca-certs --cert ./serverCACert.pem --key ./serverCAKey.pem
    Copy to Clipboard Toggle word wrap
  2. 使用您的证书和私钥创建 observability-client-ca-certs secret。运行以下命令:

    oc -n open-cluster-management-observability create secret tls observability-client-ca-certs --cert ./clientCACert.pem --key ./clientCAKey.pem
    Copy to Clipboard Toggle word wrap

1.7.3. 替换 rbac-query-proxy 路由的证书

您还可以替换 therbac-query-proxy 路由的证书:请参阅使用 OpenSSL 命令创建证书生成 CA 证书。

当您使用 csr.cnf 文件创建证书签名请求(CSR)时,更新 subjectAltName 部分中的 DNS.1 字段,以匹配 rbac-query-proxy 路由的主机名。

完成以下步骤:

  1. 通过运行以下命令检索主机名:

    oc get route rbac-query-proxy -n open-cluster-management-observability -o jsonpath="
    {.spec.host}"
    Copy to Clipboard Toggle word wrap
  2. 使用生成的证书创建proxy-byo-ca机密。运行以下命令:

    oc -n open-cluster-management-observability create secret tls proxy-byo-ca --cert ./ca.crt --key ./ca.key
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,使用生成的证书创建 proxy-byo-cert secret:

    oc -n open-cluster-management-observability create secret tls proxy-byo-cert --cert ./ingress.crt --key ./ingress.key
    Copy to Clipboard Toggle word wrap

1.7.4. 其他资源

  • 自定义路由认证
  • 自定义用于访问对象存储的证书

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat