Kubernetes APIServer 幾種基本認證方式

"認證",形象地理解就是"你是誰"。在上文中,用戶A在發起API請求時,管理員如何道該請求是用戶A發起的呢?所以,客戶端在發起API請求時,必須要攜帶一個身份信息來表明"我是誰",Apiserver在收到請求后,需要對這個身份信息進行認證(“不是你說你是誰,你就是誰,而是我核實你是誰,你才是誰”)

在認證與授權中,有兩個重要的概念:用戶(USER)與用戶組(GROUP)。客戶端攜帶的身份憑證,最終會被apiserver認證為USER與GROUP。

接下來,我們介紹幾種常見的認證方式。

X509客戶證書

該認證方式下,客戶端發起請求時需要攜帶一個證書,表明自已的身份。該證書必須是由apiserver的啟動參數--client-ca-file指定的CA所簽發(即能夠被該參數指定的CA證書文件所驗證)。如果apiserver驗證客戶端所攜帶的客戶證書是client-ca-file簽發的,那么認證通過。

[root@k8s-uat-m01 ~]# cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep ca- --client-ca-file=/etc/kubernetes/pki/ca.crt

在客戶證書文件中,會包含域名/CN與組織/O字段,假設客戶證書的CN為jbeta,組織為app1與app2,那么該請求會被認證為User jbeta與Group app1與app2。

根據上面的理論,客戶端在訪問apiserver時,需要一個ca.crt來驗證apiserver的證書(建立https連接),還需要攜帶一個client.crt來表明自已的身份。不過在實際中,客戶端還需要攜帶client.key,猜測應該是雙向HTTPS的原因

靜態Token

apiserver可以通過啟動參數--token-auth-file=/path/to/file來開啟Token認證。該文件的每一行如下:第一個字段為token,第二個為用戶名,第三個為用戶id,后面為組名(可選,如果有多個組,則需要用雙引號引起來)

token,user,uid,"group1,group2"

當客戶端使用該認證方式來發起請求的時候,需在Header參數中添加以下字段

Authorization: Bearer <token>

靜態密碼

apiserver可以通過啟動參數--basic-auth-file=/path/to/file來開啟密碼認證,該文件的每一行如下:第一個字段為密碼,第二個為用戶名,第三個為用戶id,后面為組名(可選,如果有多個組,則需要用雙引號引起來)

password,user,uid,"group1,group2,group3"

當客戶端使用該認證方式來發起請求的時候,需在Header參數中添加以下字段

Authorization: Basic <base64encoded(user:password)>

?

?

準備條件

安裝好一個k8s集群,這里我們使用kubeadm安裝好了一個1.17.0的集群,如下

$ kubectl get node
NAME       STATUS   ROLES    AGE   VERSION
dcos-160   Ready    master   19h   v1.17.0

?

?

X509客戶證書

客戶證書認證方式,自然需要一個客戶端證書。

首先,我們先生成客戶端證書對應的key與csr,(注意:由于kubeadm安裝的集群授權默認為RBAC,所以下面證書的O要設置為system:masters)

在master節點上執行以下命令

$ openssl genrsa -out client.key 1024
$ openssl req -new -nodes -key client.key -out client.csr -subj "/CN=client/O=system:masters"

接著,我們通過以下命令找到apiserver的--client-ca-file文件,發現為/etc/kubernetes/pki/ca.crt,那么在目錄/etc/kubernetes/pki/下還會有一個CA密鑰ca.key

$ ps -ef | grep apiserver
root      24752  24707  8 Jan06 ?        01:43:33 kube-apiserver --advertise-address=10.142.232.160 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kubernetes/pki/ca.crt --enable-admission-plugins=NodeRestriction --enable-bootstrap-token-auth=true --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-cluster-ip-range=10.96.0.0/12 --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key

復制

然后,我們使用ca.key與ca.crt簽署client.csr,得到客戶證書文件client.crt

$ openssl x509 -req -days 3650 -in client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out client.crt

此時,在當前目錄下就會有如下三個文件

$ ls
client.crt  client.csr  client.key

然后,使用客戶端證書訪問apiserver,訪問成功

$ curl -k --key ./client.key --cert ./client.crt https://10.142.232.160:6443/api/v1/nodes
{"kind": "NodeList","apiVersion": "v1","metadata": {"selfLink": "/api/v1/nodes","resourceVersion": "155586"},...

注意,上面的命令在指定client.key與client.crt時一定要寫成相對路徑或絕對路徑,不能寫成以下,否則訪問會報403

$ curl -k --key client.key --cert client.crt https://10.142.232.160

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

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

相關文章

泰勒公式中拉格朗日余項和佩亞諾余項的區別及具體的應用場景案例

泰勒公式是微積分中的一個重要工具&#xff0c;用于將一個函數在某一點附近展開成多項式形式&#xff0c;以便于近似計算和分析。泰勒公式的一般形式為&#xff1a; f ( x ) f ( a ) f ′ ( a ) ( x ? a ) f ′ ′ ( a ) 2 ! ( x ? a ) 2 ? f ( n ) ( a ) n ! ( x ? a…

[CTF]-PWN:House of Cat堆題型綜合解析

原理&#xff1a; 調用順序&#xff1a; exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源碼&#xff1a; off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…

AI繪畫小白必備!Stable Diffusion常用插件合集,好用推薦!(附插件下載)

前言 寶子們&#xff0c;早上好啊~Stable Diffusion 常用插件&#xff0c;月月已經給大家整理好了&#xff0c;自取就好。 擁有這些SD常用插件&#xff0c;讓您的圖像生成和編輯過程更加強大、直觀、多樣化。以下插件集成了一系列增強功能&#xff0c;覆蓋從自動補全提示詞到…

開源項目:驅動創新與協作的時代引擎

《開源項目&#xff1a;驅動創新與協作的時代引擎》 在當今全球經濟與科技環境瞬息萬變的背景下&#xff0c;開源軟件項目如同一顆璀璨的新星&#xff0c;在開發者社區的天空中熠熠生輝。其蓬勃發展的態勢不僅成為了熱門話題&#xff0c;更是引領著技術領域的變革潮流。 開源…

無法訪問。你可能沒有權限使用網絡資源。請與這臺服務器的管理員聯系以查明你是否有訪問權限。【解決辦法】

問題描述 新建好一臺windows虛擬機&#xff0c;兩臺設備網絡是互通的&#xff0c;但是物理機在訪問虛擬機的網絡共享文件資源時&#xff0c;出現圖下所示的報錯&#xff1a;XXX無法訪問。你可能沒有權限使用網絡資源。請與這臺服務器的管理員聯系以查明你是否有訪問權限。用戶…

echarts無法加載Map地圖的問題

項目場景&#xff1a; echarts無法加載Map地圖的問題 詳情 查閱相關資料講&#xff0c;echarts4.9以上版本已經移除了map&#xff0c;那么我們就得重新打包echarts文件了。打包echarts.min.js的鏈接&#xff1a;https://echarts.apache.org/zh/builder.html 在這個鏈接頁面可…

考完軟考之后,如何評職稱?是否有有效期?

一、軟考和職稱之間的關系 軟考和職稱之間的關系可以這樣理解&#xff1a;拿到軟考證書并不意味著就能獲得職稱。軟考證書是技術等級證書&#xff0c;而職稱則是一種資格。如果單位聘用你做工程師&#xff0c;那么你的軟考證書就可以發揮作用&#xff0c;相當于獲得了職稱證。…

單商戶和多商戶的區別

單商戶商城通常由單個企業或品牌運營&#xff0c;專注于銷售自家產品&#xff0c;而多商戶商城則類似于一個平臺&#xff0c;允許多個商家入駐并銷售各自的商品。它們在經營模式、商家入駐和運營投入等方面有所不同。具體分析如下&#xff1a; 經營模式 單商戶商城&#xff1…

MES:連接計劃與執行的橋梁

想象一下&#xff0c;你的企業擁有一份完美的生產計劃&#xff0c;但如何將這份計劃準確無誤地轉化為實際生產中的每一步操作&#xff1f;這就是MES大展身手的地方。MES作為ERP&#xff08;企業資源計劃&#xff09;與車間自動化控制之間的橋梁&#xff0c;確保生產計劃能夠順暢…

hf-mirror (huggingface 的國內鏡像)

官網&#xff1a; https://hf-mirror.com/ 網站域名 hf-mirror.com&#xff0c;用于鏡像 huggingface.co 域名。作為一個公益項目&#xff0c;致力于幫助國內AI開發者快速、穩定的下載模型、數據集。 如何使用HF-Mirror 方法一&#xff1a;網頁下載 在https://hf-mirror.com/…

邊框插畫:成都亞恒豐創教育科技有限公司

邊框插畫&#xff1a;藝術與生活的精致邊界 在視覺藝術的廣闊天地里&#xff0c;邊框插畫以其獨特的魅力和細膩的表達方式&#xff0c;成為連接藝術與生活的一道精致邊界。成都亞恒豐創教育科技有限公司它不僅僅是圖像的外框裝飾&#xff0c;更是情感、故事與創意的延伸&#…

看到指針就頭疼?這篇文章讓你對指針有更全面的了解!

文章目錄 1.什么是指針2.指針和指針類型2.1 指針-整數2.2 指針的解引用 3.野指針3.1為什么會有野指針3.2 如何規避野指針 4.指針運算4.1 指針-整數4.2 指針減指針4.3 指針的關系運算 5.指針與數組6.二級指針7.指針數組 1.什么是指針 指針的兩個要點 1.指針是內存中的一個最小單…

【Python】ModuleNotFoundError: No module named ‘distutils.util‘ bug fix

【Python】ModuleNotFoundError: No module named distutils.util bug fix 1. error like this2. how to fix why this error occured , because i remove the origin version python of ubuntu of 20.04. then the system trapped in tty1 , you must make sure the laptop li…

MVC 返回集合方法,以及分頁

返回一個數據集方法 返回多個數據集方法 》》定義一個Model public class IndexMoel {public List<UserGroup> UserGroup{get;set;}public List<User> User{get;set;}}》》》控制器 //db 是 EF 中的上下文 var listnew IndexModel(); list.UserGroupdb.UserGro…

微信小程序中wx.navigateBack()頁面棧返回上一頁時執行上一頁的方法或修改上一頁的data屬性值

let pages getCurrentPages();let prevPage pages[pages.length - 2]; // 獲取上一個頁面實例對象console.log(prevPage) //打印信息// 在 wx.navigateBack 的 success 回調中執行需要的方法wx.navigateBack({delta: 1, // 返回上一頁success: function() {//修改上一頁的屬性…

秒懂設計模式--學習筆記(8)【結構型-組合模式】

目錄 7、組合模式7.1 組合模式&#xff08;Composite&#xff09;7.2 叉樹結構7.3 文件系統7.4 目錄樹展示7.5 自相似性的涌現7.6 組合模式的各角色定義7.7 組合 7、組合模式 7.1 組合模式&#xff08;Composite&#xff09; 是針對由多個節點對象&#xff08;部分&#xff0…

關于string的‘\0‘與string,vector構造特點,反迭代器與迭代器類等的討論

目錄 問題一&#xff1a;關于string的\0問題討論 問題二&#xff1a;C標準庫中的string內存是分配在堆上面嗎&#xff1f; 問題三&#xff1a;string與vector的capacity大小設計的特點 問題四&#xff1a;string的流提取問題 問題五&#xff1a;迭代器失效 問題六&#xf…

個人開發實現AI套殼網站快速搭建(Vue+elementUI+SpringBoot)

目錄 一、效果展示 二、項目概述 三、手把手快速搭建實現本項目 3.1 前端實現 3.2 后端方向 五、后續開發計劃 一、效果展示 默認展示 一般對話展示&#xff1a; 代碼對話展示&#xff1a; 二、項目概述 本項目是一個基于Web的智能對話服務平臺&#xff0c;通過后端與第…

【C語言】指針(4):深入理解指針

目錄 ?編輯 一、回調函數 二、qsort使用舉例 2.1 使用qsort排序整型數據 2.2 使用qsort排序結構體數據 三、qsort的模擬實現 四、NULL、\0、0、0、null、NUL的區別 五、C99中的變長數組 一、回調函數 函數指針是將函數的地址取出來&#xff0c;再通過函數地址去調用&a…

untiy 在菜單欄添加自定義按鈕 點擊按鈕彈出一個Unity窗口,并在窗口里添加屬性

using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Rendering.PostProcessing;public class AutoGenerateWindow : EditorWindow //這是定義一個窗口 {public string subjecttName "科目名字";//科目的名字public GameOb…