Kubernetes Kind中将容器列入白名单的系统

时间:2020-03-16 10:15:13

标签: kubernetes containers sysctl kind

我正在尝试在Kubernetes Kind集群中部署一个容器。我要部署的容器需要设置几个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

然后,我试图在同一名称空间中创建部署和服务:

---
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
---

问题仍然存在,但是,我生成了多个Pod,但都失败,并显示相同的消息forbidden sysctl: "kernel.msgmnb" not whitelisted

2 个答案:

答案 0 :(得分:1)

在您的用例中需要做的是Setting Sysctls for a Pod

使用pod securityContext配置命名空间的sysctls。的 securityContext适用于同一容器中的所有容器。

在上面的文档中,您将找到必要的详细信息以及如何配置Pod的securityContext的示例。

还请记住:

警告:如果您通过allowedUnsafeSysctls将不安全的系统列入白名单 在PodSecurityPolicy中的字段中,使用此类sysctl的任何Pod均无法 如果sysctl未通过列入白名单,则开始 该节点上的--allowed-unsafe-sysctls kubelet标志也是如此。

请告诉我是否有帮助。

答案 1 :(得分:1)

我认为--alowed-unsafe-sysctls标志不适用于Kind节点,因为Kind节点本身是容器,其sysctl FS是只读的。

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