🤔 Pod 安全策略(PSP)是 Kubernetes 中一种用于控制 Pod 安全相关属性的机制。在阿里云 ACK(容器服务 Kubernetes)环境中,你可以使用 PSP 来限制特权容器的运行,从而提高集群的整体安全性。🛡️
为什么限制特权容器?
如何使用 PSP 限制特权容器?
privileged: false 表示禁止特权容器。 📝
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
# ... 其他安全策略 ...
privileged,还可以配置其他安全策略,例如:
runAsUser:限制容器以 root 用户运行。capabilities:限制容器可以使用的 Linux capabilities。volumes:限制容器可以挂载的卷类型。hostNetwork、hostPID、hostIPC:禁止容器使用主机网络、PID 和 IPC 命名空间。# Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: psp-restricted
rules:
- apiGroups: ['policy']
resources: ['podsecuritypolicies']
verbs: ['use']
resourceNames: ['restricted']
# RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: psp-restricted-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: psp-restricted
subjects:
- kind: ServiceAccount
name: default
namespace: default
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: default
# ...
示例:禁止特权容器并限制 root 用户
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
# 禁用 host 命名空间
hostNetwork: false
hostIPC: false
hostPID: false
# 禁止挂载 hostPath 卷
volumes:
- 'configMap'
- 'emptyDir'
- 'persistentVolumeClaim'
- 'secret'
- 'projected'
# 设置 RunAsUser 策略
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule: 'RunAsAny'
readOnlyRootFilesystem: false
# 允许使用的 Capabilities
allowedCapabilities:
- KILL
- NET_BIND_SERVICE
requiredDropCapabilities:
- ALL
注意事项:
迁移到 Pod Security Admission (PSA):
Kubernetes 官方推荐使用 Pod Security Admission (PSA) 作为 Pod 安全策略的替代方案。PSA 基于标签,可以更灵活地控制 Pod 的安全级别。 PSA 定义了三个级别:
你可以通过在 Namespace 上设置标签来应用不同的安全级别。
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/warn: baseline
总结:通过使用 Pod Security Policy 或 Pod Security Admission,你可以有效地限制特权容器的运行,增强阿里云 ACK 集群的安全性。记得定期审查和更新安全策略,以应对新的安全威胁。 🧐