Kubernetes 使用 Admission 征求和过滤请求

Kubernetes 是一种流行的容器编排和管理平台,能够将 Docker 容器自动托管到大规模集群中。在使用 Kubernetes 进行容器管理时,我们常常需要对容器进行必要的配置和安全检查。本文将介绍 Kubernetes 的 Admission 控制器,它是 Kubernetes 的一项重要功能,可以帮助用户对容器进行各种配置和安全检查的处理。

Admission 控制器

Admission 控制器是 Kubernetes 中的一种插件,可以在数据进行持久化之前,对请求进行验证、修改或拒绝。默认情况下,Kubernetes 提供了以下四种 Admission 控制器:

  • NamespaceLifecycle:控制 Namespace 的创建和删除,确保只有允许的 Namespace 才能被使用。
  • LimitRanger:限制资源使用,确保 Pod 不会使用超出其批准资源的量。
  • ServiceAccount:确保每个 Pod 都有一个适当的 ServiceAccount 权限。
  • MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook:它们是 Kubernetes 的新特性,允许用户编写自己的 Admission 控制器,在 Kubernetes 的创建和更新时进行各种验证和修改操作。

征求和过滤请求

在上述 Admission 控制器中,MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 是 Kubernetes 的最新特性,可以帮助我们更好地控制容器。这两个 Admission 控制器的区别在于:

  • MutatingAdmissionWebhook:在对象写入 Kubernetes 之前 Cordoned 和 Initialized,允许用户在写入之前将请求数据进行修改。
  • ValidatingAdmissionWebhook:在持久化之前对请求进行验证,如果请求不符合用户设置的规则,则不允许标准化。这一过程是只读的。

这两个 Admission 控制器可以通过相应的 Pod 来实现。例如,如果我们需要对容器使用的内存和 CPU 进行强制限制,我们可以编写一个 Admission 控制器。该控制器的作用是,当一个 Pod 创建时,它将调用这个 Admission 控制器,从而强制为 Pod 设置内存和 CPU 的限制。

下面是一个简单的 Admission 控制器示例:

----------- ------------------------------------
----- ----------------------------
---------
  ----- -----------------
---------
  - ----- ----------------------------
    ------
      - ----------
          - --
        ------------
          - --
        -----------
          - ------
        ----------
          - ----
    -------------
      ---- -------------------------------------------
      --------- ------ -- --------
    ------------------------ ----------- -----
    ------------ ----

在这个示例中,我们定义了一个名为“pod-limit-mutator”的 Admission 控制器,该控制器仅对 Pod 对象进行修改。当一个 Pod 对象被创建时,它会被调用,这意味着在创建 Pod 对象之前,我们可以对 Pod 对象进行验证和修改。具体来说,我们可以与 Kubernetes 通信,强制在 Pod 对象中添加一个资源限制,例如:

-
  ------------- -----
  ------- ------
  ----------- -
    ------- --------
    ------------ -------------
  --
  ------- -
    ------------- -
      -
        ------- --------------
        -------- ----------
        ------------ -
          ----------- -
            --------- --------
            ------ ------
          --
          --------- -
            --------- --------
            ------ ------
          -
        -
      -
    -
  -
-

该 Admission 控制器对请求进行了处理,强制为 Pod 中的容器设置的内存和 CPU 限制。这可以确保所运行的容器不会超出集群中分配的资源量。

总结

通过使用 Kubernetes 的 Admission 控制器,我们可以轻松地创建和使用容器,同时保证其配置和安全性。在使用 Admission 控制器处理容器设置和限制时,我们需要根据自己的需求和具体的场景进行配置和修改。希望这篇文章对初学者有所帮助,可以进一步学习 Kubernetes Admission 控制器的使用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64e47cdaf6b2d6eab3fef53f


猜你喜欢

  • Fastify 如何处理多层嵌套的路由问题

    在构建现代 Web 应用程序时,路由是不可或缺的概念。通常,我们需要将路由层次化以使代码更整洁和易于维护。然而,在某些情况下,我们可能需要多层嵌套的路由来表示复杂的功能和规则。

    1 年前
  • LESS 应用:如何为基于 Bootstrap 的网站添加特定样式

    LESS 是一种动态样式语言,可以帮助开发人员更方便地编写 CSS 样式表。在前端领域中,为了提高样式表的可维护性和可扩展性,越来越多的开发人员开始使用 LESS。

    1 年前
  • Mongoose 中使用数组的处理方法

    Mongoose 中使用数组的处理方法 Mongoose 是一款用于 Node.js 的 MongoDB 模块,它提供了一些非常强大的工具和功能,使得我们能够轻松地使用 MongoDB 数据库。

    1 年前
  • SSE 如何实现传输的压缩及解压缩

    前言 SSE(服务器发送事件)是一种用于客户端与服务器之间实现长连接的技术,主要用于实时数据推送等场景。在数据传输过程中,为了提高传输效率以及网络带宽的利用率,常常需要对数据进行压缩以及解压缩处理。

    1 年前
  • 解决 Serverless 框架中跨域问题的方法

    在使用 Serverless 框架部署前端应用时,如果遇到服务调用失败的问题,常常会被跨域问题所困扰。本文将介绍如何解决 Serverless 框架中因跨域问题导致服务调用失败的方法。

    1 年前
  • ES11 新特性:Nullish 合并运算符的实际应用

    ES11 新特性:Nullish 合并运算符的实际应用 在前端开发中,经常会遇到需要判断值是否为 null 或 undefined 的情况。在 ES10 中,我们通常会用 || 运算符来处理这个问题,...

    1 年前
  • Flexbox 布局下如何解决元素宽度百分比计算错误问题

    在使用 Flexbox 布局时,经常会遇到元素宽度计算错误的问题。这是因为 Flexbox 布局与传统的盒模型布局有所不同,涉及到了元素的计算方式以及盒模型的特性等问题。

    1 年前
  • 深入剖析 es6 中的 Promise

    深入剖析 ES6 中的 Promise 在 Web 前端开发中,我们经常会涉及到异步请求的操作,如何优雅地处理这些异步操作一直是前端开发者们不断探索的领域。而 Promise 就是 ES6 为解决异步...

    1 年前
  • 解决 PWA 检测更新策略的 bug

    最近,我们在开发 Progressive Web App(PWA)时遇到了一个问题:即使我们在 Service Worker 中实现了检测并提示用户更新的逻辑,但一些用户仍然没有成功更新到最新版本。

    1 年前
  • RxJS 实现行为数据的采集与分析

    RxJS 实现行为数据的采集与分析 随着互联网技术的不断发展,行为数据的采集和分析成为了越来越重要的一项工作。前端开发人员可以利用 RxJS 技术来实现这一目标。本文将详细介绍 RxJS 的使用方法,...

    1 年前
  • React 普及篇:为什么 React 比 jQuery 更优秀

    在前端开发中,jQuery 可以说是一个经典的库。它为我们提供了便捷的 DOM 操作、动画效果等功能。但是随着前端技术的不断发展,开发人员们也逐渐发现 jQuery 的局限性,于是出现了一些新的技术,...

    1 年前
  • Deno 中如何进行调试和性能测试

    前言 Deno 是一款现代化的 JavaScript / TypeScript 运行时,它内置了丰富的功能和工具链,为前端/后端开发者提供了更加便捷的开发体验。本文着重介绍 Deno 中的两个重要功能...

    1 年前
  • 如何使用 Socket.io 实现实时通信

    实时通信已经成为了现代 Web 应用程序中必不可少的一部分,同时也是许多项目中挑战之一。幸运的是, Socket.io 作为一个功能强大的库,能够简化实现实时通信的过程,不仅提供了实时通信的API,还...

    1 年前
  • Custom Elements:如何为自定义元素添加鼠标事件?

    随着 Web 技术的快速发展,越来越多的开发者从传统的后端开发逐渐转向了前端领域。而自定义元素(Custom Elements)作为 Web Components 的核心概念之一,成为前端开发者的重要...

    1 年前
  • Webpack 中使用 Babel 遇到的一些问题及解决方法

    在现代前端开发中,使用 ECMAScript2015+ 的语法已经成为了标配。但是,由于浏览器兼容性的问题,我们需要使用 Babel 将 ES6+ 代码转换成 ES5 的语法。

    1 年前
  • 在 Hapi 框架中使用 PM2 实现进程管理和集群

    随着互联网技术的不断进步,前端开发也变得越来越重要。而在前端开发中,我们需要掌握一些关键技术和工具,这不仅可以提高我们工作效率,还可以让我们更好地完成编程任务。其中,Hapi 框架和 PM2 是前端开...

    1 年前
  • 如何在 Headless CMS 中集成动态内容

    如何在 Headless CMS 中集成动态内容 随着互联网技术的不断发展,Headless CMS 作为一种新型的内容管理系统,越来越受到前端开发人员的青睐。Headless CMS 将前后端的完全...

    1 年前
  • ECMAScript 2018:新增 Object.fromEntries()

    前言 ECMAScript 2018 是 JavaScript 标准的最新版本,本文主要介绍其中新增的 Object.fromEntries() 方法。 Object.fromEntries() 简介...

    1 年前
  • ES10 中的 String.padStart() 和 String.padEnd() 方法使用技巧

    在 ES10 中,新增了 String 的两个方法,即 padStart() 和 padEnd() 方法。这两个方法可以用来填充字符串,以满足某些特定的需求。本文将详细介绍这两个方法的使用技巧,帮助读...

    1 年前
  • 如何使用 Sequelize 实现数据表间的关联关系

    如何使用 Sequelize 实现数据表间的关联关系 在 Web 开发中,数据库是非常重要的一环。当我们需要在应用中使用多个数据表时,涉及到表间关联关系的问题。Sequelize 是一种 Node.j...

    1 年前

相关推荐

    暂无文章