问题描述
当我设置为priviliged时,我试图从init容器中删除特权模式:false。我遇到了错误。我在pod securityContext级别设置了readOnlyRootFilesystem:false和下面的行
securityContext:
sysctls:
- name: net.ipv4.ip_local_port_range
value: 0 65535
解决方法
问题是由于安全原因,如果没有特权模式,您将无法运行sysctl
。这是预料之中的,因为Docker限制了对/proc
和/sys
的访问。
要使其正常工作,您需要对init容器使用特权模式,而不能使用以下任何一种方式:
- Use sysctls in a Kubernetes Cluster,方法是为Pod指定适当的
securityContext
。例如:
securityContext:
sysctls:
- name: kernel.shm_rmid_forced
value: "0"
- name: net.core.somaxconn
value: "1024"
- name: kernel.msgmax
value: "65536"
- 使用PodSecurityPolicy通过在
sysctls
和/或{{中指定sysctls
或sysctl
模式列表来控制可以在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
风险由您自己承担,并且可能导致严重问题,例如容器行为错误,资源短缺或完全损坏节点。