前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【K8s】Kubernetes 安全机制之 Security Context

【K8s】Kubernetes 安全机制之 Security Context

作者头像
行者Sun
发布2024-10-18 13:08:56
发布2024-10-18 13:08:56
25600
代码可运行
举报
文章被收录于专栏:Kubernetes
运行总次数:0
代码可运行

下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

在 Kubernetes 中,Security Context(安全上下文)是一种重要的安全机制。

Security Context 通过定义 Pod 或 Pod 内容器的权限来控制容器的运行方式,从而限制不必要的访问、增强容器的安全性。

Security Context 包括但不限于以下配置字段:

  • AllowPrivilegeEscalation:用于控制进程是否可以获得比其父进程更多的权限
  • appArmorProfile:用于定义容器使用的 AppArmor 选项,限制单个程序的功能
  • capabilities:用于控制运行容器时要添加或删除的功能
  • privileged:用于控制容器是否以特权模式运行
  • procMount:用于定义容器的 proc 挂载的类型
  • readOnlyRootFilesystem:用于控制容器是否以只读方式挂载根文件系统
  • runAsGroup:用于定义运行容器进程入口点的 GID
  • runAsNonRoot:用于控制容器是否以非 root 用户身份运行
  • runAsUser:用于定义运行容器进程入口点的 UID
  • seLinuxOptions:用于定义容器的 SELinux 上下文,为对象分配安全标签
  • seccompProfile:用于定义容器使用的 Seccomp 选项,过滤进程的系统调用
代码语言:javascript
代码运行次数:0
复制
官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
API文档:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.31/#securitycontext-v1-core

为 Pod 设置 Security Context

1、资源清单(示例)

代码语言:javascript
代码运行次数:0
复制
apiVersion: v1
kind: Pod
metadata:
  name: demo-security-context
spec:
  containers:
  - name: demo1
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
  containers:
  - name: demo2
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: data
      mountPath: /data/demo
  volumes:
  - name: data
    emptyDir: {}
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
    supplementalGroups: [4000]

2、配置示例说明

  • runAsUser 字段:对于 Pod 内任意容器,其所有进程的用户(user) ID 为 1000
    • 如果省略 runAsUser 字段,则容器的用户 ID 为 0(root)
  • runAsGroup 字段:对于 Pod 内任意容器,其所有进程的主组(primary group) ID 为 3000
    • 容器中创建的任何文件将归属于用户 1000 和组 3000
    • 如果省略 runAsGroup 字段,则容器的主组 ID 为 0(root)
  • fsGroup 字段:对于 Pod 内任意容器,其所有进程是补充组(supplementary group) ID 2000 的一部分
    • /data/demo 卷以及在该卷中创建的任何文件将归属于组 2000
  • supplementalGroups 字段:对于 Pod 内任意容器,其所有进程是指定组(specified group) ID 4000 的一部分
    • 如果省略 supplementalGroups 字段,则表示为空

为 Container 设置 Security Context

1、资源清单(示例)

代码语言:javascript
代码运行次数:0
复制
apiVersion: v1
kind: Pod
metadata:
  name: demo-security-context
spec:
  containers:
  - name: demo1
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    securityContext:
      privileged: true                        # 容器以特权模式运行
      capabilities:                           # 添加或删除功能
        add / drop:
        - SYS_TIME / SYS_PTRACE / SYS_ADMIN
      allowPrivilegeEscalation: false
  containers:
  - name: demo2
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: data
      mountPath: /data/demo
  volumes:
  - name: data
    emptyDir: {}

2、配置示例说明

  • Container Security Context 仅针对指定的 Container 生效
    • 示例中 demo1 容器配置的 Security Context 不会对 demo2 容器生效
  • Container Security Context 的优先级高于 Pod Security Context,Pod Security Context 下相同的配置会被覆盖

书籍推荐

最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实施运维知识交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档