我有一个helm chart,它部署了一个应用程序,但也需要重新配置一些sysctl参数才能正常运行。当我安装舵图并在部署的pod上运行kubectl describe pod/pod_name
时,我得到forbidden sysctl: "kernel.sem" not whitelisted
。我已经添加了一个这样的podsecuritypolicy,但是没有这样的运气。
apiVersion:policy/v1beta1
kind:PodSecurityPolicy
metadata:
name: policy
spec:
allowedUnsafeSysctls:
- kernel.sem
- kernel.shmmax
- kernel.shmall
- fs.mqueue.msg_max
seLinux:
rule: 'RunAsAny'
runAsUser:
rule: 'RunAsAny'
supplementalGroups:
rule: 'RunAsAny'
fsGroup:
rule:'RunAsAny'
——更新我还尝试通过配置文件设置kubelet参数,以允许不安全的呼叫,但我得到一个错误没有类型"KubeletConfiguration"已注册版本"kubelet.config.k8 .io/v1beta1"。下面是配置文件:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
allowedUnsafeSysctls:
- "kernel.sem"
- "kernel.shmmax"
- "kernel.shmall"
- "fs.mqueue.msg_max"
kernel.sem
系统sctl被认为是不安全的系统sctl,因此默认禁用(默认只启用安全的系统sctl)。您可以在逐节点基础上允许一个或多个不安全的系统tls,为此您需要将--allowed-unsafe-sysctls
标志添加到kubelet
。
查看"启用不安全的系统tls">
我创建了一个简单的例子来说明它是如何工作的。
首先我添加了--allowed-unsafe-sysctls
标志到kubelet
.
在我的情况下,我使用kubeadm
,所以我需要添加这个标志到/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
文件:
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --allowed-unsafe-sysctls=kernel.sem"
...
注意:你必须在每个上添加这个标志在启用kernel.sem
的情况下运行Pod的节点
然后我重新加载systemd管理器配置并使用以下命令重新启动kubelet
:
# systemctl daemon-reload && systemctl restart kubelet
接下来,我使用这个清单文件创建了一个简单的Pod
:
apiVersion: v1
kind: Pod
metadata:
labels:
run: web
name: web
spec:
securityContext:
sysctls:
- name: kernel.sem
value: "250 32000 100 128"
containers:
- image: nginx
name: web
最后我们可以检查它是否正常工作:
# sysctl -a | grep "kernel.sem"
kernel.sem = 32000 1024000000 500 32000 // on the worker node
# kubectl get pod
NAME READY STATUS RESTARTS AGE
web 1/1 Running 0 110s
# kubectl exec -it web -- bash
root@web:/# cat /proc/sys/kernel/sem
250 32000 100 128 // inside the Pod
你的PodSecurityPolicy
不像预期的那样工作,因为你可以在文档中看到:
警告:如果您通过PodSecurityPolicy中的allowedUnsafeSysctls字段允许不安全的sysctl,如果在该节点上通过——allowed-unsafe-sysctls kubelet标志不允许sysctl,则使用此类sysctl的任何pod将无法启动。