
CKS 1.24真题解析
CKS 1.24 真题解析
最近非常看不上,一些把CKA/CKS/CKAD在各种学习论坛里当生意做的人,所以准备下面这个免费版的1.24 试题解析
1. 实验环境准备(无需去买所谓的环境,直接用kubernetes官网提供的就好):
关于实验练习的环境:
使用kubernetes 官网提供的练习环境链接cluster-interactive
https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/

点击Click To Connect后进入下图

继续选择 按钮start,等10-20s 很快
初始完成后,进入命令提示符,执行*minikube start*命令
待minikube start完成后,执行kubectl get nodes, 确定k8s 练习环境已经好了
到此练习环境就有了,这个可以用1个小时,之后重复步骤重开实验环境就好,每次都是新环境,对纤细很有效果的
提醒不要相信使用所谓的书签,这个不要考虑,因为时间很紧张,每道题都是2-3分,又查网页时间不如提前记下来
2 题目讲解:
1/16. serviceAccount的创建和Pod绑定 (Task 1 of 16 问题权重: 4%)
实验环境预配置(实际考试不需要)
kubectl create ns qa #此行考试时不用执行,只是因为测试环境里没有名字为qa的namespace,所以需要创建下
```$ kubectl create sa will-deleted-sa -n qa #这里先创建个sa,只是因为测试环境里在qa的namespace只有default sa,创建一个为了给第3问举例
serviceaccount/will-deleted-sa created
mkdir -p /home/candidate/KSCH00301
kubectl config use-context KSCH00301 ***#切换下view***
回答过程:
- 在现有 namespace qa 中创建一个名为 backend-sa 的新 ServiceAccount 确保此 ServiceAccount 不自动挂载 API 凭据。
kubectl create sa backend-sa -n qa -o yaml --dry-run=client > case1.yaml
echo “automountServiceAccountToken: false” >>case1.yaml
kubectl apply -f case1.yaml
serviceaccount/backend-sa created
2 使用 /home/candidate/KSCH00301/app-pod.yaml 中的清单文件来创建一个 Pod。
vi /home/candidate/KSCH00301/app-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: app-pod
namespace: qa #主要关注这
spec:
serviceAccountName: backend-sa #主要关注这
containers:
- name: pod-container
image: nginx
$ kubectl apply -f /home/candidate/KSCH00301/app-pod.yaml
pod/app-pod created
- 最后,清理 namespace qa 中任何未使用的 ServiceAccount
$ kubectl get sa -n qa
NAME SECRETS AGE
backend-sa 1 5m23s
default 1 5m52s
will-deleted-sa 1 4s #这个考试时,看一下实际的sa名字,这个举例是will-deleted-sa
$ kubectl delete sa will-deleted-sa -n qa
serviceaccount “will-deleted-sa” deleted
2/16 **role及rolebinding创建**

实验环境预配置(实际考试不需要)
kubectl create ns security
kubectl create role web-role -n security --resource=pods --verb=get
kubectl create sa test-sa-3 -n security
kubectl create rolebinding web-role-binding --role web-role --serviceaccount=security:test-sa-3 -n security

回答过程:
1. Pod 的 ServiceAccount test-sa-3 的现有 Role,仅允许只对 pods 类型的 resources 执行 list 操作
kubectl describe rolebinding -n security

$ kubectl edit role web-role -n security
role.rbac.authorization.k8s.io/web-role edited
这里根据题意修改resources和verbs分别为pods 和list
2. 在 namespace security 中创建一个名为 web-role-2,并仅允许只对 statefulsets 类型的 resources 执行 delete 操作的新 Role。
kubectl create role web-role-2 -n security --resource=statefulsets --verb=delete

3 创建一个名为 web-role-2-binding 的新 RoleBinding,将新创建的 Role 绑定到 Pod 的 ServiceAccount。
kubectl create rolebinding web-role-2-binding --role web-role-2 --serviceaccount=security:test-sa-3 -n security

3/16 授权与验证-1

回答过程:
kubectl config use-context KSCH00101 # 考试时需要,实验里不需要
ssh ksch00101-master # 考试时需要,实验里不需要
> 3.1 使用授权模型 Node,RBAC 和准入控制器 NodeRestriction
vi /etc/kubernetes/manifests/kube-apiserver.yaml # 登录到master几点上进行

- --authorization-mode=Node,RBAC #确保只是Node,RBAC
- --enable-admission-plugins= ...,NodeRestriction,.... #确保这行要包括 NodeRestriction
- --anonymous-auth: true #这行要删除,或者true改成flase
然后保存退出就好
> 3.2 删除用户 system:anonymous 的 ClusterRoleBinding 来进行清理
kubectl get clusterrolebinding -o wide | grep "system:anonymous" #这个只是查询,时间紧不执行直接跳过,用下面指令直接删
kubectl delete clusterrobinding system:anonymous
4/16 使用sysdig检测特定容器进程

kubectl config use-context KSRS00101 #考试时需要,实验里不需要
ssh ksrs00101-worker1 #题上说了是工作节点,考试时需要,实验里不需要
mkdir -p /opt/KSRS00101/incidents #考试时不需要,实验里需要
实验环境准备:
apt install sysdig -y #安装sysdig
在这里插入图片描述
#安装redis pod #这个pod无所谓,只是部署个测试pod,查询container Id而已
kubectl run redis --image=redis
pod/redis created
timestamp,uid/username,processName 分别对应
timestamp----------- evt.time,
uid/username--------user.uid,
processName--------proc.name


通过docker ps或这个crictl ps 查看 redis的container id,这里注意下使用crictl ps查看的container id 需要移除最后一位,鄙视一些圈外的培训认证代考生意人
这个看到的container ID是 1d540cc80fcc
sysdig -M 30 -p “%evt.time,%user.uid,%proc.name” container.id=1d540cc80fcc > /opt/KSRS00101/incidents/details

5/16 audit-log配置

答题过程:
kubectl config use-context KSRS00602 #考试时需要,实验里不需要
ssh ksrs00602-master #考试时需要,实验里不需要
mkdir -p /var/log/kubernetes #考试时不需要,实验里需要
mkdir -p /etc/kubernetes/logpolicy #考试时不需要,实验里需要
5.1 准备audit log的policy
编辑和扩展基本策略以记录:
● RequestResponse 级别的 conjobs 更改
● namespace webapps 中 pods 更改的请求体
● Metadata 级别的所有 namespace 中的 ConfigMap 和 Secret 的更改
vi /etc/kubernetes/logpolicy/sample-policy.yaml
apiVersion: audit.k8s.io/v1 # This is required.
kind: Policy
omitStages:
- "RequestReceived"
rules:
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # core API group
resources: ["endpoints", "services"]
- level: None
userGroups: ["system:authenticated"]
nonResourceURLs:
- "/api*" # Wildcard matching.
- "/version"
############################################### 上面的在考试的时候已经有了不要修改,下面的家上去就好
- level: RequestResponse
- group: ""
resources: ["conjobs"]
- level: Request
- group: ""
resources: ["pods"]
namespaces: ["webapps"]
- level: Metadata
resources:
- group: ""
resources: ["secrets", "configmaps"]
- level: Metadata
omitStages:
- "RequestReceived"
5-2 配置在msater上的 kube-apiserver.yaml
vi /etc/kubernetes/manifests/kube-apiserver.yaml
添加如下配置
- –audit-policy-file=/etc/kubernetes/logpolicy/sample-policy.yaml
- –audit-log-path=/var/log/kubernetes/kubernetes-logs.txt
- –audit-log-maxage=10
- –audit-log-maxbackup=2
....
-mountPath: /etc/kubernetes/logpolicy
name: audit
readOnly: true
- mountPath: /var/log/kubernetes
name: audit-log
readOnly: false
- hostPath:
path: /var/log/kubernetes
type: DirectoryOrCreate
name: audit
- hostPath:
path: /etc/kubernetes/logpolicy
type: DirectoryOrCreate
name: audit-log
5-16 特权容器
PODS=kubectl get pod -n development | awk 'NR!=1{print $1}'
for i in $PODS; do echo $i;kubectl get pod $i -n development -o yaml | grep “e[d:m]: true”;done
删掉privileged:true 和readonlyRootFilesystem:true的pod
kubectl delete -n development pod
待续
更多推荐