为什么我无法将 POD 级别的 securityContext 设置配置为应用于所有底层容器?

siw*_*aki 4 security-context kubernetes podsecuritypolicy

在我的 POD 中,我想使用 securityContext 将所有容器限制为只读文件系统 :readOnlyRootFilesystem: true
示例(注意:为简洁起见,减少了 yaml)

apiVersion: v1
kind: Pod
metadata:      
  labels:
    run: server123
  name: server123
spec:
  securityContext:
    readOnlyRootFilesystem: true
  containers:
  - image: server1-image
    name: server1 
  - image: server2-image
    name: server2
  - image: server3-image
    name: server3
Run Code Online (Sandbox Code Playgroud)

这将导致:

错误:验证“server123.yaml”时出错:验证数据时出错:ValidationError(Pod.spec.securityContext):io.k8s.api.core.v1.PodSecurityContext 中的未知字段“readOnlyRootFilesystem”;如果您选择忽略这些错误,请使用 --validate=false 关闭验证

相反,我必须配置为:

apiVersion: v1
    kind: Pod
    metadata:      
      labels:
        run: server123
      name: server123
    spec:
      containers:
      - image: server1-image
        name: server1
        securityContext:
          readOnlyRootFilesystem: true 
      - image: server2-image
        name: server2
        securityContext:
          readOnlyRootFilesystem: true
      - image: server3-image
        name: server3
        securityContext:
          readOnlyRootFilesystem: true
Run Code Online (Sandbox Code Playgroud)

有没有办法为所有容器设置一次此安全限制?如果不是为什么不呢?

siw*_*aki 11

在 Kubernetes 中,可以在 pod 和/或容器级别配置securityContext,容器将继承 pod 级别的设置,但可以覆盖自己的设置。

然而,Pod 和容器的配置选项不会重叠 - 您只能在每个级别设置特定的选项,
容器级别:https://kubernetes.io/docs/reference/ generated/kubernetes-api/v1.23/# securitycontext-v1-core
Pod 级别:https://kubernetes.io/docs/reference/ generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core

它没有清楚地记录什么可以继承,什么不能继承(以及为什么!)。您必须通读两个列表并进行比较。我假设 POD 的 securityContext 允许将readOnlyRootFilesystem: true和各种功能设置一次,而不必在每个底层容器的 securityContext 中复制,但PodSecurityContext不允许这样做!

在(重新)配置各种工作负载以遵守 PodSecurityPolicies 时特别有用。

我想知道为什么 Pod 的securityContext配置被标记为这样,而不是它实际代表的podSecurityContext 。