有没有一种方法可以使用容器范围指定k8s PodSecuirtyPolicy?

时间:2020-10-23 11:47:37

标签: kubernetes containers cloud

说明

我有一个带有initContainer的kubernetes pod,它需要以特权(privileged: true)身份运行。第二个容器(不是init)不需要这种特权。

我想启用PodSecurityPolicy入场插件,我正在寻找对舱内不同容器具有不同特权/功能的可能性。

我非常确定它不会遵循任何最佳实践,但是我只是想知道这是否有可能。也许我误会了一些概念?

问题

您知道是否可以为Pod中的特定容器定义PodSecurityPolicy吗?

1 个答案:

答案 0 :(得分:1)

首先要注意所有有关kubernetes pod安全策略最佳实践的理论:

  • 请勿运行特权容器。
  • 请勿以root用户身份运行容器。
  • 不允许访问主机名称空间。
  • 限制Linux功能。

在Kubernetes窗格中,容器可以选择以“特权”模式运行,这意味着容器内的进程几乎可以不受限制地访问主机系统上的资源。尽管在某些用例中需要这种级别的访问,但是通常来说,让您的容器执行此操作会带来安全风险。 请看一下:pod-sppod-psp-privileged

有一些建议将SecurityContext重构为具有容器级别和容器级别的属性,以便正确地对容器级别和容器级别的安全性进行建模。

例如,您可能想要一个包含两个容器的容器,其中一个以特权设置作为根运行,另一个作为非根UID运行。 这是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  containers:
  - name: container-1
    securityContext:
      privileged: true
  - name: container-2
    securityContext:
      runAsUser: 1002

查看更多:security-context-example

要为容器指定安全设置,请在容器清单中包含securityContext字段。 securityContext字段是SecurityContext对象。您为容器指定的安全性设置仅适用于单个容器,并且当它们重叠时,它们会覆盖在Pod级别进行的设置。容器设置不会影响Pod的音量。

但是目前无法为不同的容器创建一个PodSecurityContext.securityContext。

用户不应给Pod /容器root特权,而应该将特定的功能添加到指定的容器linux中,以改善容器的隔离性。看看:set-capabilities-for-a-container

借助Linux功能,您可以授予进程某些特权,而无需授予root用户的所有特权。要为容器添加或删除Linux功能,请在容器清单的securityContext部分中包含功能字段。

与特权进程绕过所有内核权限检查相比,非特权进程必须基于进程的凭据(例如有效的UID,GID和补充组列表)通过完整的权限检查。从内核2.2开始,Linux将特权进程的特权划分为不同的单元,称为功能。这些不同的单元/特权可以独立分配,并为引入根特权的非特权进程启用。 Kubernetes用户可以使用Linux功能向进程授予某些特权,而无需授予root用户所有特权。这对改善容器与主机的隔离很有帮助,因为容器不再需要以root用户身份进行写-您只需授予它们某些root特权即可。

要为容器添加或删除Linux功能,可以在容器清单的securityContext部分中包含功能字段。我们来看一个例子:

    apiVersion: v1  
    kind: Pod  
    metadata:  
      name: linux-capabilities-example 
    spec:  
      securityContext:  
        runAsUser: 3000  
      containers:  
      - name: linux-capabilities  
        image: supergiantkir/k8s-liveliness  
        securityContext:  
          capabilities:  
            add: ["NET_ADMIN"]

在此示例中,CAP_NET_ADMIN被分配了容器功能。此Linux功能允许进程执行各种与网络相关的操作,例如接口配置,IP防火墙管理,修改路由表,启用多播等。有关可用功能的完整列表,请参见官方Linux documentation。 / p>

了解更多:linux-capabilities