配置Security Context

本文介绍如何为Pod或者Container配置Security Context,定义Pod或者Container的权限和访问控制。

背景信息

Security Context,即安全上下文,用于定义Pod或者Container的权限和访问控制,包括Discretionary Access Control、SELinux、Linux Capabilities等。更多信息,请参见Security Context

Kubernetes提供了两种配置安全上下文的方法:

  • Pod Security Context

    Pod级别,应用于Pod内所有容器和Volume。

    ECI支持通过配置Pod Security Context来修改sysctl参数和runAsUse。

  • Container Security Context

    容器级别,应用于指定的容器。

    ECI支持通过配置Container Security Context来修改runAsUse和capabilities。

说明

Kubernetes使用Pod安全策略(Pod Security Policy)来验证和限制Pod的安全上下文。如果Pod的安全上下文配置不满足安全策略的约束,则无法创建Pod。更多信息,请参见Pod安全策略

如果您使用阿里云ACK或者ASK,则默认使用名为ack.privileged的Pod Security Policy。更多信息,请参见使用Pod安全策略

配置Pod Security Context

在Linux中,通常可以通过sysctl接口修改内核运行时的参数。对于ECI实例的内核参数,您可以通过以下命令进行查看。更多信息,请参见sysctl.sh

sysctl -a

在Pod级别,您可以通过配置Security Context来修改sysctl参数和runAsUse。

目前ECI支持修改的sysctl参数如下:

  • kernel.shm*(kernel.shm_rmid_forced除外)

  • kernel.msg*

  • kernel.sem

  • fs.mqueue.*

  • net.*(net.ipv4.ip_local_port_range和net.ipv4.tcp_syncookies除外)

警告

为了避免破坏操作系统的稳定性,请您在充分了解sysctl参数变更影响后,再进行配置。

配置示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
spec:
  securityContext:
    sysctls:
    - name: net.core.somaxconn
      value: "1024"
    - name: kernel.msgmax
      value: "65536"
  containers:
  - name: busybox
    image: busybox
    command: [ "sh", "-c", "sleep 12000" ]

配置Container Security Context

在Container级别,您可以为指定的容器设置Security Context。

说明

对于Pod Security Context和Container Security Context中均设置的参数(如runAsUse),容器的设置将覆盖Pod的设置。

目前ECI支持配置的参数如下:

支持配置的参数

说明

runAsUse

设置运行容器的用户ID。该参数配置会覆盖Dockerfile中的USER指令。

capabilities

为容器内的进程授予某些特定的权限。更多信息,请参见Linux Capabilities

目前仅支持配置NET_ADMIN和NET_RAW。其中NET_RAW默认不支持,需提交工单申请。

部分不支持配置的参数及其默认值如下:

不支持配置的参数

说明

privileged

容器是否以特权模式运行,默认为false。

AllowedProcMountTypes

指定容器可以挂载的proc类型,默认为DefaultProcMount。

readOnlyRootFilesystem

容器运行的根文件系统是否为只读,默认为true。

配置示例如下:

默认情况下,容器并不具备NET_ADMIN权限。如果在容器内进行网络相关操作,会返回报错提示。SecurityContext1

您可以为容器配置Security Context,修改capabilities参数来增加NET_ADMIN权限。以下为示例:

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "sleep 12000"]
    securityContext:
      capabilities:
        add: ["NET_ADMIN"]   

配置后,在容器内可以进行网络相关操作。SecurityContext2