最近非常看不上,一些把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***

回答过程:

  1. 在现有 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

  1. 最后,清理 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创建**
![在这里插入图片描述](https://img-blog.csdnimg.cn/f819f8efad9c471aa59da4b1e45b9d60.png)
实验环境预配置(实际考试不需要)
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


![在这里插入图片描述](https://img-blog.csdnimg.cn/5fa5300632d9431a8d957fefec501849.png)
回答过程:

1. Pod 的 ServiceAccount test-sa-3 的现有 Role,仅允许只对 pods 类型的 resources 执行 list 操作

kubectl describe rolebinding -n security
![主要查看实际的Role名字,这里是***web-role***](https://img-blog.csdnimg.cn/8f1594ba5e1541a2b460fd9a8f755c79.png)

$ 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

![在这里插入图片描述](https://img-blog.csdnimg.cn/2520309ce3804aca890fc43779199b98.png)


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

![在这里插入图片描述](https://img-blog.csdnimg.cn/abf9861ab97e4616a50b359ad9b103fd.png)


3/16 授权与验证-1
![在这里插入图片描述](https://img-blog.csdnimg.cn/9959592ce4664797a4fda6a0518ec739.png)
回答过程:
 kubectl config use-context KSCH00101    # 考试时需要,实验里不需要
 ssh ksch00101-master                              #  考试时需要,实验里不需要

> 3.1 使用授权模型 Node,RBAC 和准入控制器 NodeRestriction

vi /etc/kubernetes/manifests/kube-apiserver.yaml  # 登录到master几点上进行
![在这里插入图片描述](https://img-blog.csdnimg.cn/e539bef81a4c4cbd961c7ff0c6fae3c9.png)
- --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检测特定容器进程

![在这里插入图片描述](https://img-blog.csdnimg.cn/c3e997099376470fbc11eb8013e05958.png)
 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 |grep redis](https://img-blog.csdnimg.cn/a92b7a69c61a43249ba1d82209cd40de.png)
![crictl ps |grep redis](https://img-blog.csdnimg.cn/8a1daf284fe24c92be880710fb1b50ed.png)
通过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


![在这里插入图片描述](https://img-blog.csdnimg.cn/40f36ecb00c9469686c7789d73e7db59.png)

5/16 audit-log配置
![在这里插入图片描述](https://img-blog.csdnimg.cn/8ce38b5302fc4d9b86f440de11c352af.png)

答题过程:



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

待续

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐