通过Admission Webhook限制Namespace下Nodeport Service的端口范围

news/2024/9/25 15:26:03/

背景

要给每个namspce分配Nodeport 端口范围, 不允许使用范围之外的端口. 实现对平台 nodeport 端口的统一管理

方案

Kubernetes本身不支持直接限制NodePort的范围。可以通过创建一个Admission Webhook来拦截Service创建请求,并在其端口字段中进行检查和限制。

以下是创建Admission Webhook的大致步骤:

创建一个Admission Webhook的服务。

实现一个Admission Controller,用于检查Service创建请求。

配置MutatingWebhookConfiguration和ValidatingWebhookConfiguration,以使Admission Controller能够拦截Service创建事件。

以下是一个简化的Admission Controller的示例代码,用于检查Service的NodePort范围:

import ("net/http""github.com/gin-gonic/gin"admissionv1 "k8s.io/api/admission/v1"corev1 "k8s.io/api/core/v1"
)func ServiceWebhook(c *gin.Context) {var admissionResponse = admissionv1.AdmissionResponse{}var admissionRequest admissionv1.AdmissionRequest// 解析请求体if err := c.ShouldBindJSON(&admissionRequest); err != nil {// 处理错误}// 确保是创建Service的请求if admissionRequest.Resource.Resource == "services" && admissionRequest.Operation == admissionv1.Create {// 反序列化Service对象var service corev1.Serviceif err := json.Unmarshal(admissionRequest.Object.Raw, &service); err != nil {// 处理错误}// 检查NodePort范围if service.Spec.Type == corev1.ServiceTypeNodePort {for _, p := range service.Spec.Ports {if p.NodePort < 30000 || p.NodePort > 32767 {admissionResponse.Allowed = falseadmissionResponse.Result = &metav1.Status{Message: "NodePort port out of range. Must be between 30000-32767",}break}}}}// 返回响应c.JSON(http.StatusOK, admissionResponse)
}

在这个示例中,我们定义了一个Webhook,它在Service创建时检查NodePort的值。如果NodePort的值不在30000到32767的范围内,Webhook将拒绝该请求。

注意还需要配置MutatingWebhookConfiguration和ValidatingWebhookConfiguration。


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

相关文章

有了这几个工具,企业内部知识库原来搭建这么轻松

随着信息量的爆炸性增长&#xff0c;企业竞争愈发依赖于信息和知识的快速获取与妥善管理。一个高效、易用的内部知识库不仅能加强内部沟通&#xff0c;还能提升员工的工作效率、保证知识的传承与创新。以下是三款适合企业搭建内部知识库的工具&#xff0c;它们各有千秋&#xf…

WINFORM画笔实现画板(如何实现橡皮擦和清空画板功能)

C#内部并没有提供橡皮擦功能所以&#xff0c;只能使用画笔和颜色填充来实现橡皮擦和清空画板功能。 此次小编写了一个简易的画板功能其中包含橡皮擦&#xff0c;清空面板&#xff0c;在窗体运行中修改画笔颜色和像素等功能。 代码如下: using Sunny.UI; using Sunny.UI.Win32…

多种方法完美解决 java.lang.IllegalStateException: Duplicate key 2

文章目录 1. 复现错误2. 分析错误3. 解决问题3.1 方法13.2 方法21. 复现错误 在实际工作中,经常遇到java.lang.IllegalStateException: Duplicate key xxx这样的错误,如下示例代码: @Setter @Getter @Accessors(chain = true) public class

富格林:看破虚假交易警惕受害亏空

富格林悉知&#xff0c;黄金投资不仅具有强大的保值功能&#xff0c;其剧烈的市场变化也隐含着巨大的盈利潜力&#xff0c;吸引着众多投资者入市。但投资有风险&#xff0c;黄金投资也是如此&#xff0c;在做投资的之前要注意了解其风险&#xff0c;在做单过程中做好风险控制警…

Arcgis 定义投影、投影变换、导出栅格为tif

目录 一、Arcgis 定义投影 1、定义投影 2、设置平移 二、投影变换 1、栅格数据的投影变换 2、矢量数据的投影变换

IO-序列化流

简介 这个流是为了传输对象而生的对象序列化&#xff1a;把java对象写入到文件中对象反序列化&#xff1a;把文件中的对象读出来 继承体系 ObjectInputStream:把文件中的对象读出来ObjectOutputStream:把java对象写入到文件中 常用API 示例 实体类必须实现序列化接口这其实就是…

设计模式代码实战-中间者模式

1、问题描述 小明正在设计一个简单的多人聊天室系统&#xff0c;有多个用户和一个聊天室中介者&#xff0c;用户通过中介者进行聊天&#xff0c;请你帮他完成这个系统的设计。 输入示例 3 User1 User2 User3 User1 Hello_All! User2 Hi_User1! User3 How_is_everyone? 输出…

冒泡排序c++

题目描述 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 输入 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 输出 由大到小的n个非负整数&#xff0c;每个数占一行。 样例输入 …