配置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参数和runAsUser。
Container Security Context
容器级别,应用于指定的容器。
ECI支持通过配置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.shm_rmid_forced除外)
kernel.msg*
kernel.sem
fs.mqueue.*
net.*(net.ipv4.ip_local_port_range和net.ipv4.tcp_syncookies除外)
配置示例如下:
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中均设置的参数(如runAsUser),容器的设置将覆盖Pod的设置。
目前ECI支持配置的参数如下:
支持配置的参数 | 说明 |
runAsUser | 设置运行容器的用户ID。该参数配置会覆盖Dockerfile中的USER指令。 |
capabilities | 为容器内的进程授予某些特定的权限。更多信息,请参见Linux Capabilities。 目前支持配置以下权限:
说明 SYS_RAWIO默认不支持,需提交工单申请。 |
部分不支持配置的参数及其默认值如下:
不支持配置的参数 | 说明 |
privileged | 容器是否以特权模式运行,默认为false。 |
AllowedProcMountTypes | 指定容器可以挂载的proc类型,默认为DefaultProcMount。 |
readOnlyRootFilesystem | 容器运行的根文件系统是否为只读,默认为true。 |
配置示例如下:
默认情况下,容器并不具备NET_ADMIN权限。如果在容器内进行网络相关操作,会返回报错提示。
您可以为容器配置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"]
配置后,在容器内可以进行网络相关操作。
