初始化容器“ sysctl:错误设置键“ net.ipv4.ip_local_port_range”:只读文件系统”

问题描述

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

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

解决方法

问题是由于安全原因,如果没有特权模式,您将无法运行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"
  • 使用PodSecurityPolicy通过在sysctls和/或{{中指定sysctlssysctl模式列表来控制可以在pod中设置哪个forbiddenSysctls allowedUnsafeSysctls的1}}字段。例如:

PodSecurityPolicy

注意:

如果您通过“ apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: sysctl-psp spec: allowedUnsafeSysctls: - kernel.msg* forbiddenSysctls: - kernel.shm_rmid_forced ”字段中的不安全sysctls allowedUnsafeSysctls,如果出现以下情况,则使用此类PodSecurityPolicy的任何广告连播都将无法启动 sysctl不允许通过sysctl kubelet 在该节点上也进行标记。

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

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