《云原生安全:K8s Pod 安全策略与网络策略》
·
Pod 安全策略(Pod Security Policies, PSP)
Pod 安全策略是 Kubernetes 中用于控制 Pod 创建和运行的安全机制,通过定义一组条件限制 Pod 的行为。尽管 Kubernetes 1.21 后 PSP 已被弃用,但替代方案(如 OPA Gatekeeper 或 Kyverno)仍遵循类似理念。
启用 Pod 安全策略 需在 API Server 启动参数中添加:
--enable-admission-plugins=PodSecurityPolicy
示例策略 限制容器以非 root 用户运行并禁止特权模式:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
runAsUser:
rule: MustRunAsNonRoot
seLinux:
rule: RunAsAny
volumes:
- 'configMap'
- 'emptyDir'
网络策略(Network Policies)
网络策略通过定义规则控制 Pod 之间的网络通信,需配合支持 NetworkPolicy 的 CNI 插件(如 Calico、Cilium)。
默认拒绝所有入站流量
创建拒绝所有入站流量的默认策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
允许特定命名空间的 Pod 访问
仅允许 monitoring 命名空间的 Pod 访问当前命名空间的 Pod:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-monitoring
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
name: monitoring
替代 PSP 的方案
OPA Gatekeeper
使用约束模板定义策略,示例限制镜像仓库来源:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8sallowedrepos
spec:
crd:
spec:
names:
kind: K8sAllowedRepos
validation:
openAPIV3Schema:
properties:
repos:
type: array
items:
type: string
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8sallowedrepos
violation[{"msg": msg}] {
container := input.review.object.spec.containers[_]
satisfied := [good | repo = input.parameters.repos[_] ; good = startswith(container.image, repo)]
not any(satisfied)
msg := sprintf("container <%v> has an invalid image repo <%v>, allowed repos are %v", [container.name, container.image, input.parameters.repos])
}
Kyverno
通过声明式策略实现类似功能,示例要求资源添加 owner 标签:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-labels
spec:
validationFailureAction: enforce
rules:
- name: check-for-owner-label
match:
resources:
kinds:
- Pod
validate:
message: "All pods must have an `owner` label."
pattern:
metadata:
labels:
owner: "?*"
关键实践建议
最小权限原则
所有策略应遵循最小权限原则,仅开放必要的访问权限。例如网络策略中精确指定源 Pod 和目标端口。
策略分层管理
结合集群级、命名空间级和资源级策略实现分层防护。使用 Kyverno 或 Gatekeeper 的 ClusterPolicy 定义全局规则,通过 NetworkPolicy 细化网络控制。
审计与监控
定期审查策略的实际效果,使用 kubectl audit 或 Falco 检测策略规避行为。网络策略可结合 Hubble(Cilium 的可观测性工具)可视化流量。
更多推荐
所有评论(0)