上一篇: kubernets CKS 3.3 Seccomp 限制容器进程系统调用
安全上下文(Security Context):K8s对Pod和容器提供的安全机制,可以设置Pod特权和访问控制。
4.1.1 安全上下文限制维度
•自主访问控制(Discretionary Access Control):基于用户ID(UID)和组ID(GID),来判定对对象(例如文件)的访问权限。
•安全性增强的Linux(SELinux):为对象赋予安全性标签。
•以特权模式或者非特权模式运行。
•Linux Capabilities: 为进程赋予root 用户的部分特权而非全部特权。
•AppArmor:定义Pod使用AppArmor限制容器对资源访问限制
•Seccomp:定义Pod使用Seccomp限制容器进程的系统调用
•AllowPrivilegeEscalation:禁止容器中进程(通过SetUID 或SetGID 文件模式)获得特权提升。当容器以特权模式运行或者具有CAP_SYS_ADMIN能力时,AllowPrivilegeEscalation总为True。
•readOnlyRootFilesystem:以只读方式加载容器的根文件系统。
4.1.2 docker例子以普通用户运行的镜像
以root运行的镜像
# cat Dockerfile
FROM python
RUN mkdir /data/www -p
COPY . /data/www
RUN pip install flask -i https://mirrors.aliyun.com/pypi/simple/ && \
pip install prometheus_client -i https://mirrors.aliyun.com/pypi/simple/
WORKDIR /data/www
CMD python main.py
以python用户运行的镜像
# cat Dockerfile
FROM python
RUN useradd python
RUN mkdir /data/www -p
COPY . /data/www
RUN chown -R python /data
RUN pip install flask -i https://mirrors.aliyun.com/pypi/simple/ && \
pip install prometheus_client -i https://mirrors.aliyun.com/pypi/simple/
WORKDIR /data/www
USER python
CMD python main.py
制作镜像后运行容器:
docker build -t flask-demo-v1 .
docker build -t flask-demo-v2 .
docker run -d flask-demo-v1
docker run -d flask-demo-v2
以root运行的进程:
[root@k8s1 flask-demo]# ps -ef | grep main
root 109387 13828 0 18:28 pts/0 00:00:00 grep --color=auto main
root 116491 116461 0 18:19 ? 00:00:00 /bin/sh -c python main.py
root 116654 116491 0 18:19 ? 00:00:00 python main.py
以python运行的进程:(系统必须有一个python账号,没有显示id1000运行)
[root@k8s1 flask-demo]# ps -ef | grep main
python 96675 96648 0 21:22 ? 00:00:00 /bin/sh -c python main.py
python 96777 96675 0 21:22 ? 00:00:00 python main.py
将2个镜像打上tag上传到docker hub
docker tag flask-demo-v1 wangjinxiong/flask-demo:root
docker tag flask-demo-v2 wangjinxiong/flask-demo:noroot
docker push wangjinxiong/flask-demo:root
docker push wangjinxiong/flask-demo:noroot