16. ImagePolicyWebhook
问题
Task
您必须在 cluster 的 master 节点上完成整个考题,所有服务和文件都已被准备好并放置在该节点上。
给定一个目录/etc/kubernetes/epconfig 中不完整的配置以及具有 HTTPS 端点https://wakanda.local:8082/image_policy 的功能性容器镜像扫描器:
- 启用必要的插件来创建镜像策略
- 校验控制配置并将其更改为隐式拒绝(implicit deny)
- 编辑配置以正确指向提供的 HTTPS 端点
最后,通过尝试部署易受攻击的资源/root/KSSC00202/configuration-test.yml 来测试配置是否有效。
:::info
您可以在/var/log/imagepolicy/acme.log 找到容器镜像扫描仪的日志文件。
:::
正确答案:
参考链接
文档搜索关键词:准入控制器、ImagePolicyWebhook
1. 关闭默认允许:
#如果权限不够, 切换到root
candidate@hk8s-master01:~$ vim
/etc/kubernetes/epconfig/admission_configuration.json
{
"imagePolicy": {
"kubeConfigFile": "/etc/kubernetes/epconfig/kubeconfig.yaml",
"allowTTL": 50,
"denyTTL": 50,
"retryBackoff": 500,
"defaultAllow": false
}
}
# 将'defaultAllow' 改成false
2、配置 Webhook 地址:
注意:
模拟环境中这个url是http的, 考试时按照题⽬要求写。
操作前,先备份配置文件
千万不要在/etc/kubernetes/下备份,可能会导致异常,可以备份到/tmp 目录下。
candidate@hk8s-master01:~$ vim
/etc/kubernetes/epconfig/kubeconfig.yaml
server: http://wakanda.local:8082/image_policy #模拟环境中这个url是http的, 考试时按照题⽬要求写
3、开启 ImagePolicyWebhook:
注意:
操作前,先备份配置文件
千万不要在/etc/kubernetes/下备份,可能会导致异常,可以备份到/tmp 目录下。
在- command:下修改或添加如下内容,注意空格要对齐(不建议放到最后,建议放置的位置详见下方截图)
- –enable-admission-plugins=NodeRestriction,ImagePolicyWebhook #注意先搜索,如果存在则修改,比如模拟环境里已经有了,但不全,需要修改。
- –admission-control-config-file=/etc/kubernetes/epconfig/admission_configuration.json #在 1.28 的考试中,默认有这行了,但为了以防万一,模拟环境,没有这行,需要你手动添加。考试时,你先检查,有的话,就不要再重复添加了。
candidate@hk8s-master01:~$ vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --enable-admission-plugins=NodeRestriction,ImagePolicyWebhook #修改这⼀⾏加上ImagePolicyWebhook
- --admission-control-config-file=/etc/kubernetes/epconfig/admission_configuration.json # 添加这⼀⾏,指向的⽂件在 epconfig⽬录下
4、配置挂载, 考试时⼀般已经挂载好了,到时检查下, 不要重复挂载 :
... ...
95 - mountPath: /usr/local/share/ca-certificates
96 name: usr-local-share-ca-certificates
97 readOnly: true
98 - mountPath: /etc/kubernetes/epconfig # 添加这三⾏
99 name: epconfig #
100 readOnly: true #
105 hostNetwork: true
106 priority: 2000001000
107 priorityClassName: system-node-critical
108 securityContext:
109 seccompProfile:
110 type: RuntimeDefault
111 volumes:
112 - hostPath: ##添加这三行
113 path: /etc/kubernetes/epconfig #
115 name: epconfig #
120 - hostPath:
121 path: /etc/ssl/certs
122 type: DirectoryOrCreate
... ...
5、重启服务
注意:
等待 3 分钟,等集群应用策略后,确保 kube-apiserver 是 running 的
kubectl -n kube-system get pod
systemctl daemon-reload
systemctl restart kubelet
6、测试
注意:
(注意:考试时,你可能会正常的创建出来 pod。但是题目里会给你一个日志文件(如下图),你可以检查日志文件,日志文件里会记录检测信息的,如果有提
示大概意思是说部署了一个易受攻击的镜像,则表示做对了。)
部署题⽬给出的yaml
通过尝试部署易受攻击的资源 /root/KSSC00202/configuration-test.yml 来测试配置是否有效
无法创建 pod,如下报错,表示成功。
因为模拟环境里的 image_policy 策略是镜像 tag 是 latest 的不允许创建。
root@hk8s-master01:~/init# kubectl create -f
/root/KSSC00202/configuration-test.yml
然后查看 kubectl describe replicationcontrollers nginx-latest
imagepolicywebhook已经⽣效了, image policy webhook backend denied one or more images。