Kubernetes中使用PSA替代PSP时,如何定义Allowed Capabilities?
PSA替代PSP允许特定Capabilities的最简方案
PSA(Pod Security Admission)的内置Pod Security Standards(PSS)是固定权限模板,Restricted级别默认禁止添加额外capabilities。要给Sidecar容器开放NET_ADMIN和NET_RAW权限,最简方式是使用PSA的豁免机制,以下是两种常用实现方式:
方式一:针对特定ServiceAccount豁免(推荐)
如果你的Sidecar容器绑定了专用ServiceAccount,可通过给命名空间添加豁免标签,允许该SA创建的Pod使用指定capabilities:
给目标命名空间添加标签(替换占位符为实际值):
kubectl label ns <你的命名空间> \ pod-security.kubernetes.io/enforce=restricted \ pod-security.kubernetes.io/enforce-version=latest \ pod-security.kubernetes.io/allowed-capabilities=NET_ADMIN,NET_RAW \ pod-security.kubernetes.io/exempt-serviceaccounts=<sidecar专用SA名称>
说明:
allowed-capabilities:指定允许的额外capabilities,多个值用逗号分隔exempt-serviceaccounts:指定豁免权限检查的ServiceAccount名称,多个值用逗号分隔- 绑定该SA的Sidecar容器,即可在Pod定义中添加
securityContext.capabilities.add: ["NET_ADMIN", "NET_RAW"]
方式二:针对单个Pod/Deployment豁免
如果仅需给特定Pod开放权限,可在Pod或Deployment的Pod模板中添加annotation:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app spec: template: metadata: annotations: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/enforce-version: latest pod-security.kubernetes.io/allowed-capabilities: NET_ADMIN,NET_RAW spec: containers: - name: your-sidecar image: your-sidecar-image securityContext: capabilities: add: ["NET_ADMIN", "NET_RAW"] # 其他容器配置...
说明:
- 该annotation仅对当前Pod生效,适合临时场景或特定应用的Sidecar需求
补充:更精细的控制
如果需要限制只有Sidecar容器(而非整个Pod)能使用这些capabilities,OPA Gatekeeper等自定义准入控制器可实现更细粒度规则,但上述豁免机制是满足需求的最简方案。
内容的提问来源于stack exchange,提问作者R...
相关产品推荐
相关产品推荐

