题目
Context cluster上设置了容器镜像扫描器,但尚未完全集成到 cluster 的配置中。 完成后,容器镜像扫描器应扫描并拒绝易受攻击的镜像的使用。 Task 注意:你必须在 cluster 的 master 节点上完成整个考题,所有服务和文件都已被准备好并放置在该节点上。 给定一个目录 /etc/kubernetes/epconfig 中不完整的配置, 以及具有 HTTPS 端点 https://image-bouncer-webhook.default.svc:1323/image_policy 的功能性容器镜像扫描器: 1. 启用必要的插件来创建镜像策略 2. 校验控制配置并将其更改为隐式拒绝(implicit deny) 3. 编辑配置以正确指向提供的 HTTPS 端点 最后,通过尝试部署易受攻击的资源 /cks/img/web1.yaml 来测试配置是否有效。
环境搭建
imagePolicyWebhook搭建
假设已有服务器
不完整的准入配置文件
命令
mkdir -p /etc/kubernetes/epconfig vim /etc/kubernetes/epconfig/admission_configuration.json
文件内容如下:
{ "imagePolicy": { "kubeConfigFile": "/etc/kubernetes/kube-image-bouncer.yml", "allowTTL": 50, "denyTTL": 50, "retryBackoff": 500, "defaultAllow": true } }
命令
vim /etc/kubernetes/epconfig/kubeconfig.yaml
文件内容如下:
apiVersion: v1 kind: Config # clusters refers to the remote service. clusters: - cluster: certificate-authority: /etc/kubernetes/epconfig/external-cert.pem # CA for verifying the remote service. server: server # URL of remote service to query. Must use 'https'. name: image-checker contexts: - context: cluster: image-checker user: api-server name: image-checker current-context: image-checker preferences: {} # users refers to the API server's webhook configuration. users: - name: api-server user: client-certificate: /etc/kubernetes/epconfig/apiserver-client-cert.pem # cert for the webhook admission controller to use client-key: /etc/kubernetes/epconfig/apiserver-client-key.pem # key matching the cert
测试验证文件
命令
mkdir -p /cks/img/ vim /cks/img/web1.yaml
文件内容如下:
apiVersion: v1 kind: ReplicationController metadata: name: nginx-latest spec: replicas: 1 selector: app: nginx-latest template: metadata: name: nginx-latest labels: app: nginx-latest spec: containers: - name: nginx-latest image: nginx ports: - containerPort: 80
解题
做题的时候按照以下顺序
任务二
修改准入配置文件
命令
vim /etc/kubernetes/epconfig/adminssion_configuration.json
把defaultAllow由true改为false
defaultAllow: false
任务三
修改kube配置文件
命令
vim /etc/kubernetes/epconfig/kubeconfig.yaml
在cluster下添加server
server: https://image-bouncer-webhook.default.svc:1323/image_policy
任务一
修改api-server配置文件
命令
vim /etc/kubernetes/manifests/kube-apiserver.yaml
启用ImagePolicyWebhook插件,确认–admission-control-config-file选项已有配置文件并挂载
--enable-admission-plugins=NodeRestriction,ImagePolicyWebhook --admission-control-config-file=/etc/kubernetes/epconfig/adminssion_configuration.json
考试时应该已经挂载,可以检查一下,没有自行添加
重启kubelet
systemctl daemon-reload systemctl restart kubelet
检查
命令
kubectl create -f /cks/img/web1.yaml kubectl describe rc nginx-latest
截图
可以看到被拒绝
模拟考题
参考
快速了解Kubernetes中的ImagePolicyWebhook