k8s特性01 —— admission webhook
/ / 点击admission webhook 简介
k8s准入控制通过http回调实现,在这个http服务里可以对请求的参数进行修改或者验证。在k8s里,可修改的wehook资源类型是
mutatingWebhookConfiguration,验证的wenhook资源类型是validatingWebhookConfiguration。在调用链中,mutatingWebhook优先于validatingWebhook执行。
利用service实现
demo地址:k8s-webhook-demo
首先,通过k8s签发证书
创建k8s csr(CertificateSigningRequest)资源
首先在空白目录下生成自己的csr文件及私钥,根据实际情况修改hosts和其他内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 {
"hosts": [
"10.1.1.50"
],
"CN": "kubernetes",
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "CN",
"ST": "SZ",
"L": "SZ",
"O": "k8s",
"OU": "System"
}
]
}
EOF此时生成两个文件:server.csr, server-key.pem,server.csr用于向ca申请公钥,server-key.pem为服务的私钥。
使用以下命令生成k8s中的csr资源对象:
1 | cat <<EOF | kubectl apply -f - |
执行以下命令通过申请:
kubectl certificate approve my-csr
执行命令获取签发后的文件:kubectl get csr my-csr -o jsonpath='{.status.certificate}' | base64 --decode > server.crt
server.crt文件即为签发后的公钥
运行demo
将
server.crt及server-key.pem文件放至demo项目file/文件夹下。
直接运行项目即可。
创建 mutatingWebhookConfiguration 资源对象
1 | apiVersion: admissionregistration.k8s.io/v1 |
url根据实际情况填写
caBundle的值从集群config里取即可。路径:.clusters.cluster.certificate-authority-data
其他webhook的规则、namespaceSelector根据实际情况修改
测试
- 根据上一步中设置的namespaceSelector规则,给待测试的namespace打上标签,我这里用的是default测试,执行命令打上标签
kubectl label ns default my-webhook=true- 在测试命名空间创建一个deployment,然后获取该deployment下的pod实例,即可查看到annotation里加上了webhook里打的patch内容
全文完。