【问题标题】:init container "sysctl: error setting key 'net.ipv4.ip_local_port_range': Read-only file system"初始化容器“sysctl:错误设置键'net.ipv4.ip_local_port_range':只读文件系统”
【发布时间】:2021-01-29 09:28:40
【问题描述】:

当我设置为 priviliged: false 时,我试图从 init 容器中删除特权模式。我正在克服错误。我在 pod securityContext 级别设置了 readOnlyRootFilesystem: false 和下面的行

  securityContext:
    sysctls:
    - name: net.ipv4.ip_local_port_range
      value: 0 65535

【问题讨论】:

    标签: kubernetes containers sysctl podsecuritypolicy


    【解决方案1】:

    问题是由于安全原因,您无法在没有特权模式的情况下运行sysctl。这是意料之中的,因为 docker 限制了对 /proc/sys 的访问。

    为了使它工作,您需要对 init 容器使用特权模式,而不是:


      securityContext:
        sysctls:
        - name: kernel.shm_rmid_forced
          value: "0"
        - name: net.core.somaxconn
          value: "1024"
        - name: kernel.msgmax
          value: "65536"
    
    • 通过在PodSecurityPolicyforbiddenSysctls 和/或allowedUnsafeSysctls 字段中指定sysctlssysctl 模式列表,使用PodSecurityPolicy 来控制可以在pod 中设置哪些sysctls。例如:

    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: sysctl-psp
    spec:
      allowedUnsafeSysctls:
      - kernel.msg*
      forbiddenSysctls:
      - kernel.shm_rmid_forced
    

    注意:

    如果您允许通过 allowedUnsafeSysctls 字段中的不安全 sysctls PodSecurityPolicy,任何使用这种sysctl 的 pod 都将无法启动,如果 sysctl 不允许通过 --allowed-unsafe-sysctls kubelet 标记以及该节点上。

    • 您还可以使用 docker run --sysctl 在容器本地基础上设置有限数量的 sysctls

    我还建议您仔细阅读整个链接文档,因为使用不安全的sysctls 是您自担风险,并可能导致严重的问题,例如容器的错误行为、资源短缺或完全损坏节点。

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多