跳到主要内容

默认 Pod 安全标准

本文档描述了 RKE2 如何配置 PodSecurityStandardsNetworkPolicies 来确保默认安全,同时还为操作人员提供了最大的配置灵活性。

版本

本文档适用于 RKE2 v1.25 及更新版本,请参阅 Pod 安全策略文档了解 RKE2 v1.24 及更低版本的默认策略。

Pod 安全标准

从 Kubernetes v1.25.0 版本开始,Pod Security Policies (PSP) 从 Kubernetes 中完全移除,取而代之的是 Pod Security Admission (PSA)。默认的 Pod Security Admission 配置文件将在启动时添加到集群中,如下所示:

  • 如果使用 --profile=cis-1.23 选项运行,RKE2 将通过配置文件应用受限的 Pod 安全标准,该配置文件将在整个集群中强制执行 restricted 模式,其中 kube-systemcis-operator-systemtigera-operator 命名空间除外,它们用于确保系统 Pod 能成功运行。

  • 如果在没有 --profile=cis-1.23 选项的情况下运行,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, cis-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-systemkube-publicdefault 命名空间并应用关联的注释。与 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