全部產品
Search
文件中心

Elastic Container Instance:配置Security Context

更新時間:Aug 09, 2024

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