将Kubernetes类容器的sysctl列为白名单

将Kubernetes类容器的sysctl列为白名单,kubernetes,containers,sysctl,kind,Kubernetes,Containers,Sysctl,Kind,我试图在Kubernetes类集群中部署一个容器。我试图部署的容器需要设置几个sysctls标志 部署失败,原因是 forbidden sysctl: "kernel.msgmnb" not whitelisted 更新 此后,我按照建议添加了一个群集策略,创建了一个向其授予使用权的角色,并将群集角色分配给默认服务帐户: --- apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: sysctl-psp spe

我试图在Kubernetes类集群中部署一个容器。我试图部署的容器需要设置几个sysctls标志

部署失败,原因是

forbidden sysctl: "kernel.msgmnb" not whitelisted
更新

此后,我按照建议添加了一个群集策略,创建了一个向其授予使用权的角色,并将群集角色分配给默认服务帐户:

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: sysctl-psp
spec:
  privileged: false  # Don't allow privileged pods!
  # The rest fills in some required fields.
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  volumes:
  - '*'
  allowedUnsafeSysctls:
  - kernel.msg*
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: role_allow_sysctl
rules:
- apiGroups: ['policy']
  resources: ['podsecuritypolicies']
  verbs:     ['*']
  resourceNames:
  - sysctl-psp
- apiGroups: ['']
  resources:
  - replicasets
  - services
  - pods
  verbs: ['*']
- apiGroups: ['apps']
  resources:
  - deployments
  verbs: ['*']
集群角色绑定如下所示:

kubectl -n <namespace> create rolebinding default:role_allow_sysctl --clusterrole=role_allow_sysctl --serviceaccount=<namespace>:default
kubectl-n创建角色绑定默认值:role\u allow\u sysctl--clusterrole=role\u allow\u sysctl--serviceCount=:默认值
然后,我尝试在同一命名空间中创建部署和服务:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  selector:
    matchLabels:
      app: test-app
      tier: dev
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: test-app
        tier: dev
    spec:
      securityContext:
        sysctls:
        - name: kernel.msgmnb
          value: "6553600"
        - name: kernel.msgmax
          value: "1048800"
        - name: kernel.msgmni
          value: "32768"
        - name: kernel.sem
          value: "128 32768 128 4096"
      containers:
      - image: registry:5000/<container>:1.0.0
        name: test-app
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 10666
          name:port-1
---
---
apiVersion:apps/v1
种类:部署
元数据:
名称:测试应用程序
标签:
应用程序:测试应用程序
规格:
选择器:
火柴标签:
应用程序:测试应用程序
级别:dev
战略:
类型:重新创建
模板:
元数据:
标签:
应用程序:测试应用程序
级别:dev
规格:
securityContext:
sysctls:
-名称:kernel.msgmnb
值:“6553600”
-名称:kernel.msgmax
值:“1048800”
-名称:kernel.msgmni
值:“32768”
-名称:kernel.sem
值:“128 32768 128 4096”
容器:
-图像:注册表:5000/:1.0.0
名称:测试应用程序
imagePullPolicy:如果不存在
端口:
-集装箱港口:10666
名称:port-1
---

问题仍然是一样的,但是,我得到了多个pod,所有这些pod都失败了,因为同一条消息
禁止的sysctl:“kernel.msgmnb”没有被列入白名单

我不认为
--ALOWD不安全的sysctl
标志可以用于种类节点,因为种类节点本身就是容器,其sysctl FS是只读的

我的解决方法是在主机上更改所需的sysctl值。种类节点(以及它们的容器)将重用这些值