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 来测试配置是否有效。

解:
kubernetes.io搜索imagepolicy

CKS备考16-ImagePolicyWebhook容器镜像扫描_cks
下拉到我们要配置的这个插件
CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_02
行为配置文件
CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_03
kubeconfig配置文件
CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_04
apiserver中配置配置文件地址
CKS备考16-ImagePolicyWebhook容器镜像扫描_apiserver_05

开始解题:

# 切换到master节点
ssh master01
# 查看题目给的配置文件
ll /etc/kubernetes/epconfig
  • 1.
  • 2.
  • 3.
  • 4.

CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_06
这里选择的两个配置文件,json对应的就是上面的行为配置文件,kubeconfig就是kubeconfig配置文件,我们开始按题干修改

# 修改插件配置文件
cd /etc/kubernetes/epconfig
vim admission_configuration.json
  • 1.
  • 2.
  • 3.
{
  "imagePolicy": {
     "kubeConfigFile": "/etc/kubernetes/epconfig/kubeconfig.yml",
     "allowTTL": 50,
     "denyTTL": 50,
     "retryBackoff": 500,
     "defaultAllow": false # 因为要设置隐式拒绝,所以这里把true改为false
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
# 修改kubeconfig
vi kubeconfig.yml
  • 1.
  • 2.
apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority: /etc/kubernetes/epconfig/server.crt
    # 根据官网配置这里添加server地址
    server: https://image-bouncer-webhook.default.svc:1323/image_policy
  name: bouncer_webhook
contexts:
- context:
    cluster: bouncer_webhook
    user: api-server
  name: bouncer_validator
current-context: bouncer_validator
preferences: {}
users:
- name: api-server
  user:
    client-certificate: /etc/kubernetes/pki/front-proxy-client.crt
    client-key: /etc/kubernetes/pki/front-proxy-client.key  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

CKS备考16-ImagePolicyWebhook容器镜像扫描_cks_07

# 修改apiserver配置,开启插件选项和指定配置文件位置
# 备份apiserver配置,还是备份到tmp文件夹
cp /etc/kubernetes/manifests/kube-apiserver.yaml /tmp
# 修改配置
vim /etc/kubernetes/manifests/kube-apiserver.yaml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

CKS备考16-ImagePolicyWebhook容器镜像扫描_kubernetes_08

# 开启ImagePolicyWebhook插件
- --enable-admission-plugins=NodeRestriction,ImagePolicyWebhook
# 指定插件配置文件地址
- --admission-control-config-file=/etc/kubernetes/epconfig/admission_configuration.json
  • 1.
  • 2.
  • 3.
  • 4.

可以去上一题位置查询这个选项写法
CKS备考16-ImagePolicyWebhook容器镜像扫描_imagepolicywebhook_09
CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_10

# 重启kubelet服务,载入配置
systemctl daemon-reload
systemctl restart kubelet
# 确认apiserver正常启动
kubectl get pods -n kube-system
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_11

# 查看验证pod
vim /cks/img/web1.yaml
# 应用pod
kubectl apply -f /cks/img/web1.yaml
  • 1.
  • 2.
  • 3.
  • 4.

CKS备考16-ImagePolicyWebhook容器镜像扫描_apiserver_12
CKS备考16-ImagePolicyWebhook容器镜像扫描_k8s_13