CKS 题库 16、ImagePolicyWebhook容器镜像扫描
Context
cluster 上设置了容器镜像扫描器,但尚未完全集成到 cluster 的配置中。 完成后,容器镜像扫描器应扫描并拒绝易受攻击的镜像的使用。
Task
注意:你必须在 cluster 的 master 节点上完成整个考题,所有服务和文件都已被准备好并放置在该节点上。
给定一个目录 /etc/kubernetes/epconfig 中不完整的配置, 以及具有 HTTPS 端点 https://image-bouncer-webhook.default.svc:1323/image_policy 的功能性容器镜像扫描器:
- 启用必要的插件来创建镜像策略
- 校验控制配置并将其更改为隐式拒绝(implicit deny)
- 编辑配置以正确指向提供的 HTTPS 端点
最后,通过尝试部署易受攻击的资源 /cks/img/web1.yaml 来测试配置是否有效。
参考
https://kubernetes.io/zh/docs/reference/access-authn-authz/admission-controllers/#如何启用一个准入控制器
https://kubernetes.io/zh/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook
https://kubernetes.io/zh/docs/tasks/debug/debug-cluster/audit/#log-后端
解答
切换集群
kubectl config use-context KSSH00901 |
远程到master并切换root
ssh master01 |
编辑admission_configuration.json(题目会给这个目录),修改defaultAllow为false:
vi /etc/kubernetes/epconfig/admission_configuration.json |
"denyTTL": 50, |
编辑/etc/kubernetes/epconfig/kubeconfig.yml,添加 webhook server 地址: 操作前,先备份配置文件
cp /etc/kubernetes/epconfig/kubeconfig.yml bakyaml/ |
修改如下内容
certificate-authority: /etc/kubernetes/epconfig/server.crt |
编辑kube-apiserver.yaml,从官网中引用 ImagePolicyWebhook 的配置信息: 操作前,先备份配置文件
cp /etc/kubernetes/manifests/kube-apiserver.yaml bakyaml/ |
在- command:下添加如下内容,注意空格要对齐(不建议放到最后,建议放置的位置详见下方截图)
- --enable-admission-plugins=NodeRestriction,ImagePolicyWebhook |
在kube-apiserver.yaml的 volumeMounts 增加
volumeMounts: #在volumeMounts下面增加 #注意,在1.25考试中,蓝色的内容可能已经有了,你只需要添加绿色字体的内容。可以通过红色字,在文件中定位。但模拟环境没有加,需要你全部手动添加。这样是为了练习,万一考试中没有,你也会加。但是如果考试中已添加,你再添加一遍,则会报错,导致api-server启不起来。 |
在kube-apiserver.yaml的volumes 增加
volumes: #在volumes下面增加 #注意,在1.25考试中,蓝色的内容可能已经有了,你只需要检查确认一下是否准确。可以通过红色字,在文件中定位。但模拟环境没有加,需要你全部手动添加。这样是为了练习,万一考试中没有,你也会加。但是如果考试中已添加,你再添加一遍,则会报错,导致api-server启不起来。 |
重启并检查集群
systemctl restart kubelet |
通过尝试部署易受攻击的资源 /cks/img/web1.yaml 来测试配置是否有效 无法创建pod,如下报错,表示成功。 因为模拟环境里的image_policy策略是镜像tag是latest的不允许创建。
kubectl apply -f /cks/img/web1.yaml |



