前言

在生产环境中运行 Kubernetes 时,Pod 的安全配置是保障集群稳定性和隔离性的关键环节。Kubernetes 提供了 Security Context(安全上下文) 用于配置 Pod 和容器的特权、访问控制、资源限制等安全相关参数。本文从实战出发,介绍常见的安全上下文配置及其适用场景。

一、什么是 Security Context

Security Context 是 Pod 或容器级别的安全配置字段,支持以下功能:

  • 运行用户/组配置
  • 特权模式与 capabilities 管理
  • 只读根文件系统
  • Seccomp 和 AppArmor 配置
  • 允许的挂载类型

二、实战配置示例

2.1 基础安全上下文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: Pod
metadata:
name: secure-app
spec:
securityContext:
runAsNonRoot: true # 禁止以 root 运行
runAsUser: 1000 # 指定运行用户
runAsGroup: 1000 # 指定主组
fsGroup: 1000 # 容器内进程可访问的组
containers:
- name: app
image: nginx:1.25
securityContext:
allowPrivilegeEscalation: false # 禁止特权升级
readOnlyRootFilesystem: true # 根文件系统只读
capabilities:
drop: ["ALL"] # 移除所有 capabilities

2.2 限制容器权限——禁止特权运行

生产环境中最基本的安全要求是禁止容器以特权运行:

1
2
3
4
5
6
securityContext:
privileged: false
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]

说明

  • privileged: true 会让容器拥有宿主机的所有权限,极度危险
  • allowPrivilegeEscalation 防止容器内进程获取更多权限
  • capabilities.drop: ALL 是最小权限原则的推荐实践

2.3 Seccomp 配置

Seccomp(Secure Computing Mode)限制容器可调用的系统调用:

1
2
3
4
spec:
securityContext:
seccompProfile:
type: RuntimeDefault # 使用容器运行时的默认 seccomp 配置

对于更严格的场景,可以使用自定义 Seccomp 配置文件:

1
2
3
seccompProfile:
type: Localhost
localhostProfile: profiles/restrictive.json

2.4 AppArmor 配置

AppArmor 是 Linux 强制访问控制(MAC)的一种实现:

1
2
3
4
5
6
7
metadata:
annotations:
container.apparmor.security.beta.kubernetes.io/app: "localhost/restrictive"
spec:
containers:
- name: app
image: nginx:1.25

三、NetworkPolicy 配合网络安全

除了安全上下文,还应通过 NetworkPolicy 控制 Pod 的网络访问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: app-network-policy
spec:
podSelector:
matchLabels:
app: secure-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 80

四、自动化检查工具

推荐使用 Kube-bench 定期检查集群安全配置:

1
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml

同时可使用 KyvernoOPA Gatekeeper 在集群层面强制安全策略:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-drop-all-capabilities
spec:
validationFailureAction: Enforce
rules:
- name: drop-all-capabilities
match:
resources:
kinds: [Pod]
validate:
message: "Containers must drop ALL capabilities"
pattern:
spec:
containers:
- securityContext:
capabilities:
drop: ["ALL"]

五、运维检查清单

检查项 推荐值 说明
runAsNonRoot true 防止以 root 运行
privileged false 禁止特权容器
allowPrivilegeEscalation false 禁止权限升级
readOnlyRootFilesystem true 只读根文件系统
capabilities.drop ALL 移除所有额外权限
seccompProfile.type RuntimeDefault 使用默认系统调用限制

结语

安全上下文是 Kubernetes 纵深防御体系的重要一环。生产环境中应遵循最小权限原则,在 Pod 和容器级别精细化配置安全参数,并配合 NetworkPolicy、RBAC、审计日志等手段构建完整的安全防护体系。建议通过 OPA Gatekeeper 或 Kyverno 将安全策略固化到集群层面,实现自动化的合规检查。


本文档由技术助手自动生成,如有问题请联系运维团队。