配置Security Context
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細閱讀。
Security Context(安全上下文)用于控制和管理容器內(nèi)進程權(quán)限,可以限制容器內(nèi)進程的行為,確保容器內(nèi)進程只能運行在給定的權(quán)限和資源限制下。本文介紹如何為Pod或者Container配置Security Context,定義Pod或者Container的權(quán)限和訪問控制。
背景信息
Security Context,即安全上下文,用于定義Pod或者Container的權(quán)限和訪問控制,包括Discretionary Access Control、SELinux、Linux Capabilities等。更多信息,請參見Security Context。
Kubernetes提供了兩種配置安全上下文的方式:
方式 | 應(yīng)用范圍 | 支持的功能 |
Pod Security Context | Pod級別,應(yīng)用于Pod內(nèi)所有容器和Volume。 | 修改sysctl參數(shù)和runAsUser。 |
Container Security Context | 容器級別,應(yīng)用于指定的容器。 | 修改runAsUser和capabilities等。 |
配置Pod Security Context
配置說明
在Linux中,通常可以通過sysctl接口修改內(nèi)核運行時的參數(shù)。對于ECI實例的內(nèi)核參數(shù),您可以通過以下命令進行查看。更多信息,請參見sysctl.sh。
sysctl -a
在Pod級別,您可以通過配置Security Context來修改sysctl參數(shù)和runAsUser。
為了避免破壞操作系統(tǒng)的穩(wěn)定性,請您在充分了解sysctl參數(shù)變更影響后,再進行配置。更多信息,請參見sysctl。
目前ECI支持修改的sysctl參數(shù)如下:
kernel.shm*
kernel.msg*
kernel.sem
fs.mqueue.*
net.*(net.ipv4.tcp_syncookies除外)
vm.min_free_kbytes
修改vm.min_free_kbytes的值時,建議不要超過總內(nèi)存的20%。
除上述sysctl參數(shù)外,如果想要修改其他host級別的sysctl參數(shù),請?zhí)峤还紊暾垺I暾埑晒螅赏ㄟ^為Pod添加k8s.aliyun.com/eci-host-sysctls: '[{"name":"xxx", "value": "vvv"}]'
的Annotation的方式來修改sysctl參數(shù)。
配置示例
以修改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級別,您可以為指定的容器設(shè)置Security Context。
對于Pod Security Context和Container Security Context中均設(shè)置的參數(shù)(如runAsUser),容器的設(shè)置將覆蓋Pod的設(shè)置。
目前ECI支持配置的參數(shù)如下:
支持配置的參數(shù) | 說明 |
runAsUser | 設(shè)置運行容器的用戶ID。該參數(shù)配置會覆蓋Dockerfile中的USER指令。 |
runAsGroup | 設(shè)置運行容器的用戶組。 |
runAsNonRoot | 設(shè)置容器是否以非root模式運行容器。取值為true表示以非root模式運行容器。默認(rèn)為false。 |
privileged | 設(shè)置容器是否以特權(quán)模式運行。取值為true表示以特權(quán)模式運行容器。默認(rèn)為false。 說明 特權(quán)容器功能正在內(nèi)測中。如需體驗,請?zhí)峤还紊暾垺?/p> |
capabilities | 為容器內(nèi)的進程授予某些特定的權(quán)限。更多信息,請參見Linux Capabilities。 目前支持配置以下權(quán)限:
說明 SYS_RAWIO默認(rèn)不支持,需提交工單申請。 |
部分不支持配置的參數(shù)及其默認(rèn)值如下:
不支持配置的參數(shù) | 說明 |
AllowedProcMountTypes | 指定容器可以掛載的proc類型,默認(rèn)為DefaultProcMount。 |
readOnlyRootFilesystem | 容器運行的根文件系統(tǒng)是否為只讀,默認(rèn)為true。 |
配置示例
默認(rèn)情況下,容器并不具備NET_ADMIN權(quán)限。如果在容器內(nèi)進行網(wǎng)絡(luò)相關(guān)操作,會返回報錯提示。
您可以為容器配置Security Context,設(shè)置capabilities參數(shù)來增加NET_ADMIN權(quán)限。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"]
重新創(chuàng)建ECI Pod,在容器內(nèi)可以進行網(wǎng)絡(luò)相關(guān)操作。