【问题标题】: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"
- 通过在
PodSecurityPolicy 的forbiddenSysctls 和/或allowedUnsafeSysctls 字段中指定sysctls 或sysctl 模式列表,使用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
标记以及该节点上。
我还建议您仔细阅读整个链接文档,因为使用不安全的sysctls 是您自担风险,并可能导致严重的问题,例如容器的错误行为、资源短缺或完全损坏节点。