|
这是尚未发布的文档。 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 标签应用于每个绑定的名称空间。允许的值为 privileged、baseline、restricted,这会将像 pod-security.kubernetes.io/enforce: <level> 这样的标签添加到绑定的名称空间。
*示例:*强制执行 "基线" PSS 级别。
apiVersion: k3k.io/v1beta1
kind: VirtualClusterPolicy
metadata:
name: baseline-psa-policy
spec:
podSecurityAdmissionLevel: baseline
附加信息
-
有关所有
VirtualClusterPolicy规范字段的完整参考,请参见 虚拟集群策略 API 参考。 -
要了解 VCP 如何融入整体 K3k 系统,请参见 架构。