<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Kubernetes on erpan&#39;s note</title>
    <link>https://940504.top/tags/kubernetes/</link>
    <description>Recent content in Kubernetes on erpan&#39;s note</description>
    <image>
      <title>erpan&#39;s note</title>
      <url>https://940504.top/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://940504.top/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.154.5</generator>
    <language>en</language>
    <copyright>浙ICP备2021018236号-1</copyright>
    <lastBuildDate>Tue, 18 Jun 2024 19:25:16 +0800</lastBuildDate>
    <atom:link href="https://940504.top/tags/kubernetes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>实现一个MutatingAdmissionWebhook</title>
      <link>https://940504.top/posts/%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AAmutatingadmissionwebhook/</link>
      <pubDate>Tue, 18 Jun 2024 19:25:16 +0800</pubDate>
      <guid>https://940504.top/posts/%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AAmutatingadmissionwebhook/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/&#34;&gt;官方文档&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;
&lt;p&gt;在 Kubernetes 中，准入控制是保障 API 请求安全和合规性的重要机制。它在 API 请求流程中扮演着关键角色，拦截即将发送到 Kubernetes APIServer的请求，在持久化之前，但在身份验证和授权之后。其位置如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;图片来源https://sysdig.com/blog/kubernetes-admission-controllers/&#34; loading=&#34;lazy&#34; src=&#34;https://940504-1306126584.cos.ap-shanghai.myqcloud.com/940504/posts/k8s-admission-stage.png&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;图片来源https://sysdig.com/blog/kubernetes-admission-controllers/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;准入控制器适用于创建、删除或修改对象的请求，同时也可以阻止自定义动作。读操作会绕过准入控制层，不会受到准入控制器的影响。当有多个准入控制器存在时，它们会依次被调用，只要其中一个准入控制器拒绝请求，整个请求就会被立即驳回。&lt;/p&gt;
&lt;p&gt;准入控制常常被用来自动化设置默认资源请求和限制、应用标签和注释以及强制命名约定等管理任务。&lt;/p&gt;
&lt;p&gt;准入控制分两个阶段：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;变更准入控制器，用于在请求处理过程中对对象进行修改。&lt;/li&gt;
&lt;li&gt;验证准入控制器，负责验证请求是否符合特定规则。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;需要注意的是，部分控制器兼具变更准入和验证准入的功能。&lt;/p&gt;
&lt;p&gt;启用准入&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kube-apiserver --enable-admission-plugins&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;NamespaceLifecycle,LimitRanger ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;关闭准入&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kube-apiserver --disable-admission-plugins&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;PodNodeSelector,AlwaysDeny ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;准入的两种类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;静态准入：由 Kubernetes 内置提供，无需额外配置。&lt;/li&gt;
&lt;li&gt;动态准入：允许用户根据自身需求进行扩展。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;动态准入控制器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#mutatingadmissionwebhook&#34;&gt;MutatingAdmissionWebhook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;此准入控制器调用任何与请求匹配的变更（Mutating） Webhook。匹配的 Webhook 将被顺序调用&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook&#34;&gt;ValidatingAdmissionWebhook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;此准入控制器调用与请求匹配的所有验证性 Webhook。 匹配的 Webhook 将被并行调用。如果其中任何一个拒绝请求，则整个请求将失败。 该准入控制器仅在验证（Validating）阶段运行&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionpolicy&#34;&gt;ValidatingAdmissionPolicy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;验证准入策略使用通用表达语言 (Common Expression Language，CEL) 来声明策略的验证规则，是一种声明式的、进程内的验证准入 Webhook 方案&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/mutating-admission-policy/&#34;&gt;MutatingAdmissionPolicy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;提供了一种声明式的、进程内的方案， 可以用来替代变更性准入 Webhook&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;实现&#34;&gt;实现&lt;/h2&gt;
&lt;p&gt;步骤概览&lt;/p&gt;
&lt;p&gt;实现一个 MutatingAdmissionWebhook 主要包括以下几个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;生成证书，Kubernetes 和 Webhook 服务使用 TLS 加密通信
&lt;ol&gt;
&lt;li&gt;APIServer对Webhook的认证&lt;/li&gt;
&lt;li&gt;Webhook对APIServer的认证（可选）&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;实现一个接口，接收AdmissionReview请求，解析并填充response字段，响应相同版本的AdmissionReview&lt;/li&gt;
&lt;li&gt;部署上面接口，集群内外都可以&lt;/li&gt;
&lt;li&gt;注册准入控制器&lt;/li&gt;
&lt;li&gt;监控 Admission Webhook&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以下面需求为例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>为普通用户授权生成kubeconfig</title>
      <link>https://940504.top/posts/%E4%B8%BA%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83%E7%94%9F%E6%88%90kubeconfig/</link>
      <pubDate>Mon, 09 Nov 2020 16:56:00 +0800</pubDate>
      <guid>https://940504.top/posts/%E4%B8%BA%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83%E7%94%9F%E6%88%90kubeconfig/</guid>
      <description>本文主要说明如何让普通用户通过证书认证授权的方式访问kubernetes集群资源</description>
    </item>
  </channel>
</rss>
