了解Kubernetes三大门神之一Webhook

news/2024/11/16 8:55:45/

在当今的云原生应用开发中,Kubernetes 已经成为了最受欢迎的容器编排平台。然而,随着容器化应用的快速增长,安全性成为了一个不容忽视的问题。为了增强 Kubernetes 集群的安全性,Admission Webhook 应运而生。本文将深入探讨 Admission Webhook,解释它的作用、工作原理以及如何部署和使用它来提高 Kubernetes 集群的安全性。

Admission Webhook是什么

从 Kubernetes v1.7 开始,引入了对外部准入控制器的支持; 它提供了两个选项,用于将自定义业务逻辑添加到 API 服务器,以便在创建对象时修改对象并验证策略。
在这里插入图片描述
当一个请求调用API Service的时候,会依次经过认证、授权和准入控制。Webhook属于准入控制的范畴。
Admission Webhook顾名思义就是一个Http回调函数,接收Request请求,通过MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 两个特殊控制器,修改和验证相关请求内容。

工作原理和步骤

  1. 用户发送一个 Kubernetes 资源创建、更新或删除的请求;
  2. 请求到达 Kubernetes API Server;
  3. 经过认证、授权;
  4. Kubernetes API Server 将请求发送给Mutating Admission Controller 进行处理;
  5. Admission Webhook 对请求进行审查和修改,并返回处理结果给 Admission Controller;
  6. Kubernetes API Server 将请求发送给Validating Admission Controller 进行处理;
  7. Admission Webhook 对请求进行校验,并返回处理结果给 Admission Controller;
  8. Admission Controller 根据 Admission Webhook 的处理结果决定是否允许请求通过。

Admission Webhook 的优势

Admission Webhook 提供了多种优势,有助于增强 Kubernetes 集群的安全性:

  1. 动态审查和修改:Admission Webhook 可以对请求进行动态审查和修改,以确保符合安全策略和最佳实践。
  2. 强制执行策略:通过 Admission Webhook,可以强制执行一致的策略和标准,确保所有资源都符合预期的安全要求。
  3. 防止恶意操作:Admission Webhook 可以拦截恶意请求并阻止它们对 Kubernetes 集群造成安全威胁。
  4. 定制化需求:Admission Webhook 提供了灵活的定制化选项,可以根据特定的业务需求来定义审查规则和处理逻辑。

Admission Webhook如何实现

参考《Kubernetes Operator开发进阶》,做一个简单的实现,启动一个nginx实例,当执行yaml文件时将replicas从1改为3。代码在github的https://github.com/daniel-hutao/Advanced-Kubernetes-Operator中,进入ch7的application-operator/config/apps_v1_application.yaml。

apiVersion: apps.aaa.cn/v1
kind: Application
metadata:name: nginx-samplenamespace: defaultlabels:app: nginx
spec:deployment:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80service:type: NodePortports:- port: 80targetPort: 80nodePort: 30080

通过配置,拦截创建和更新。

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:creationTimestamp: nullname: mutating-webhook-configuration
webhooks:
- admissionReviewVersions:- v1clientConfig:service:name: webhook-servicenamespace: systempath: /mutate-apps-aaa-cn-v1-applicationfailurePolicy: Failname: mapplication.kb.iorules:- apiGroups:- apps.aaa.cnapiVersions:- v1operations:- CREATE- UPDATEresources:- applicationssideEffects: None

具体代码看apis/apps/v1/application_webhook.go

// MutatingAdmissionWebhook的具体实现将Replicas改为3
func (r *Application) Default() {applicationlog.Info("default", "name", r.Name)if r.Spec.Deployment.Replicas == nil {r.Spec.Deployment.Replicas = new(int32)*r.Spec.Deployment.Replicas = 3}
}// ValidatingAdmissionWebhook的实现,Replicas不能超过10个
func (r *Application) validateApplication() error {if *r.Spec.Deployment.Replicas > 10 {return fmt.Errorf("replicas too many error")}return nil
}

环境配置可以参考1分钟了解 Kubernetes王牌Operator,使用Kubebuilder的create webhook命令可以轻松创建一套webhook代码。

总结

Admission Webhook 是提高 Kubernetes 集群安全性的关键组件之一。通过动态审查和修改请求,它可以强制执行安全策略、防止恶意操作,并满足定制化需求。部署 Admission Webhook 需要一些配置和验证步骤,但一旦成功完成,它将为您的 Kubernetes 集群带来更高的安全性和可靠性。

参考:
Kubernetes Sidecar Container Injection
《Kubernetes Operator开发进阶》
如有侵权,请及时与我沟通。


http://www.ppmy.cn/news/735714.html

相关文章

机器视觉初步12:C#入门初步(有代码示例)

文章目录 基础部分概述1. 变量:2. 数据类型:3. 运算符:4. 控制语句:5. 字符串和数组:6. 类型转换:7. 输出和输入:8. 变量命名:9. 函数:10. 枚举值的比较:11. …

笔记本3.0 typec接口插上U盘没有反应

问题描述:该接口用typec转接头连接2.0的U盘,发现电脑可以正常识别,但是直接接上typec 移动硬盘发现识别不了,但是该硬盘的灯是亮的,而且用tool能识别到该U盘已经插入 解决办法:在“计算机管理”中找到“磁…

红米note5手机插u盘没反应_加上扩展坞iPad Pro就能插上翅膀变成生产工具了吗?...

https://www.zhihu.com/video/1064850363076730880 深圳gopod代工,老美卖的风神水起。iPad Pro也有了扩展坞,如果Macbook一样。这个平板电脑越来越像生产工具了。 可以读卡,可以读U盘,可以HDMI。不晓得要不要额外APP支出&#xff…

红米note5手机插u盘没反应_认真分析下:荣耀智慧屏x1和红米x50对比哪个好?用后一个月告诉大家实情...

这二款电视荣耀智慧屏x1和红米x50区别还是有的哈,外观和款式是不一样的,不过家用都是可以的,看个人吧,我自己用的是荣耀智慧屏x1,款式是我喜欢的,多时尚的,整体质感不错的,看上去很大…

安卓手机通过OTG转接头连接U盘(USB口)相关问题解决

起因: 买了个闪迪U盘,是那种Type-C和USB两用的接口。而我的手机是Micro USB接口,所以用赠送的OTG转接头进行连接,想把手机上的一些文件转存到U盘上。 问题现象: 当我将装上转接头的U盘插在手机上时,却没…

u盘插在电脑上没有反应_电脑无法识别U盘或插上U盘提示格式化

不识别U盘有很多种可能情况,原因及解决办法: 1、您的U盘已经损坏了,2、USB接口问题;3、您的电脑USB驱动有问题。你可以试着更新一下驱动;4、电脑问题换一台电脑试试 报错提示如下情况 1、先将要修复的U盘插入电脑USB口,如下图电脑能检测到U盘插入,但可移动储存设备里无法…

玄子Share - mybatis-Plus 3.5.3.1 学习笔记

玄子Share - mybatis-Plus 3.5.3.1 学习笔记 介绍 MyBatis-Plus (opens new window)(简称 MP)是一个 [MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景:…

计算机所有接口都没反应,如何解决Win7系统USB接口没反应的问题

电脑USB接口不能用,没反应是电脑最常见的问题之一了,也是绝大部分人都会出现的问题。但是,最近有使用Win7系统的用户说自己电脑的USB接口没反应不能使用,插入U盘等待半天都没有反应,哪里出现问题呢?U盘插入…