默认 Pod 安全标准
本文档描述了 RKE2 如何配置 PodSecurityStandards 和 NetworkPolicies 以确保默认安全,同时为操作员提供最大的配置灵活性。
|
版本门控
本文档适用于 RKE2 v1.25 及更高版本,请参阅 Pod 安全策略文档 以获取 RKE2 v1.24 及更早版本的默认策略信息。 |
Pod 安全标准
从 Kubernetes 版本 v1.25.0 开始,Pod 安全策略 (PSP) 已从 Kubernetes 中完全移除,并由 Pod 安全准入 (PSA) 取代。默认的 Pod 安全准入配置文件将在集群启动时添加,内容如下:
如果使用 profile: cis 或 profile: cis-1.23 配置:
-
RKE2 将通过配置文件应用受限的 Pod 安全标准,该配置文件将在整个集群中强制执行
restricted模式,kube-system、cis-operator-system和tigera-operator名称空间除外,以确保系统 Pod 的成功运行。
如果没有 profile 配置:
-
RKE2 将通过配置文件应用不受限的 Pod 安全标准,该配置文件将在整个集群中强制执行
privileged模式,允许集群中所有 Pod 完全不受限制。
RKE2 将把此配置文件放在 /etc/rancher/rke2/rke2-pss.yaml,配置文件的内容根据您启动 RKE2 时选择的 cis 模式而有所不同:
-
CIS 模式
apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration plugins: - name: PodSecurity configuration: apiVersion: pod-security.admission.config.k8s.io/v1beta1 kind: PodSecurityConfiguration defaults: enforce: "restricted" enforce-version: "latest" audit: "restricted" audit-version: "latest" warn: "restricted" warn-version: "latest" exemptions: usernames: [] runtimeClasses: [] namespaces: [kube-system, compliance-operator-system, tigera-operator] -
非 CIS 模式
apiVersion: apiserver.config.k8s.io/v1 kind: AdmissionConfiguration plugins: - name: PodSecurity configuration: apiVersion: pod-security.admission.config.k8s.io/v1beta1 kind: PodSecurityConfiguration defaults: enforce: "privileged" enforce-version: "latest" exemptions: usernames: [] runtimeClasses: [] namespaces: []
放置此配置文件后,RKE2 将使用以下标志 --admission-control-config-file 启动 kube-apiserver,该标志将设置为 PSA 配置文件的路径。
如果您想覆盖默认的 Pod 安全标准配置文件,可以将 pod-security-admission-config-file: <path-to-custom-psa-config-file> 传递给 RKE2 配置文件。
网络策略
当 RKE2 使用 profile: cis-1.23 参数运行时,它将对 kube-system、kube-public 和 default 名称空间应用 2 个网络策略,并应用相关注释。这些策略和注释的逻辑与 PSP 相同。启动时,将检查每个名称空间的注释是否存在,如果存在,RKE2 不会采取任何行动。如果注释不存在,RKE2 将检查策略是否存在,如果存在,则重新创建它。
第一个应用的策略是限制网络流量仅限于名称空间本身。请参见下文。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
managedFields:
- apiVersion: networking.k8s.io/v1
fieldsType: FieldsV1
fieldsV1:
f:spec:
f:ingress: {}
f:policyTypes: {}
name: default-network-policy
namespace: default
spec:
ingress:
- from:
- podSelector: {}
podSelector: {}
policyTypes:
- Ingress
第二个应用的策略是针对 kube-system 名称空间,并允许 DNS 流量。请参见下文。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
managedFields:
- apiVersion: networking.k8s.io/v1
fieldsV1:
f:spec:
f:ingress: {}
f:podSelector:
f:matchLabels:
f:policyTypes: {}
name: default-network-dns-policy
namespace: kube-system
spec:
ingress:
- ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
podSelector:
matchLabels:
policyTypes:
- Ingress
RKE2 将 default-network-policy 策略和 np.rke2.io 注释应用于所有内置名称空间。kube-system 名称空间还额外应用 default-network-dns-policy 策略和 np.rke2.io/dns 注释。
要查看当前在系统上部署的网络策略,请运行以下命令:
kubectl get networkpolicies -A