本文介绍为弹性容器实例(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 来修改 sysctls、runAsUser、runAsGroup。
可配置参数 | 类型 | 说明 | Kubernetes API |
---|---|---|---|
sysctls | List<Sysctl> | 弹性容器实例的内核参数配置列表,包括:
| |
runAsUser | integer | 运行容器的用户 ID,若设置,将覆盖 Dockerfile 中的 USER 指令。 | - |
runAsGroup | integer | 运行容器的用户组 ID,若设置,表示指定 Pod 中所有容器的进程都以用户组 ID 运行。 注意 若设置 runAsGroup,则必须同时设置 runAsUser。 | - |
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"]
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"]
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 来修改 runAsUser、runAsGroup、capabilities。
说明
在 Pod Security Context 和 Container Security Context 中均可以设置的参数(例如 runAsUser),若都配置,那么 Container 的设置会覆盖 Pod 的设置。
可配置参数 | 类型 | 说明 | Kubernetes API |
---|---|---|---|
runAsUser | integer | 运行容器的用户 ID,若设置,将覆盖 Dockerfile 中的 USER 指令。 | - |
runAsGroup | integer | 运行容器的用户组 ID,若设置,表示指定容器中的所有进程都以用户组 ID 运行。 | - |
capabilities | List<String> | 为容器内运行的进程,授予(add)某些特定权限。
说明 SYS_RAWIO、SYS_TIME 为邀测能力,如需使用,请 提交工单 申请。 |
部分不支持配置的参数及说明如下:
不支持配置的参数 | 说明 | 是否为原生 Kubernetes API |
---|---|---|
privileged | 是否以特权模式运行容器。特权模式容器中的进程拥有等同于主机上的 root 权限。默认为 false。 | 是 |
readOnlyRootFilesystem | 容器运行的根目录系统是否为只读权限。默认值为 false,即允许读写根目录。 | 是 |
procMount | 指定容器可以挂载的 proc 类型。默认值为 DefaultProcMount。 | 是 |
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 参数配置
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 参数配置
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"]