主頁 > 軟體設計 > Kubernetes之kuberconfig--普通用戶授權kubernetes集群

Kubernetes之kuberconfig--普通用戶授權kubernetes集群

2021-10-11 15:36:19 軟體設計

背景:

是這樣的一個事情:服務運行于kubernetes集群(騰訊云tke1.20.6),日志采集到了elasticsearch集群and騰訊的cls日志服務中,小伙伴看日志覺得還是不太方便,還是想看控制臺輸出的,給他們分配過一臺服務器(加入到集群中,但是有污點標簽的節點),為了方便他們測驗一下東西,現在想讓他們通過此work節點可以在控制臺查看日志,正常的就是把master節點的/root/.kube/目錄下的config組態檔copy過來就可以了,但是這權限也太大了!重新復習一遍kubeconfig組態檔以及 role rolebinding的知識!
注: namespace為official,想分配的權限是list and log,嗯查看pod串列和查看日志 不能洗掉修改namespace下pod,并且不能查看其他namespace,

Kubernetes之kuberconfig

1. 創建用戶憑證

前提: openssl的安裝就忽略了…

1. 創建用戶證書私鑰

用戶就用我自己名字了,私鑰命名為zhangpeng.key

openssl genrsa -out zhangpeng.key 2048

image.png2. 創建證書簽名請求檔案

使用我們剛剛創建的私鑰創建一個證書簽名請求檔案:zhangpeng.csr,要注意需要確保在-subj引數中指定用戶名和組(CN表示用戶名,O表示組)

openssl req -new -key zhangpeng.key -out zhangpeng.csr -subj "/CN=zhangpeng/O=layabox"

可能你會出現下面的報錯:
image.png
注:圖非上面執行命令的截圖,其他環境下操作出現的
解決方式如下:

cd /root
openssl rand -writerand .rnd

image.png
然后重新執行命名

openssl req -new -key zhangpeng.key -out zhangpeng.csr -subj "/CN=zhangpeng/O=layabox"

3. 生成最終證書檔案

找到Kubernetes集群的CA,如果你是使用的是kubeadm安裝的集群,CA相關證書位于/etc/kubernetes/pki/目錄下面,如果你是二進制方式搭建的,你應該在最開始搭建集群的時候就已經指定好了CA的目錄,我們會利用該目錄下面的ca.crt和ca.key兩個檔案來批準上面的證書請求,當然了我使用的是騰訊云的tke集群,證書是位于/etc/kubernetes目錄下的 server.crt和server.key,這里就用這兩個檔案生成證書檔案,命令如下:
?

root@ap-shanghai-k8s-master-1:~/ap-shanghai# openssl x509 -req -in zhangpeng.csr -CA /etc/kubernetes/ca.crt -CAkey /etc/kubernetes/ca.key -CAcreateserial -out zhangpeng.crt -days 3650
Signature ok
subject=CN = zhangpeng, O = layabox
Getting CA Private Key

查看我們當前檔案夾下面是否生成了一個證書檔案
image.png

4. 在kubernetes集群中創建憑證和背景關系(context)

創建新的用戶憑證

root@ap-shanghai-k8s-master-1:~/ap-shanghai# kubectl config set-credentials zhangpeng --client-certificate=zhangpeng.crt  --client-key=zhangpeng.key
User "zhangpeng" set.

為用戶設定Context:

root@ap-shanghai-k8s-master-1:~/ap-shanghai# kubectl config set-context zhangpeng-context --cluster=kubernetes --namespace=official --user=zhangpeng
Context "zhangpeng-context" created.

image.png
到這里,zhangpeng用戶的配置就已經創建成功了,現在我們使用當前的這個組態檔來操作kubectl命令的時候,應該會出現錯誤,因為我們還沒有為該用戶定義任何操作的權限:

$ kubectl get pods --context=zhangpeng-context -n official
Error from server (Forbidden): pods is forbidden: User "zhangpeng" cannot list resource "pods" in API group "" in the namespace "official"

2. 創建角色

cat role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: official
  name: official-log-role
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list"]
kubectl apply -f role.yaml

注:可參照https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/ rbac鑒權

3. 創建角色權限系結

cat rolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ap-shanghai-rolebinding
  namespace: official
subjects:
- kind: User
  name: zhangpeng
  apiGroup: ""
roleRef:
  kind: Role
  name: official-log-role
  apiGroup: ""

kubectl apply -f rolebinding.yaml

4. 測驗

root@ap-shanghai-k8s-master-1:~/ap-shanghai# kubectl get pods --context=zhangpeng-context
The connection to the server localhost:8080 was refused - did you specify the right host or port?

報錯了為什么呢?喵一眼/root/.kube/config檔案:
image.png
tke集群默認的cluster是local.我在1.2.4步驟中cluster設定的是kubernetes,這里直接在config檔案中修改了cluster為local,也強調一下在執行1.2.4步驟的時候一定要先確認一下集群的cluster名稱,不要直接copy拿來主義!
?

重新進行測驗:

kubectl get pods --context=zhangpeng-context

image.png
由于這些pod都是線上跑的,我就新建一個nginx pod然后進行測驗下是否可以delete and edit

kubectl run nginx --image=nginx -n official
$ kubectl delete pods nginx --context=zhangpeng-context
Error from server (Forbidden): pods "nginx" is forbidden: User "zhangpeng" cannot delete resource "pods" in API group "" in the namespace "official"
$ kubectl edit nginx --context=zhangpeng-context
error: pods "nginx" could not be patched: pods "nginx" is forbidden: User "zhangpeng" cannot patch resource "pods" in API group "" in the namespace "official"
You can run `kubectl replace -f /tmp/kubectl-edit-kp0az.yaml` to try this update again.

嗯 然后將config檔案copy到用戶的跳板機上面/root/.kube/config:
image.png
我是那么做的洗掉了原來的集群默認用戶的user and contexts,講contexts默認用戶設定為創建的zhangpeng-context,當然了也記得把client-certificate client-key 檔案copy到對應目錄(當然了自己也可以自定義下,然后修改一下config檔案)
image.png
切換一下命名空間namespace試一試:
image.png
基本實作了個人的目的,RBAC and安全背景關系還要深入復習一下!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308719.html

標籤:其他

上一篇:Nginx 詳解

下一篇:為什么RestController中的MessageSource不是自動連接的?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more