kubernets CKS 4.2 Pod安全上下文(二)

为什么bitnami 安装的软件进入容器,用户名都是I have no name 可以看到输出,current_user 处会显示主机当前用户的名字,这解决了主机用户对挂载的卷没有权限的问题。主机当前目录出现了容器内创建的 tmp.txt,但是其权限、用户和组均是 root,其他用户不可写。除了用户名显示问题还存在一个问题,在绑定挂载中如果没有挂载的目录容器没有权限写入内容。,这是因为我们通过 --user 参数指定了容器内部的用户 id,这样容器运行过程往 /project 写的临时文件都会出现在主机上。在k8中容器默认好像是以uid=1001启动的,可以修改该uid。 阅读详情

上一篇:kubernets CKS 4.1 Pod安全上下文(一)

本小结CKS暂时未出题
安全上下文(Security Context):K8s对Pod和容器提供的安全机制,可以设置Pod特权和访问控制。

4.2.1 案例1:设置容器以普通用户运行

背景:容器中的应用程序默认以root账号运行的,这个root与宿主机root账号是相同的, 拥有大部分对Linux内核的系统调用权限,这样是不安全的,所以我们应该将容器以普 通用户运行,减少应用程序对权限的使用。 可以通过两种方法设置普通用户:
• Dockerfile里使用USER指定运行用户
• K8s里指定spec.securityContext.runAsUser,指定容器默认用户UID

spec:
  securityContext:
    runAsUser: 1000 # 镜像里必须有这个用户UID
    fsGroup: 1000 # 数据卷挂载后的目录属组设置为该组
  containers:
  - image: wangjinxiong/flask-demo:root
    name: web
    securityContext:
      allowPrivilegeEscalation: false # 不允许提权

创建一个deployment模板并编辑

kubectl create deployment flask-demo --image=wangjinxiong/flask-demo:root --dry-run="client" -o yaml > flask-demo.yaml

编辑配置加入Pod安全上下文配置。

# cat flask-demo.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: flask-demo
  name: flask-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask-demo
  template:
    metadata:
      labels:
        app: flask-demo
    spec:
      securityContext:
        runAsUser: 1000 # 镜像里必须有这个用户UID
        fsGroup: 1000 # 数据卷挂载后的目录属组设置为该组
      containers:
      - image: wangjinxiong/flask-demo:root
        name: flask-demo
        securityContext:
           allowPrivilegeEscalation: false # 不允许提权
        resources: {}

进入容器:

# kubectl exec -it flask-demo-7c5fdc67ff-qlhnt -- /bin/bash
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ 
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ 
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
1000         1     0  0 09:09 ?        00:00:00 /bin/sh -c python main.py
1000         9     1  1 09:09 ?        00:00:02 python main.py
1000        10     0  1 09:12 pts/0    00:00:00 /bin/bash
1000        17    10  0 09:12 pts/0    00:00:00 ps -ef
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$

修改数据,发觉无权限,因为镜像以root账号创建的,其他用户无修改权限:

I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ ls
Dockerfile  main.py  templates
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ touch wangjinxiong.txt
touch: cannot touch 'wangjinxiong.txt': Permission denied
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ ls /data/www
Dockerfile  main.py  templates
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ ls -l /data/
total 0
drwxr-xr-x 1 root root 56 Jul  9 10:13 www
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$ chmod 777 /data/www
chmod: changing permissions of '/data/www': Operation not permitted
I have no name!@flask-demo-7c5fdc67ff-qlhnt:/data/www$

使用wangjinxiong/flask-demo:noroot不存在这个问题,因为镜像以python账号创建的.

4.2.2 案例2:避免使用特权容器

背景:容器中有些应用程序可能需要访问宿主机设备、修改内核等需求,在默认情况下,容器没这个有这个能力,因此这时会考虑给容器设置特权模式。
启用特权模式:

containers:
  - image: lizhenliang/flask-demo:root
    name: web
    securityContext:
      privileged: true

启用特权模式就意味着,你要为容器提供了访问Linux内核的所有能力,这是很危险的,为了减少系统调用的供给,可以使用Capabilities为容器赋予仅所需的能力。

4.2.3 Capabilities

Linux Capabilities:Capabilities是一个内核级别的权限,它允许对内核调用权限进行更细粒度的控制,而不是简单地以root身份能力授权。
Capabilities包括更改文件权限、控制网络子系统和执行系统管理等功能。在securityContext中,可以添加或删除Capabilities,做到容器精细化权限控制。
示例1:容器默认没有挂载文件系统能力,添加SYS_ADMIN增加这个能力

apiVersion: v1
kind: Pod
metadata:
  name: cap-pod
spec:
  containers:
  - image: busybox
    name: test
    command:
    - sleep
    - 24h
    securityContext:
      capabilities:
        add: ["SYS_ADMIN"]

示例2:只读挂载容器文件系统,防止恶意二进制文件创建

apiVersion: v1
kind: Pod
metadata:
  name: cap-pod
spec:
  containers:
  - image: busybox
    name: test
    command:
    - sleep
    - 24h
    securityContext:
      readOnlyRootFilesystem: true
k8s 容器内操作报Permission defined,以root运行容器,定义Pod的特权和访问控制权限 目录 前言 查阅官方文档,找答案 解决方案 前言 当我们通过Pods、Daemon Sets、Deployments等方式运行pod时,大部分镜像容器默认是无特权的运行,独立用户运行的,以elastic/filebeat为例,查看用户和用户组: 可以看到默认是使用uid=1000的filebeat用户,当我们想在容器中创建文件、或者修改文件就会提示Permission defined,如下图所示: 我们可以看到filebeat用户没有写的权限,如果要解决这个问题我们可以通过 阅读详情

相关推荐

云原生Kubernetes | CKS认证总结

【代码】云原生Kubernetes | CKS认证总结

weixin_50471413的博客 1318

k8s的pod中I have no name!

查询deployment后发现是securityContext下面有一些数据,删除这个securityContext后进入pod则显示正常。参考自StackOverFlow,但是忘记了原链接。:使用kubectrl 进入pod后,即。

Mind-Explorer 534

NE5532A与JRC4580在低噪声音频电路设计中的关键应用

本文深入探讨了经典运算放大器NE5532A与JRC4580在低噪声音频电路设计中的核心应用。文章从噪声模型分析入手,阐述了针对低阻抗信号源时,如何利用这两款BJT输入运放的低电流噪声特性进行优化设计。通过对比两者参数与实战守则,为设计高保真音频前级、耳机放大等电路提供了从原理图到PCB布局的完整低噪声解决方案。

weixin_29295541的博客 332

k8s 读书笔记 - kubectl 命令行工具用法详解

kubectl 在 k8s 集群中作为 客户端 CLI 工具,可以让用户使用 kubectl 工具执行命令行,并通过使用 k8s API 与 k8s 集群的控制面(kube-controller-manager)进行通信。

ChaITSimpleLove的博客 2223

实验四 基于IDEA+SpringBoot+Maven+Thymeleaf的系统实现实验目的

通过这次实验,我学习了如何成功进行IDEA+SpringBoot+maven的系统实现,搭建好IDEA+SpringBoot+maven的系统环境,成功地安装并配置了maven的运行环境,学会了创建springboot的三种方式,并且能将之前的实验结合起来运用。pom.xml中引入thymeleaf依赖,在classpath:/templates/下新建HTML页面(可采用实验一创建的页面),新建controller进行测试,访问页面后返回success成功数据。同时掌握和thymeleaf的基本语法。

m0_73502929的博客 1380

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口)

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) 之前写了一篇关于C++调用海康相机SDK采集图像的文章,有很多人私下发送消息咨询了一些问题,由于工作繁忙,只答复了一部分问题,今天抽出时间从头梳理了一下大家提出的问题,把我能够回答的问题都解答一次。上一次的程序只是简单的实现了图像的采集,没有使用到线程,今天把程序重新做出调整,把线程和多态加进去。文章最后有项目的下载地址。 我使用的是QT Creator这个IDE,版本信息如下: 我把相机采集的图像转换为openC

大樱桃的博客 1万+

Unix系统环境中“I have no name!”用户名问题处理

最近一段有接到一些程序员反馈说在连接服务器的时候用户名不显示,而是显示“I have no name!”[Ihavenoname!@localhost~]$,这个问题在当时听了后也感觉有点滑稽,于是上网找了下看,一看才知道是/etc/passwd文件的权限设置有问题,于是自己就去看了下果然,文件的权限是600其他普通用户没有读取的权限,这样系统的uid就无法获...

weixin_34060299的博客 4220

别再手动备份了!用Python脚本批量导出华为/华三交换机配置(附完整代码)

本文详细介绍了如何使用Python脚本实现华为/华三交换机配置的自动化备份,大幅提升网络运维效率。通过paramiko库建立SSH连接,结合pandas处理设备清单,实现配置的批量导出与规范化存储,解决传统手动备份耗时易错的问题。

weixin_28737603的博客 450

kubernets CKS 4.1 Pod安全上下文(一)

安全上下文(Security Context):K8s对Pod和容器提供的安全机制,可以设置Pod特权和访问控制。

cloud_engineer的博客 1253

从数据同化到水文模拟:CMADS如何重塑SWAT模型的中国实践

本文探讨了CMADS数据集与SWAT模型在中国复杂地形水文模拟中的融合实践。CMADS通过高分辨率气象数据同化技术,显著提升了SWAT模型在中国特殊地理环境下的模拟精度,特别是在数据稀缺区域。文章详细分析了CMADS的技术架构、应用案例及与传统数据的性能对比,为水文研究提供了新的技术支撑。

git9versioner的博客 630

一文入门BMS(电池管理系统)

本文章是基于曾师兄的文稿《具有组网扩展功能的新能源汽车电池管理系统》而写的文章。该文章主要是对BMS(Battery Management System,电池管理系统)做一些简要的介绍,借此助各位也助我入门BMS。有纰漏请指出,转载请说明。学习交流请发邮件 1280253714@qq.com。

weixin_45817947的博客 2万+

kubernets CKS内容及题库

kubernets CKS认证及考题教程,包含知识点学习及考题分析,帮助广大网友通过CKS考试

cloud_engineer的博客 6602

宇树机器人丝滑的二人转动作背后,MPC到底是什么?

了解MPC,让我们闻“机”起舞。

Barok的博客 2147

kubernets CKS 3.3 Seccomp 限制容器进程系统调用

对于 Linux 来说,用户层一切资源相关操作都需要通 过系统调用来完成;系统调用实现技术层次上解耦, 内核只关心系统调用API的实现,而不必关心谁调用的。 Seccomp(Secure computing mode) 是一个 Linux 内核安全模块,可用于应用进程允许使用的系统调用。...

cloud_engineer的博客 486

使用AI预测彩票的架构思路

彩票是随机的数字游戏,不要过度依赖AI,本文仅供娱乐研究

淘淘小窝 9413

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Kubernetes CKS 2021 Course【15】---Microservice Vulnerabilities - mTLS

介绍 Practice - Create sidecar proxy root@master:~/cks/mTLS# k run app --image=bash --command -oyaml --dry-run=client > app.yaml -- sh -c 'ping baidu.com' root@master:~/cks/mTLS# cat app.yaml apiVersion: v1 kind: Pod metadata: creationTimestamp:

爱死亡机器人 788

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

k8s中修复mongodb启动失败

file:WiredTiger.wt, connection: __wt_btree_tree_open, 577: WiredTiger has failed to open its metadata Raw: [1712915546:365392][1:0x7fc65c8f1080], file:WiredTiger.wt, connection: __wt_btree_tree_open, 577: WiredTiger has failed to open its metadata

知本知至的博客 999

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Kafka集群 on k8s实战<云原生>

Apache ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务,ZooKeeper 致力于开发和维护一个开源服务器,以实现高度可靠的分布式协调,其实也可以认为就是一个分布式数据库,只是结构比较特殊,是树状结构。官网文档:https://zookeeper.apache.org/doc/r3.8.0/关于Zookeeper的介绍,

MyySophia的博客 1432

容器云服务运维:Kubernetes基于容器的运维

容器云服务运维:Kubernetes基于容器的运维

不知道 1676

kubernetes CKS 2.3 资源配额 ResourceQuota

kubernetes 资源配额 ResourceQuota

cloud_engineer的博客 343

.NET Core + K8S + Apollo 玩转配置中心

1.引言Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微...

kaixincheng2009的专栏 709

K8s进阶6——pod安全上下文、Linux Capabilities、OPA Gatekeeper、gvisor

1、pod安全上下文Security Context,特权容器替代方案Linux Capabilities。 2、pod安全策略psp简介,psp替代方案OPA Gatekeepe,包括rego模板、策略编写。 3、gvisor容器沙箱技术,与docker集成,与containerd集成。 4、Linux内核升级。

百慕卿君博客 4852

Pod资源清单配置基础

资源对象的配置格式 API server接受和返回的所有JSON对象都遵循同一个模式,它们都具有“kind”和“apiVersion”字段,用于标识对象所属的资源类型、API群组及相关的版本 大多数的对象或列表类型的资源还需要具有三个嵌套型的字段metadata、spec和status (1)metadata字段为资源提供元数据信息,例如名称、隶属的名称空间和标签等; (2)spec用于定义用户期望的状态,不同的资源类型,其状态的意义各有不同,例如Pod资源最为核心的功能在于运行容器; (3)sta

weixin_42864043的博客 760

K8s进阶6——pod安全上下文(1),重难点整理

2.创建pod,使用安全上下文指定普通用户id。metadata:labels:spec:selector:template:metadata:labels:spec:3.进入pod容器查看,是以普通用户id为1000的qingjun用户启用程序。4.若构建镜像时没有提前创建普通用户,则在pod.yaml里指定安全上下文创建的容器程序里的普通用户id就是从1000开始。##构建镜像没有提前创建普通用户。##新镜像推送到镜像仓库。

2401_84138785的博客 1536

【kubernetes/k8s概念】k8s 坑问题汇总

1.Pod始终处于Pending状态 如果Pod保持在Pending的状态,意味着无法被正常的调度到节点上。由于某种系统资源无法满足Pod运行的需求 系统没有足够的资源:已经用尽了集群中所有的CPU或内存资源。需要清理一些不在需要的Pod,调整它们所需的资源量,或者向集群中增加新的节点。 用户指定了hostPort:通过hostPort用户能够将服务暴露到指定的主机端口上,会限......

zhonglinzhang 3万+
上一篇: kubernets CKS内容及题库
下一篇: openstack COA 考试模拟题
cloud_engineer
博客等级 码龄5年 9390粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值