这是尚未发布的文档。 SUSE® Virtual Clusters v1.2.0 (Dev).

虚拟集群策略:概念

K3k中的`VirtualClusterPolicy`自定义资源提供了一种定义和强制执行一致的配置、安全设置和资源管理规则的方法,适用于您的虚拟集群及其操作的名称空间。

通过使用VCP,管理员可以集中管理这些方面,减少手动配置,确保符合组织标准,并增强K3k环境的整体安全性和操作一致性。

在主集群中同时使用`RKE2`和`Cilium`可能会导致网络策略问题。推荐的解决方案是使用`VirtualClusterPolicy`来禁用K3k的网络策略设置。

核心概念

什么是虚拟集群策略?

`VirtualClusterPolicy`是一个集群范围的Kubernetes自定义资源,指定了一组规则和配置。这些策略随后应用于在Kubernetes名称空间中明确绑定到VCP的K3k虚拟集群(`Cluster`资源)。

将策略绑定到名称空间

要将`VirtualClusterPolicy`应用于一个或多个名称空间(因此也适用于这些名称空间内的所有K3k `Cluster`资源),您需要标记所需的名称空间。

将以下标签添加到您的名称空间元数据:

`policy.k3k.io/policy-name: <YOUR_POLICY_NAME>`

示例:标记名称空间

apiVersion: v1
kind: Namespace
metadata:
  name: my-app-namespace
  labels:
    policy.k3k.io/policy-name: "standard-dev-policy"

在此示例中,`my-app-namespace`将遵循名为`VirtualClusterPolicy`的`standard-dev-policy`中定义的规则。多个名称空间可以绑定到同一策略以实现统一配置,或者不同名称空间可以绑定到不同的策略。

还需要注意名称空间的策略绑定更改时会发生什么。如果名称空间从虚拟集群策略中解除绑定(通过移除policy.k3k.io/policy-name标签),K3k将清理并去除最初由该策略应用的资源(如资源配额、限制范围和管理的名称空间标签)。同样,如果标签更改以将名称空间绑定到新的虚拟集群策略,K3k将在应用新策略的配置之前,首先去除与旧策略相关的资源,以确保干净的过渡。

默认策略值

如果您创建一个`VirtualClusterPolicy`而不指定任何`spec`字段(例如,使用`k3kcli policy create my-default-policy`),它将以默认设置创建。目前,这包括将`spec.allowedMode`设置为`shared`。

# Example of a minimal VCP (after creation with defaults)
apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
  name: my-default-policy
spec:
  allowedMode: shared

关键能力与示例

一个`VirtualClusterPolicy`可以配置它所绑定的名称空间及其内部运行的虚拟集群的多个方面。

限制允许的虚拟集群模式(AllowedMode

您可以限制在绑定名称空间内配置 K3k mode 资源的 Cluster(例如,“共享”或“虚拟”)。如果在绑定名称空间中创建的 Cluster 的模式不在 allowedMode 中允许,则其创建可能会继续,但应在 Cluster 资源的状态中报告错误。

*示例:*仅允许"共享"模式集群。

apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
  name: shared-only-policy
spec:
  allowedModeTypes:
  - shared

您还可以使用CLI指定此内容:k3kcli policy create --mode shared shared-only-policy(或`--mode virtual`)。

定义资源配额(quota

您可以通过指定`ResourceQuota`为绑定名称空间定义资源消耗限制。K3k将在每个绑定名称空间中创建一个`ResourceQuota`对象,按照提供的规格。

*示例:*设置处理器、内存和 Pod 限制。

apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
  name: quota-policy
spec:
  quota:
    hard:
      cpu: "10"
      memory: "20Gi"
      pods: "10"

设置限制范围(limit

您可以通过指定`LimitRange`为在绑定名称空间中运行的容器定义默认资源请求/限制和最小/最大约束。K3k将在每个绑定名称空间中创建一个`LimitRange`对象。

*示例:*定义默认处理器请求/限制以及最小/最大处理器。

apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
  name: limit-policy
spec:
  limit:
    limits:
    - default:
        cpu: "500m"
      defaultRequest:
        cpu: "500m"
      max:
        cpu: "1"
      min:
        cpu: "100m"
      type: Container

管理网络隔离(disableNetworkPolicy

默认情况下,K3k在绑定名称空间中创建一个`NetworkPolicy`以提供虚拟集群的网络隔离(特别是在共享模式下)。您可以禁用此默认网络策略的创建。

*示例:*禁用默认的网络策略。

apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
  name: no-default-netpol-policy
spec:
  disableNetworkPolicy: true

强制 Pod 安全准入 (podSecurityAdmissionLevel)

您可以通过指定 Pod 安全准入 (PSA) 级别来强制执行 Pod 安全标准 (PSS)。K3k 将相应的 PSA 标签应用于每个绑定的名称空间。允许的值为 privilegedbaselinerestricted,这会将像 pod-security.kubernetes.io/enforce: <level> 这样的标签添加到绑定的名称空间。

*示例:*强制执行 "基线" PSS 级别。

apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
  name: baseline-psa-policy
spec:
  podSecurityAdmissionLevel: baseline

附加信息