详情页标题前

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

详情页1

操作场景

动态准入控制器 Webhook 在访问鉴权的过程中可以更改请求对象或完全拒绝该请求,其调用 Webhook 服务的方式使其独立于集群组件。动态准入控制器具有很大的灵活性,可便捷地进行众多自定义准入控制。下图为动态准入控制在 API 请求调用链的位置,如需了解更多信息,请前往 Kubernetes 官网。

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技


由图可知,动态准入控制分为执行及验证两个阶段。首先执行 Mutating 阶段,该阶段可对到达请求进行修改,然后执行 Validating 阶段来验证到达的请求是否被允许,两个阶段可单独或组合使用。 本文将在容器服务 TKE 中实现一个简单的动态准入控制调用示例,您可结合实际需求参考本文进行操作。

操作步骤

查看及验证插件

TKE 现有集群版本(1.10.5及以上)已默认开启了 validating admission webhook 和 mutating admission webhook API。若您的集群版本低于 1.10.5,则可执行以下命令验证当前集群是否开启插件。

kube-apiserver -h | grep enable-admission-plugins

返回结果如已包含 MutatingAdmissionWebhookValidatingAdmissionWebhook,则说明当前集群已开启动态准入控制器插件。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技



签发证书

为确保动态准入控制器调用可信任的 Webhook 服务端,须通过 HTTPS 调用 Webhook 服务(TLS 认证),则需为 Webhook 服务端颁发证书,并且在注册动态准入控制 Webhook 时为 caBundle 字段( ValidatingWebhookConfigurationMutatingAdmissionWebhook 资源清单中的 caBundle 字段)绑定受信任的颁发机构证书(CA)来核验 Webhook 服务端的证书是否可信任。本文介绍了 制作自签证书 及 使用 K8S CSR API 签发证书 两种推荐的颁发证书方法。 注意ValidatingWebhookConfigurationMutatingAdmissionWebhook 使用 clientConfig.service 配置时(Webhook 服务在集群内),为服务器端颁发的证书域名必须为 ..svc

方法1:制作自签证书

制作自签证书的方法不依赖于 K8S 集群,比较独立,类似于为网站制作自签证书。目前有很多工具可制作自签证书,本文以使用 Openssl 为例。具体步骤如下:1. 执行以下命令,生成密钥位数为2048的 ca.key

openssl genrsa -out ca.key 2048

2. 执行以下命令,依据 ca.key 生成 ca.crt。”webserver.default.svc” 为 Webhook 服务端在集群中的域名,-days 参数用于设置证书有效时间。

openssl req -x509 -new -nodes -key ca.key -subj "/CN=webserver.default.svc" -days 10000 -out ca.crt

3. 执行以下命令,生成密钥位数为2048的 server.key

openssl genrsa -out server.key 2048

4. 创建用于生成证书签名请求(CSR)的配置文件 csr.conf。示例如下:

[ req ]default_bits = 2048prompt = nodefault_md = sha256distinguished_name = dn
[ dn ]C = cnST = shaanxiL = xi'anO = defaultOU = webseverCN = webserver.default.svc
subjectAltName = @alt_names
[ alt_names ]DNS.1 = webserver.default.svc
[ v3_ext ]authorityKeyIdentifier=keyid,issuer:alwaysbasicConstraints=CA:FALSEkeyUsage=keyEncipherment,dataEnciphermentextendedKeyUsage=serverAuth,clientAuthsubjectAltName=@alt_names

5. 执行以下命令,基于配置文件 csr.conf 生成证书签名请求。

openssl req -new -key server.key -out server.csr -config csr.conf

6. 执行以下命令,使用 ca.keyca.crtserver.csr 颁发生成服务器证书(x509签名)。

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \ -CAcreateserial -out server.crt -days 10000 \ -extensions v3_ext -extfile csr.conf

7. 执行以下命令,查看 Webhook server 端证书。

openssl x509  -noout -text -in ./server.crt

生成的证书及密钥文件说明如下:ca.crt:为颁发机构证书。 ca.key:为颁发机构证书密钥,用于服务端证书颁发。 server.crt:为颁发的服务端证书。 server.key:为颁发的服务端证书密钥。

方法2:使用 K8S CSR API 签发证书

可使用 K8S 的证书颁发机构系统来下发证书,执行以下脚本可使用 K8S 集群根证书和根密钥签发一个可信任的证书用户。 注意用户名需为 Webhook 服务在集群中的域名。

USERNAME='webserver.default.svc' # 设置需要创建的用户名为 Webhook 服务在集群中的域名# 使用 Openssl 生成自签证书 keyopenssl genrsa -out ${USERNAME}.key 2048# 使用 Openssl 生成自签证书 CSR 文件, CN 代表用户名,O 代表组名openssl req -new -key ${USERNAME}.key -out ${USERNAME}.csr -subj "/CN=${USERNAME}/O=${USERNAME}" # 创建 Kubernetes 证书签名请求(CSR)cat < ${USERNAME}.crt

${USERNAME}.crt:为 Webhook 服务端证书。 ${USERNAME}.key:为 Webhook 服务端证书密钥。

使用示例

本文将使用 ValidatingWebhookConfiguration 资源在 TKE 中实现一个动态准入 Webhook 调用示例。为了确保可访问性,示例代码 Fork 自 原代码库,示例代码实现了一个简单的动态准入 Webhook 请求和响应的接口,具体接口格式请参见 Webhook 请求和响应 。示例代码可在 示例代码 中获取,本文将使用其作为 Webhook 服务端代码。 1. 对应实际使用颁发证书方法,准备 caBundle 内容。若颁发证书使用方法1,则执行以下命令,使用 base64 编码 ca.crt 生成 caBundle 字段内容。

cat ca.crt | base64 --wrap=0 

若颁发证书使用方法2,集群的根证书即为 caBundle 字段内容。获取步骤如下:1.1.1 登录容器服务控制台,选择左侧导航栏中的 集群。 1.1.2 在“集群管理”页面,选择集群 ID。 1.1.3 在集群“基本信息”页面,查看“集群APIServer信息”模块的 “Kubeconfig”,并在 Kubeconfig 中的 clusters.cluster[].certificate-authority-data 字段进行获取,该字段已进行 base64 编码,无需处理。2. 复制生成的 ca.crt(颁发机构证书)、server.crt(HTTPS 证书)及 server.key(HTTPS 密钥) 到项目主目录。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

3. 修改项目中的 Dockerfile,添加三个证书文件到容器工作目录。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

4. 执行以下命令,构建 Webhook 服务端镜像。

docker build -t webserver .

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

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

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

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

7. 注册好后创建一个 Pod 类型且 API 版本为 “v1” 的测试资源。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

8. 测试代码已打印请求日志,查看 Webhook 服务端日志即可查看动态准入控制器触发了 webhook 调用。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技

9. 此时查看创建的测试 pod 已成功创建,由于测试 Webhook 服务端代码已具备 allowed: true 配置项,即可创建成功该测试 pod。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技


如需进一步验证,将 “allowed” 改为 “false” 后重复上述步骤重新构建 Webserver 服务端镜像,并重新部署 controller.yamladmission.yaml 资源。当再次尝试创建 pods 资源时请求被动态准入拦截,则说明配置的动态准入策略已生效。如下图所示:

腾讯云容器服务在 TKE 中使用动态准入控制器同尘科技



总结

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

参考资料

Kubernetes Dynamic Admission Control by ExampleDynamic Admission Control
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/148429.html

(0)
上一篇 2023年12月9日 下午12:55
下一篇 2023年12月9日 下午12:56
详情页2

相关推荐

  • 腾讯云Serverless SSR应用场景-云淘

    SSR 项目部署 通过 Serverless 组件,快速部署您的 SSR 项目至云端,实现首页快速加载、SEO 友好等优势。   业务集成 基于 Serverless 完整的产品生态,与 API 网关、Serverless DB 等产品合作,完成完整网页应用项目的部署与开发。   官网1折活动,限时活动,即将结束,速速收藏同尘科技为腾讯云授权服务…

    腾讯云 2023年12月9日
  • 腾讯云轻量应用服务器欠费与停服说明云小二

    欠费停服 轻量应用服务器的实例套餐是预付费计费模式。一般情况下,账号欠费不会影响实例使用,但是如果您的账号和实例同时满足以下条件,对应实例将会进入欠费停服状态,同时会在 轻量应用服务器控制台 中,展示为网络隔离中状态。条件一:账号处于欠费状态。条件二:实例是流量包套餐,且当月流量使用额度已超过套餐内流量包指定额度。注意:次月套餐内流量包重置后,如果账号依然处…

    腾讯云 2023年12月9日
  • 腾讯云对象存储Java 安装与配置

    JDK 是 Java 软件开发工具包,本文以 JDK 1.8 版本为例,分别介绍了在 Windows 和 Linux 系统下, JDK 的安装与环境配置过程。 Windows 1. 下载 JDK 进入 Oracle 官方网站 下载合适的 JDK 版本。 2. 安装 根据提示一步步安装,安装过程中可以自定义安装目录(默认安装到 C 盘),例如我们选择的安装目录…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 负载均衡产品(ALB、CLB、NLB)支持的最大的带宽是多少?-云小二-阿里云

    负载均衡产品(ALB、CLB、NLB)支持的最大的带宽是多少? 以下为热心网友提供的参考意见 负载均衡产品(ALB、CLB、NLB)的带宽限制因地区和实例规格而异。在阿里云上,以下是一些常见负载均衡产品的带宽限制:1.ALB(Application Load Balancer): 标准型:入带宽最大为 100Mbps,出带宽最大为 10Mbps。 增强型:入…

    2024年1月11日
  • 腾讯云容器服务在 TKE 上对 Pod 进行带宽限速同尘科技

    操作场景 腾讯云容器服务 TKE 暂不支持 Pod 限速,但可通过修改 CNI 插件来支持此功能。本文档介绍如何在 TKE 上实现对 Pod 的带宽限速,您可结合实际场景进行操作。 注意事项 腾讯云容器服务 TKE 支持使用社区的 bandwidth 插件对网络进行限速,目前适用于 Global Router 模式和 VPC-CNI 共享网卡模式。 暂不支持…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。