目录
- 题目
- 环境搭建
- imagePolicyWebhook搭建
- 解题
- 任务二
- 任务三
- 任务一
- 检查
- 模拟考题
- 参考
题目
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
截图
可以看到被拒绝
模拟考题
参考
k8s-准入控制器
k8s-imagepolicywebhook
快速了解Kubernetes中的ImagePolicyWebhook
github-kube-image-bouncer
kubernetes-image-policy-webhook-explained
k8s-kube-apiserver