Kubernetes控制平面組件:API Server Webhook 授權機制 詳解

云原生學習路線導航頁(持續更新中)

  • kubernetes學習系列快捷鏈接
    • Kubernetes架構原則和對象設計(一)
    • Kubernetes架構原則和對象設計(二)
    • Kubernetes架構原則和對象設計(三)
    • Kubernetes控制平面組件:etcd(一)
    • Kubernetes控制平面組件:etcd(二)
    • Kubernetes控制平面組件:etcd常用配置參數
    • Kubernetes控制平面組件:etcd高可用集群搭建
    • Kubernetes控制平面組件:etcd高可用解決方案
    • Kubernetes控制平面組件:Kubernetes如何使用etcd
    • Kubernetes控制平面組件:API Server詳解(一)
    • Kubernetes控制平面組件:APIServer 基于 X509 證書的認證機制
    • Kubernetes控制平面組件:APIServer 基于 靜態Token 的認證機制
    • Kubernetes控制平面組件:APIServer 基于 引導Token 的認證機制
    • Kubernetes控制平面組件:APIServer 基于 ServiceAccount 的認證機制
    • Kubernetes控制平面組件:APIServer 基于 OpenID 的認證機制詳解
    • Kubernetes控制平面組件:APIServer 基于 Webhook Toeken令牌 的認證機制詳解
    • Kubernetes控制平面組件:APIServer 基于匿名請求的認證機制詳解
    • kubectl 和 kubeconfig 基本原理
    • kubeadm 升級 k8s集群 1.17到1.20
    • Kubernetes常見問題解答
    • 查看云機器的一些常用配置

本文主要對kubernetes的控制面組件API Server 授權機制中的 Webhook 授權機制進行詳細介紹,涵蓋Webhook機制基礎概念、設計理念、實現原理、授權流程、參數配置等

  • 希望大家多多 點贊 關注 評論 收藏,作者會更有動力編寫技術文章

1.基礎概念

1.1.Webhook 機制定義

  • Webhook 是 Kubernetes 的擴展機制之一,允許將授權決策委托給外部 HTTP 服務。
  • 當 API Server 收到資源操作請求時,會將請求轉發至預先配置的外部 Webhook 服務進行權限驗證,并根據其返回結果決定是否允許該操作。

1.2.核心設計理念

  • 解耦性:將授權邏輯從 Kubernetes 核心組件中剝離,通過外部服務實現靈活的策略管理。
  • 動態策略:無需重啟 API Server 即可動態更新授權規則,適應快速變化的業務需求。
  • 多租戶支持:結合企業級身份認證系統(如 LDAP、OAuth)實現細粒度權限控制。

1.3.與 RBAC 的區別

  • RBAC:基于角色和靜態策略,適用于固定權限模型。
  • Webhook:支持動態、外部化策略,適用于復雜場景(如跨系統鑒權、自定義規則)。

1.4.Webhook認證 與 Webhook授權 異同辨析

  • 相同點:
    • 設計理念相同。認證/授權 均有Webhook的擴展機制,都是允許將當前請求發送到第三方服務進行認證/授權,apiserver 根據返回結果決定是否通過 認證/授權
    • 使用方式類似。都是使用kubeconfig格式指定第三方服務的url、cert等信息,供apiserver與之交互使用
  • 不同點:
    • apiserver配置文件參數不同。在apiserver的參數中需要指定第三方服務的配置文件,認證參數:--authentication-token-webhook-config-file,授權參數:--authorization-webhook-config-file
    • 調用時機不同。在API Server處理鏈路中,認證在前,授權在后。

1.5.API Server啟用webhook授權機制

在這里插入圖片描述

  • --authorization-mode=Webhook
  • 使用 Webhook 授權機制需顯式啟用 authorization.k8s.io/v1beta1 API 擴展組:--runtime-config=authorization.k8s.io/v1beta1=true

2.實現原理

2.1 核心組件交互

  • API Server:作為請求入口,負責接收客戶端請求,在合適時機將請求封裝為 SubjectAccessReview 結構轉發至 Webhook
  • Webhook 服務:webhook服務,接收apiserver的 SubjectAccessReview 對象,可以自行處理授權,也可以作為代理調用第三方授權服務,將返回結果封裝后將alloweddenied 返回給apiserver。
  • 第三方授權服務:獨立的第三方授權服務,一般為企業獨立的授權模塊,可以通過webhook代理插入apiserver。

如果 第三方授權服務 本身就可以處理 SubjectAccessReview 請求,那也可以省略中間的webhook代理服務

2.2 請求處理流程

  1. 請求接收:客戶端發起 API 請求(如 kubectl create)。
  2. 認證與預檢:完成 TLS 握手和身份認證(如 ServiceAccount Token)。
  3. Webhook 匹配:根據資源配置(rules)判斷是否觸發 Webhook。
  4. 請求轉發:API Server 將請求封裝為 SubjectAccessReview JSON 對象,通過 HTTPS 發送至 Webhook 代理服務。
  5. 策略決策:Webhook 解析請求屬性(用戶、資源、操作),執行自定義邏輯(如調用外部權限系統)。
  6. 響應處理:返回 allowed: true/false,若拒絕需附帶原因(reason)。

3.參數配置

可以直接看官方文檔:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/webhook/

3.1.配置文件格式

  • Webhook 模式需要一個 HTTP 配置文件,通過 --authorization-webhook-config-file=SOME_FILENAME 的參數聲明。
  • 配置文件的格式使用 kubeconfig。 在該文件中,“users” 代表著 API 服務器的 Webhook,而 “cluster” 代表著遠程服務。
  • 使用 HTTPS 客戶端認證的配置例子:
# Kubernetes API 版本
apiVersion: v1
# API 對象種類
kind: Config
# clusters 代表遠程服務
clusters:- name: name-of-remote-authz-servicecluster:# 對遠程服務進行身份認證的 CAcertificate-authority: /path/to/ca.pem# 遠程服務的查詢 URL。必須使用 'https'。不可以包含參數。server: https://authz.example.com/authorize# users 代表 API 服務器的 webhook 配置
users:- name: name-of-api-serveruser:client-certificate: /path/to/cert.pem # 要使用的 webhook 插件的證書client-key: /path/to/key.pem          # 與證書匹配的密鑰# kubeconfig 文件必須有 context。需要提供一個給 API 服務器。
current-context: webhook
contexts:
- context:cluster: name-of-remote-authz-serviceuser: name-of-api-servername: webhook

3.2.請求載荷

  • 在做認證決策時,API 服務器會 POST 一個 JSON 序列化的 authorization.k8s.io/v1beta1 SubjectAccessReview 對象來描述這個動作。
  • 這個對象包含了描述用戶請求的字段,同時也包含了需要被訪問資源或請求特征的具體信息。
// 請求SubjectAccessReview:資源類
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","spec": {"resourceAttributes": {"namespace": "kittensandponies","verb": "get","group": "unicorn.example.org","resource": "pods"},"user": "jane","group": ["group1","group2"]}
}// 請求SubjectAccessReview:非資源類
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","spec": {"nonResourceAttributes": {"path": "/debug","verb": "get"},"user": "jane","group": ["group1","group2"]}
}

3.3.請求響應

// 響應:通過授權
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","status": {"allowed": true}
}// 響應:未通過授權,但未顯式拒絕,如果還有其他授權服務,會繼續調用
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","status": {"allowed": false,"reason": "user does not have read access to the namespace"}
}// 響應:未通過授權,并且顯式拒絕,如果還有其他授權服務,不會再繼續調用
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","status": {"allowed": false,"denied": true,"reason": "user does not have read access to the namespace"}
}

4.實操案例

  • 可以參考 Kubernetes控制平面組件:APIServer 基于 Webhook Toeken令牌 的認證機制詳解 中的實操案例,認證和授權的webhook使用方式基本一致,僅僅是apiserver的配置文件參數不同而已

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77098.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python自動化辦公

第五篇:Python自動化辦公:10行代碼搞定重復性工作 適合讀者:職場人士、數據分析師 | 閱讀時長:12分鐘 引言 每天重復處理Excel、PDF或郵件?Python可以幫你自動化這些枯燥任務,節省90%的時間。本文通過實際…

【3】k8s集群管理系列--包應用管理器helm之chart資源打包并推送到harbor鏡像倉庫

一、chart資源打包 helm package ./web-chart # 當前目錄會生成一個tgz的壓縮文件二、安裝help push插件(用于推送前面打包的文件,到鏡像倉庫) .1 下載help-push二進制文件 wget https://github.com/chartmuseum/helm-push/releases/down…

【SpringBoot Druid Mysql多數據源整合】

SpringBoot Druid Mysql多數據源整合 一、背景二、配置結果2.1 SpringBoot java 類配置2.1.1 啟動類配置2.1.2 java Config配置 2.2 SpringBoot yml 配置 三、mybatis插件配置3.1 PageHelper的yml配置3.2 mybatis設置自定義字段默認值 四、配置解釋 一、背景 公司項目需要連接另…

GGML源碼逐行調試(中)

目錄 前言1. 簡述2. 加載模型超參數3. 加載詞匯表4. 初始化計算上下文5. 初始化計算后端6. 創建模型張量7. 分配緩沖區8. 加載模型權重結語下載鏈接參考 前言 學習 UP 主 比飛鳥貴重的多_HKL 的 GGML源碼逐行調試 視頻,記錄下個人學習筆記,僅供自己參考&…

kubectl的使用

查看集群有多少節點 kubectl get nodes 獲取集群狀態的摘要信息(組件信息) kubectl get cs 查看所有命名空間下的所有pod的狀態和信息 kubectl get pods --all-namespaces 查看所有命名空間的狀態和信息 kubectl get namespaces /ns 查看kube-system…

git在分支上會退到某個指定的commit

1、在idea上先備份好分支(基于現有分支new branch) 2、在gitlab管理端刪除現有分支 3、在idea中大卡terminal,執行 git log 查看commit log ,找到要會退到的commit唯一碼,然后執行git reset 唯一碼 4、查看本地代碼狀態 git st…

動態路由, RIP路由協議,RIPv1,RIPv2

動態路由 1、回顧 路由:從源主機到目標主機的過程 源主機發送數據給目標主機,源主機會查看自身的路由信息 如果目標主機是自己同網段,源主機查看的是直連路由 如果目標主機和自己不同網段,源主機查看的是靜態路由、動態路由、默…

前端面試-工程化(webpack、vite)

Webpack 相關問題(25道) Webpack 的核心概念有哪些?(Entry、Output、Loader、Plugin、Module、Bundle)如何配置 Webpack 的多入口和多出口?Webpack 的 Tree Shaking 實現原理是什么?Loader 和 …

idea 2024 build菜單不見了

Q如題 idea 2024 新版UI添加build和recompile菜單 A如圖,右鍵頂部欄之后,點擊Add to Main Toolbar菜單,在里面就能找到Build菜單,添加接口。 Recompile菜單的話在Customize Toolbar中搜索添加才行。

【開源項目】Excel手撕AI算法深入理解(三):時序(RNN、mamba)

項目源碼地址:https://github.com/ImagineAILab/ai-by-hand-excel.git 一、RNN 1. RNN 的核心思想 RNN 的設計初衷是處理序列數據(如時間序列、文本、語音),其核心特點是: 隱藏狀態(Hidden State&#xff…

pycharm已有python3.7,如何新增Run Configurations中的Python interpreter為python 3.9

在 PyCharm 中,如果你已經安裝了 Python 3.9,并且希望在 Run Configurations 中新增一個 Python 3.9 的解釋器,可以按照以下步驟操作: 步驟 1:打開 PyCharm 設置 點擊 PyCharm 左上角的 File 菜單。選擇 Settings&am…

【H橋電機驅動電路原理】-學習筆記

工作原理 電路分析 這是一個由晶體管構成的 H 橋電機驅動電路 ,以下是對其各部分的介紹: 核心器件 晶體管:電路中使用了 PNP 型的 SS8550(Q5、Q6 )和 NPN 型的 SS8050(Q9、Q10、Q13、Q14 )。…

【家政平臺開發(49)】解鎖家政平臺上線密碼:服務器選型與配置全攻略

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

驅動開發硬核特訓 · Day 10 (理論上篇):設備模型 ≈ 運行時的適配器機制

🔍 B站相應的視屏教程: 📌 內核:博文視頻 - 總線驅動模型實戰全解析 敬請關注,記得標為原始粉絲。 在 Linux 驅動開發中,設備模型(Device Model)是理解驅動架構的核心。而從軟件工程…

arm_math.h、arm_const_structs.h 和 arm_common_tables.h

在 ??FOC(Field-Oriented Control,磁場定向控制)?? 中,arm_math.h、arm_const_structs.h 和 arm_common_tables.h 是 CMSIS-DSP 庫的核心組件,用于實現高效的數學運算、預定義結構和查表操作。以下是它們在 FOC 控…

Android: gradient 使用

在 Android 中使用 gradient(漸變) 通常是通過 drawable 文件來設置背景。下面是可以直接用的幾種用法匯總,包括線性漸變、徑向漸變、掃描漸變(sweep)等: ? 1. Linear Gradient(線性漸變&#…

打造AI應用基礎設施:Milvus向量數據庫部署與運維

目錄 打造AI應用基礎設施:Milvus向量數據庫部署與運維1. Milvus介紹1.1 什么是向量數據庫?1.2 Milvus主要特點 2. Milvus部署方案對比2.1 Milvus Lite2.2 Milvus Standalone2.3 Milvus Distributed2.4 部署方案對比表 3. Milvus部署操作命令實戰3.1 Milv…

AI Agent 在醫療健康領域的深度應用剖析

引言 隨著人工智能技術的迅猛發展,AI Agent 在醫療健康領域展現出了巨大的應用潛力。它猶如一位智能助手,憑借其強大的數據處理和分析能力,滲透到醫療健康的各個環節,從疾病診斷、治療方案制定到患者康復監控,都發揮著…

樹莓派超全系列教程文檔--(28)boot文件夾內容

boot文件夾內容 boot 文件夾內容bootcode.binstart*.elffixup*.datcmdline.txtconfig.txtissue.txtinitramfs*ssh 或 ssh.txt設備樹blob文件 ( *.dtb )內核文件 ( *.img )overlays 文件夾 文章來源: http://raspberry.dns8844.cn/documentation 原文網址 boot 文件…

SvelteKit 最新中文文檔教程(20)—— 最佳實踐之性能

前言 Svelte,一個語法簡潔、入門容易,面向未來的前端框架。 從 Svelte 誕生之初,就備受開發者的喜愛,根據統計,從 2019 年到 2024 年,連續 6 年一直是開發者最感興趣的前端框架 No.1: Svelte …