Kubernetes 安全专家(CKS)必过心得
off999 2025-01-11 16:04 29 浏览 0 评论
注意:参加 CKS 考试需要经过认证的 Kubernetes 管理员(CKA) 认证。如果您没有它或它已过期(持续三年),您可以查看CKA考试的相关文章并完成考试。
什么是认证 Kubernetes 安全专家考试?
根据 CNFC 的说法,获得CKS证书证明考生具备在构建、部署和运行期间确保基于容器的应用程序和Kubernetes平台安全的技能、知识和能力。CKS考试内容和CKA类似,大部分也都是实操。
CKS考试大纲
CKS 考试旨在测试您在不同安全方面的技能。下表显示了 CKS 认证的不同领域及其权重。
考试内容 | 占比 |
集群设置 | 10% |
集群强化 | 15% |
系统强化 | 15% |
最小化微服务漏洞 | 20% |
供应链安全 | 20% |
监控、日志记录和运行时安全 | 20% |
!重要提示:考试中允许使用以下网站,建议多熟悉以下网站的内容结构,方便遇到问题快速查询
https://github.com/aquasecurity/trivy |
https://docs.sysdig.com/ |
https://falco.org/docs/ |
https://gitlab.com/apparmor/apparmor/-/wikis/Documentation |
准备工作:
首先需要一个k8s集群来学习和尝试CKS认证中涉及的所有概念。你可以根据下方建议选取合适方式部署、管理一个K8S环境:
- MiniKube;
- 使用 kubeadm 部署集群;
- 使用免费 Google Cloud Credits 的GKE 集群;
- 腾讯云容器服务TKE;
- 阿里云容器服务服务ACK;
- Azure 上使用免费云积分的 AKS 服务;
- AWS 上使用免费套餐计划的 EKS 服务。
别名:
设置别名非常有利于节省我们执行操作的时间并且减少产生错误的可能
vi ~/.bashrc
---
alias k='kubectl'
alias kg='k get'
alias kd='k describe'
alias kl='k logs'
alias kc='k create'
source <(kubectl completion bash)
source <(kubectl completion bash | sed 's/kubectl/k/g' )
complete -F __start_kubectl k
---资源快捷访问方式:
资源 | 简称 |
pods | po |
replicasets | rs |
deployments | deploy |
services | svc |
namespace | ns |
networkpolicy | netpol |
persistentstorage | pv |
persistentstorageclaim | pvc |
serviceaccounts | sa |
练习
从现有 pod 生成 yaml 规范
kg po <pod-name> -o wide
# 生成 YAML Pod 规范
kg po <pod-name> -o yaml
kg po <pod-name> -o yaml > <pod-name>.yaml
# 获取不包含集群特定信息的 pod 的 YAML 规范
kg po my-pod -o yaml --export > <pod-name>.yaml查看日志并打印
kubectl logs deploy/<podname>
kubectl logs deployment/<podname>
#Follow logs
kubectl logs deploy/<podname> --tail 1 --follow创建 ConfigMap 和 Secret
kc cm my-cm --from-literal=APP_ENV=dev
kc cm my-cm --from-file=test.txt
kc cm my-cm --from-env-file=config.env
kc secret generic my-secret --from-literal=APP_SECRET=sdcdcsdcsdcsdc
kc secret generic my-secret --from-file=secret.txt
kc secret generic my-secret --from-env-file=secret.env调试工具 busybox
可以使用busybox容器在集群内部进行各种系统调试,比如:端口验证、http、htpts验证、网络可达验证、域名解析等
# 运行busybox 容器
k run busybox --image=busybox:1.28 --rm --restart=Never -it sh
# 进入busybox容器
k exec -it busybox -c busybox2 -- /bin/sh
# 添加资源限制
kubectl run nginx --image=nginx --restart=Never --requests='cpu=100m,memory=256Mi' --limits='cpu=200m,memory=512Mi'
# 给pod创建并绑定service
kubectl run nginx --image=nginx --restart=Never --port=80 --expose
# 端口检验
nc -z -v -w 2 <service-name> <port-name>
# NSLookup
nslookup <service-name>
nslookup 10-32-0-10.default.pod网络策略:
在 Kubernetes 集群中,默认情况下所有 pod 都可以与所有 pod 通信,这在某些实现中可能是一个安全问题。为了解决这个问题,Kubernetes 引入了网络策略来允许或拒绝基于 pod 标签的流量,这些标签是 pod 规范的一部分。
下面的示例拒绝在所有命名空间中运行的 Pod 的 Ingress 和 Egress 流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: example
namespace: default
spec:
podSelector: {}
policyTypes:
- Egress
- Ingress下面的示例拒绝在所有命名空间中运行的 Pod 的 Ingress 和 Egress 流量。但它允许访问在端口 3306 上运行的 MySQL 解析服务。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Egress
- Ingress
egress:
- to:
ports:
- port: 3306
protocol: TCP
- port: 3306
protocol: UDP拒绝除了 192.168.10.10以外的所有Ingress流量
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name:cloud-metadata-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 192.168.10.10/32允许Egress访问 192.168.10.10服务器的数据
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cloud-metadata-accessor
namespace: default
spec:
podSelector:
matchLabels:
role: metadata-accessor
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 192.168.10.10/32使用 Kubesec 进行静态分析
kubesec scan pod.yaml
# Using online kubesec API
curl -sSX POST --data-binary @pod.yaml https://v2.kubesec.io/scan
# Running the API locally
kubesec http 8080 &
kubesec scan pod.yaml -o pod_report.json -o json使用trivy进行漏洞扫描
trivy image nginx:1.18.0
trivy image --severity CRITICAL nginx:1.18.0
trivy image --severity CRITICAL, HIGH nginx:1.18.0
trivy image --ignore-unfixed nginx:1.18.0
# Scanning image tarball
docker save nginx:1.18.0 > nginx.tar
trivy image --input archive.tar
# Scan and output results to file
trivy image --output python_alpine.txt python:3.10.0a4-alpine
trivy image --severity HIGH --output /root/python.txt python:3.10.0a4-alpine
# Scan image tarball
trivy image --input alpine.tar --format json --output /root/alpine.json删除不需要的服务
列出服务:
systemctl list-units --type service
停止服务:
systemctl stop nginx
禁用服务:
systemctl disable nginx
删除服务
apt remove nginx绑定运行时类:
Kubernetes 在新版本中引入了 RuntimeClass 功能,v1.12用于选择容器运行时配置。容器运行时配置用于运行 pod 的底层容器。
大多数 Kubernetes 集群将dockershim用作运行容器的 Runtime 类,但您可以使用不同的容器 Runtime。
在dockershimKubernetes 版本中已弃用v1.20,并将在v1.24.
创建运行时类:
apiversion: node.k8s.io/v1beta1
kind: RuntimeClass
metadata:
name: gvisor
handler: runsc给pod绑定运行时类
apiVersion: v1
kind: Pod
metadata:
labels:
run: nginx
name: nginx
spec:
runtimeClassName: gvisor
containers:
- name: nginx
image: nginx RBAC 使用:
基于角色的访问控制 (RBAC) 命令提供了一种基于单个用户或服务帐户的角色来调节对 Kubernetes 资源的访问的方法。
创建角色:
kubectl create role developer --resource=pods --verb=create,list,get,update,delete --namespace=development
角色绑定:
kubectl create rolebinding developer-role-binding --role=developer --user=zhangsan --namespace=development
验证:
kubectl auth can-i update pods --namespace=development --as=zhangsan
创建集群角色:
kubectl create clusterrole pvviewer-role --resource=persistentvolumes --verb=list
clusterrole和 serviceaccount绑定
kubectl create clusterrolebinding pvviewer-role-binding --clusterrole=pvviewer-role --serviceaccount=default:pvviewerk8s集群维护:
使用kubectl drain命令从给定节点中删除所有正在运行的工作负载(pod)。
使用kubectl cordon命令来封锁节点以将其标记为可调度。
使用kubectl uncordon命令将节点设置为可调度,这意味着控制器管理器可以将新 pod 调度到给定节点。
排空所有 pod 的节点:
kubectl drain node-1
排空节点并忽略守护程序集:
kubectl drain node01 --ignore-daemonsets
将一个节点标记为不可调度,这样就不能在这个节点上调度新的 Pod
kubectl cordon node-1
标记节点可调度
kubectl uncordon node-1CKS考试技巧
Kuberneteskubectl get命令为用户提供了一个输出标志-o或--output,它帮助我们以 JSON、yaml、wide 或 custom-columns 的形式格式化输出。
CKS 考试真题解析
如何保护和强化容器镜像
在设计容器映像以运行您的代码时,请特别注意保护和强化措施,以防止黑客攻击和特权升级攻击。在构建容器镜像时请记住以下几点:
- 使用特定的包版本,例如alpine:3.13.
- 不要以 root 身份运行 - 使用USER <username>来阻止 root 访问。
- securityContext在使用中使文件系统只读readOnlyRootFilesystem: true
- 使用删除 shell 访问RUN rm -rf /bin/*
如何最小化操作系统占用空间
容器层:
说明RUN、COPY和ADD创建容器层。其他指令创建临时中间图像并且不增加构建的大小。创建图层的说明会增加结果图像的大小。
典型的 Dockerfile 如下所示。RUN它使用指令添加单层。
FROM ubuntu
RUN apt-get update && apt-get install -y golang-go
CMD ["sh"]多阶段构建
多阶段构建利用FROMDockerfile 中的多个语句。该FROM指令标志着构建的一个新阶段。它结合了多个FROM语句,允许利用以前的构建,以便有选择地将二进制文件复制到新的构建阶段,省略不必要的二进制文件。生成的 Docker 映像的大小要小得多,攻击面也大大减少。
FROM ubuntu:20.04 AS build
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y golang-go
COPY app.go .
RUN CGO_ENABLED=0 go build app.go
FROM alpine:3.13
RUN chmod a-w /etc
RUN addgroup -S appgroup && adduser -S appuser -G appgroup -h /home/appuser
RUN rm -rf /bin/*
COPY --from=build /app /home/appuser/
USER appuser
CMD ["/home/appuser/app"]总结:
勤加练习是通过CKS考试的关键,本文只列举了部分实操内容,更多考试内容以及详细信息可以前往CNCF官网或Linux foundation查看,最后祝各位考试顺利通过!
关于HummerRisk
HummerRisk 是开源的云原生安全平台,以非侵入的方式对云原生环境进行全面安全检测。
针对于K8s的安全,我们提供多方面的检测能力,可以帮助用户快速发现K8s集群中的各种安全问题。
访问项目地址了解试用: ?
GitHub - HummerRisk/HummerRisk: HummerRisk 是云原生安全检测平台,提供三个方面的能力:混合云安全合规,K8S容器云安全和软件安全
- 上一篇:实战项目搭建个人论坛网站
- 下一篇:一文带你读懂Nginx的负载均衡
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
