You need to enable JavaScript to run this app.
导航

配置安全上下文

最近更新时间2024.03.11 15:42:22

首次发布时间2022.09.08 21:47:10

本文介绍为弹性容器实例(VCI)中的 Pod 或 Container 配置安全上下文(Security Context)方法,定义 Pod 或者 Container 的权限和访问控制。

背景信息

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

Kubernetes 提供了 Pod 和 Container 级别的安全上下文配置方法:

  • Pod Security Context:Pod 级别,应用于 Pod 内所有容器和 Volume。Kubernetes 支持配置的参数,请参见 Pod Security Context API
  • Container Security Context:Container 级别,应用于指定的容器。Kubernetes 支持配置的参数,请参见 Security Context API

配置 Pod Security Context

弹性容器实例支持通过 Pod Security Context 来修改 sysctls、runAsUser、runAsGroup。

参数说明

可配置参数类型说明Kubernetes API

sysctls

List<Sysctl>

弹性容器实例的内核参数配置列表,包括:

  • kernel.shm*(kernel.shm_next_id、kernel.shm_rmid_forced 除外)
  • kernel.msg*(kernel.msg_next_id 除外)
  • kernel.sem
  • fs.mqueue.*
  • net.*(net.ipv4.ip_local_port_range 和 net.ipv4.tcp_syncookies 除外)
  • vm.min_free_kbytes

Sysctl v1 core

runAsUserinteger运行容器的用户 ID,若设置,将覆盖 Dockerfile 中的 USER 指令。-

runAsGroup

integer

运行容器的用户组 ID,若设置,表示指定 Pod 中所有容器的进程都以用户组 ID 运行。

注意

若设置 runAsGroup,则必须同时设置 runAsUser。

-

配置示例

  • sysctls 参数配置示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: security-context-pod-sysctls-demo
    spec:
      securityContext: #Pod    级别安全上下文配置
        sysctls: #sysctls    参数配置
          - name: kernel.shmmax
            value: "18446744073692774399"
          - name: kernel.msgmax
            value: "8192"
          - name: kernel.sem
            value: "32000 1024000000 500 32000"
        containers:
        - name: busybox
          image: busybox
          command: ["sh", "-c", "sleep 10000"]
    
  • runAsUser 参数配置示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: security-context-pod-runAsUser-demo
    spec:
      securityContext: #Pod 级别安全上下文配置
        runAsUser: 1000 # runAsUser 参数配置
      containers:
      - name: busybox
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
    
  • runAsGroup 参数配置示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: security-context-pod-runAsUser-demo
    spec:
      securityContext: # Pod 级别安全上下文配置
        runAsUser: 1000 # runAsUser 参数配置
        runAsGroup: 1000 # runAsGroup 参数配置
      containers:
      - name: busybox
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
    

配置 Container Security Context

弹性容器实例支持通过 Container Security Context 来修改 runAsUser、runAsGroup、capabilities。

说明

在 Pod Security Context 和 Container Security Context 中均可以设置的参数(例如 runAsUser),若都配置,那么 Container 的设置会覆盖 Pod 的设置。

参数说明

可配置参数类型说明Kubernetes API
runAsUserinteger运行容器的用户 ID,若设置,将覆盖 Dockerfile 中的 USER 指令。-
runAsGroupinteger运行容器的用户组 ID,若设置,表示指定容器中的所有进程都以用户组 ID 运行。-

capabilities

List<String>

为容器内运行的进程,授予(add)某些特定权限。
当前支持配置以下权限:

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

说明

SYS_RAWIOSYS_TIME 为邀测能力,如需使用,请 提交工单 申请。

Capabilities v1 core

部分不支持配置的参数及说明如下:

不支持配置的参数说明是否为原生 Kubernetes API

privileged

是否以特权模式运行容器。特权模式容器中的进程拥有等同于主机上的 root 权限。默认为 false

readOnlyRootFilesystem容器运行的根目录系统是否为只读权限。默认值为 false,即允许读写根目录。
procMount指定容器可以挂载的 proc 类型。默认值为 DefaultProcMount

配置示例

  • runAsUser 参数配置示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: security-context-container-runAsUser-demo
    spec:
      containers:
      - name: busybox01
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
      - name: busybox02
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
        securityContext: #Container 级别的安全上下文配置
          runAsUser: 2000 #Container 级别的 runAsUser 参数配置
    
  • runAsGroup 参数配置示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: security-context-container-runAsUser-demo
    spec:
      containers:
      - name: busybox01
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
      - name: busybox02
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
        securityContext: #Container 级别的安全上下文配置
          runAsGroup: 2000 #Container 级别的 runAsGroup 参数配置
    
  • capabilities 参数配置示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: security-context-container-runAsUser-demo
    spec:
      containers:
      - name: busybox01
        image: busybox
        command: ["sh", "-c", "sleep 10000"]
        securityContext: # Container 级别的安全上下文配置
          capabilities: # capabilities 参数配置
            add: ["NET_ADMIN", "CHOWN", "SYS_CHROOT"]