配置Security Context

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

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。

修改sysctl参数和runAsUser。

Container Security Context

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

修改runAsUser和capabilities等。

配置Pod Security Context

配置说明

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

sysctl -a

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

警告

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

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

  • kernel.shm*

  • kernel.msg*

  • kernel.sem

  • fs.mqueue.*

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

  • vm.min_free_kbytes

    修改vm.min_free_kbytes的值时,建议不要超过总内存的20%。

重要

除上述sysctl参数外,如果想要修改其他host级别的sysctl参数,请提交工单申请。申请成功后,可通过为Pod添加k8s.aliyun.com/eci-host-sysctls: '[{"name":"xxx", "value": "vvv"}]'的Annotation的方式来修改sysctl参数。

配置示例

以修改net.core.somaxconn和kernel.msgmax为例,YAML示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
  labels: 
    alibabacloud.com/eci: "true"
spec:
  securityContext:
    sysctls:
    - name: net.core.somaxconn
      value: "1024"
    - name: kernel.msgmax
      value: "65536"
  containers:
  - name: busybox
    image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
    command: [ "sh", "-c", "sleep 12000" ]

配置Container Security Context

配置说明

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

重要

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

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

支持配置的参数

说明

runAsUser

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

runAsGroup

设置运行容器的用户组。

runAsNonRoot

设置容器是否以非root模式运行容器。取值为true表示以非root模式运行容器。默认为false。

privileged

设置容器是否以特权模式运行。取值为true表示以特权模式运行容器。默认为false。

说明

特权容器功能正在内测中。如需体验,请提交工单申请。

capabilities

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

目前支持配置以下权限:

  • AUDIT_WRITE

  • CHOWN

  • DAC_OVERRIDE

  • FSETID

  • FOWNER

  • KILL

  • MKNOD

  • NET_ADMIN

  • NET_BIND_SERVICE

  • NET_RAW

  • SETGID

  • SETUID

  • SETFCAP

  • SETPCAP

  • SYS_CHROOT

  • SYS_PTRACE

  • SYS_RAWIO

说明

SYS_RAWIO默认不支持,需提交工单申请。

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

不支持配置的参数

说明

AllowedProcMountTypes

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

readOnlyRootFilesystem

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

配置示例

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

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

apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
  labels: 
    alibabacloud.com/eci: "true"
spec:
  containers:
  - name: busybox
    image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
    command: ["sh", "-c", "sleep 12000"]
    securityContext:
      capabilities:
        add: ["NET_ADMIN"]   

重新创建ECI Pod,在容器内可以进行网络相关操作。

SecurityContext2