Kubernetes(十九)Security Context(一)

一    官网文档

Pod 安全性标准

为 Pod 或容器配置安全性上下文

Pod的安全策略

二    Security Context

(1)背景引入

说明:'privileged'(特权模式) '不等于' root-->比如:root用户无法'关闭容器网卡'

思考:哪些容器需要'修改内核参数'?

(2)安全上下文的配置级别

(3)安全上下文的设置方式

三    Pod 设置 Security Context

用法: 在 Pod 定义的'资源清单文件中'添加 'securityContext' 字段,就可以为 Pod 指定安全上下文相关的设定

特点: 通过'该字段'指定的内容将会对'当前 Pod 中的所有容器'生效

(2)常用字段的介绍

kubectl explain 'pods.spec.securityContext'

Security Context List

apiVersion: v1
kind: Pod
metadata:
  name: security-context
spec:
  volumes:
  - name: sec-vol
    emptyDir: {}
  securityContext:          '三个常用参数'
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  containers:
  - name: sec-demo
    image: busybox
    command: ["sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: sec-vol
      mountPath: /pod/sec
    securityContext:
      allowPrivilegeEscalation: false

一个思考

制作镜像'USER'是root,但是进程运行的是1000,不能往'数据卷'里面写文件-->'怎么办?'

(1)进程指定成root -->'根本上'

(2)initContaner  --> chmod 改变权限

(3)查看和验证

说明的是runAsUser指的是'常驻进程-->也就是entrypoint或者cmd'的'用户身份'-->'也是进入容器后相应bash的用户身份'

①  进入容器,top命令查看

kubectl exec -it security-context -- top

对比

②   查看数据卷


③   综合查看

④  尝试删除

四    容器设置 Security Context

kubectl explain pods.spec.'containers.securityContext'

说明: 参数和Pod级别差不多,这里'不再细讲'

apiVersion: v1
kind: Pod
metadata:
  name: security-context-container
spec:
  securityContext:
    runAsUser: 1000                              '对比'
  containers:
  - name: sec-ctx-demo
    image: busybox
    command: [ "sh", "-c", "sleep 60m" ]
    securityContext:
      runAsUser: 2000                            '对比'
      allowPrivilegeEscalation: false          

kubectl exec -it security-context-container -- top

五   设置 Linux Capabilities

(1)背景

(2)什么是 Capabilities

 capabilities man page 

(3) docker中设置

场景引入

Docker 容器本质上就是一个进程,所以理论上容器就会和进程一样会有一些默认的开放权限,默认情况下 Docker 会删除必须的 capabilities 之外的所有 capabilities,因为在容器中我们经常会以 root 用户来运行,使用 capabilities 限制后,容器中的使用的 root 用户权限就比我们平时在宿主机上使用的 root 用户权限要少很多了,这样即使出现了安全漏洞,也很难破坏或者获取宿主机的 root 权限,所以 Docker 支持 Capabilities 对于容器的安全性来说是非常有必要的。

不过我们在运行容器的时候可以通过指定 --privileded 参数来开启容器的超级权限,这个参数一定要慎用,因为他会获取系统 root 用户所有能力赋值给容器,并且会扫描宿主机的所有设备文件挂载到容器内部,所以是非常危险的操作。

但是如果你确实需要一些特殊的权限,我们可以通过 --cap-add 和 --cap-drop 这两个参数来动态调整,可以最大限度地保证容器的使用安全。

下面'表格中'列出的 Capabilities 是 'Docker 默认给容器添加的',我们可以通过 --cap-drop '去除'其中一个或者多个

vendor/github.com/containerd/containerd/oci/'spec_unix.go',这个文件定义了'缺省的capability'

 新版本

下面'表格中'列出的 Capabilities 是 Docker '默认删除'的,我们可以通过'--cap-add添加'其中一个或者多个:

需求:修改网络接口数据

默认情况下是'没有权限的',因为需要的 'NET_ADMIN' 这个 Capabilities ,'默认被移除了'

docker run -it --rm '--cap-add=NET_ADMIN' busybox /bin/sh
所以在'不使用 --privileged 的情况下'('也不建议')我们可以使用 --cap-add=NET_ADMIN 将这个 Capabilities 添加回来

备注: root和privileged的'权限的对比'在这里凸线出来了-->root默认只有14种'capabilities',privileged具有'操作系统所有'的

参考博客

(4)操作系统上设置

 kernel 2.2 之后Linux  以capabilities区分不同单元的关联root特权,'非root'进程都去'检查对应的capabilities'

扩展学习

结论:ping 命令在执行时需要'访问网络',所需的 capabilities 为 'cap_net_admin' 和 'cap_net_raw'

继续探究

列出了'系统支持'的capability

查看'当前进程'的 capabilities 信息

(5)Kubernetes设置

效果

细节: 如果在容器中先'关闭网卡,再开启网卡',网络不通

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值