手把手教你在容器服务 TKE 中使用动态准入控制器 (2)

下面将使用 ValidatingWebhookConfiguration 资源在 TKE 中实现一个动态准入 Webhook 调用示例,本示例代码可在 示例代码 中获取(为了确保可访问性,示例代码 Fork 自 原代码库,作者实现了一个简单的动态准入 Webhook 请求和响应的接口,具体接口格式请参考 。为了方便,我将使用它作为我们的 Webhook 服务端代码。

准备 caBundle 内容

若颁发证书方法是方案一, 使用 base64 编码 ca.crt 生成 caBundle 字段内容:

cat ca.crt | base64 --wrap=0

若颁发证书方法是方案二,集群的根证书即为 caBundle 字段内容,可以通过 TKE 集群控制台【基本信息】-> 【集群APIServer信息】Kubeconfig 内容中的clusters.cluster[].certificate-authority-data 字段获取,该字段已经 base64 编码过了,无需再做处理。

复制生成的 ca.crt (颁发机构证书),server.crt(HTTPS 证书)), server.key(HTTPS 密钥) 到项目主目录:

img

修改项目中的 Dockerfile ,添加三个证书文件到容器工作目录:

img

然后使用 docker 命令构建 Webhook 服务端镜像:

docker build -t webserver .

部署一个域名为 "weserver.default.svc" 的 Webhook 后端服务,修改适配后的 controller.yaml 如下:

img

注册创建类型为 ValidatingWebhookConfiguration 的资源,本示例配置的 Webhook 触发规则是当创建 pods类型,API 版本 "v1" 时触发调用,clientConfig 配置对应上述在集群中创建的的 Webhook 后端服务, caBundle 字段内容为证书颁发方法一获取的ca.crt 内容,修改适配项目中的 admission.yaml 文件如下图:

img

注册好后创建一个 Pod 类型, API 版本为 "v1" 的测试资源如下:

img

测试代码有打印请求日志, 查看 Webhook 服务端日志可以看到动态准入控制器触发了 webhook 调用,如下图:

img

此时查看创建的测试pod 是成功创建的,是因为测试 Webhook 服务端代码写死的 allowed: true,所以是可以创建成功的,如下图:

img

为了进一步验证,我们把 "allowed" 改成 "false" ,然后重复上述步骤重新打 Webserver 服务端镜像,并重新部署 controller.yaml 和 admission.yaml 资源,当再次尝试创建 "pods" 资源时请求被动态准入拦截,说明配置的动态准入策略是生效的,如下图所示:

img

总结

本文主要介绍了动态准入控制器 Webhook 的概念和作用、如何在 TKE 集群中签发动态准入控制器所需的证书,并使用简单示例演示如何配置和使用动态准入 Webhook 功能。

参考

Kubernetes Dynamic Admission Control by Example

Dynamic Admission Control(官网)

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

手把手教你在容器服务 TKE 中使用动态准入控制器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsffwx.html