kubernetes授予用戶指定命名空間的使用權限

kubernetes授予用戶指定命名空間的使用權限

  • 問題描述
  • 具體實現
    • 簽發客戶端證書
    • 創建RBAC策略
    • 生成kubeconfig文件

問題描述

假如我們部門來了個新同事,他需要使用kubernetes集群,但是因為他剛來,還不熟悉,所以不能直接將kubernetes集群的所有權限給他,我希望他能夠在test這個namespace里面操作,對于其他的namespace,則都沒有權限,那么我應該如何給這個用戶授權呢?

可以通過kubernetes的RBAC機制來完成授權工作,只給某個用戶某個namespace的權限

在 Kubernetes 中,RBAC 是一種強大的訪問控制機制,用于管理對集群資源的訪問權限。RBAC 可以幫助管理員精確地控制用戶、ServiceAccount 或其他實體對 Kubernetes API 中資源的操作權限。RBAC 基于角色的授權模型使得管理員可以定義角色和角色綁定,從而實現對不同用戶或實體的訪問權限控制

具體實現

示例,加入我需要給用戶lilei授權test命名空間的完全使用權限

  1. 用K8S CA簽發客戶端證書 基于證書的客戶端認證方式
  2. 創建RBAC權限策略 做一定的權限分配
  3. 生成kubeconfig授權文件 kubectl使用kubeconfig連接集群

最終目的也就是生成一個kubeconfig文件,讓指定用戶拿著這個文件去訪問集群

簽發客戶端證書

  1. 安裝簽發證書服務cfssl
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl*
mv cfssl_linux-amd64 /usr/bin/cfssl
mv cfssljson_linux-amd64 /usr/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
  1. 使用k8s CA簽發客戶端證書
    如果是使用kubeadm部署的kubernetes集群,那么根證書存放在/etc/kubernetes/pki中
root@master:~# ls /etc/kubernetes/pki/
apiserver.crt              apiserver-etcd-client.key  apiserver-kubelet-client.crt  ca.crt  etcd                front-proxy-ca.key      front-proxy-client.key  sa.pub
apiserver-etcd-client.crt  apiserver.key              apiserver-kubelet-client.key  ca.key  front-proxy-ca.crt  front-proxy-client.crt  sa.key

提前創建配置文件

root@master:~# cat > ca-config.json <<EOF
{"signing": {"default": {"expiry": "87600h"},"profiles": {"kubernetes": {"usages": ["signing","key encipherment","server auth","client auth"],"expiry": "87600h"}}}
}
EOF#API Server會把客戶端證書的CN字段作為User,把names.O字段作為Group。k8s在校驗授權的時候就會讀取這兩個字段
root@master:~# cat > lulei-csr.json <<EOF
{"CN": "lilei","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "ShenZhen","L": "ShenZhen","O": "k8s","OU": "System"}]
}
EOF

cfssl使用根證書來簽發lilei客戶端的證書

cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes lilei-csr.json | cfssljson -bare lilei

簽發完成會在當前目錄下產生lulei-key.pem lulei.pem 兩個文件
上面就是客戶端證書,有多個用戶需要生成多個

  • lilei-key.pem 私鑰 類似配置nginx https訪問 .key私鑰
  • lilei.pem 數字證書 類似配置nginx https訪問的 .crt證書

創建RBAC策略

  1. 創建rbac策略,也就是創建一個role角色,然后進行rolebinding綁定,這里授予了這個用戶dev namespace下的所有權限(可根據實際需求更改)
root@master:~# cat > rbac.yaml <<EOF
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: testname: pod-reader
rules:          
- apiGroups: ["", "apps", "batch", "networking.k8s.io"]  #deployments屬于apss這個資源對象里面;里面為空,為核心的api組,常用的資源都在核心組里面resources: ["deployments", "pods", "services", "pods/exec", "ingresses", "secrets", "pods/log"]verbs: ["get", "list", "watch", "create", "delete", "update", "patch"]  #資源操作方法
--- 
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: read-podsnamespace: test
subjects:
- kind: Username: lileiapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
EOFroot@master:~# kubectl apply -f rbac.yaml

生成kubeconfig文件

  1. 集群參數設置
root@master:~# kubectl config set-cluster kubernetes \--certificate-authority=/etc/kubernetes/pki/ca.crt \--embed-certs=true \--server=https://10.98.99.140:6443 \--kubeconfig=lulei.kubeconfig#然后當前目錄下會生成一個lilei.kubeconfig文件

本段設置了所需要訪問的集群的信息。
使用set-cluster設置了需要訪問的集群,如上為kubernetes,這只是個名稱,實際為–server指向的apiserver
–certificate-authority設置了該集群的公鑰
–embed-certs為true表示將–certificate-authority證書寫入到kubeconfig中
–server則表示該集群的kube-apiserver地址
生成的kubeconfig 被保存到 lilei.kubeconfig文件

  1. 用戶參數設置
root@master:~# kubectl config set-credentials lulei \--client-key=lulei-key.pem \--client-certificate=lulei.pem \--embed-certs=true \--kubeconfig=lilei.kubeconfig#會追加user信息到lilei.kubeconfig文件中,注意,當前目錄下需要有lilei-key.pem和lilei.pem

本段主要設置用戶的相關信息,主要是用戶證書。如上的用戶名為lilei,證書為:lilei.pem,私鑰為:lilei-key.pem。注意客戶端的證書首先要經過集群CA的簽署,否則不會被集群認可。此處使用的是ca認證方式,也可以使用token認證,如kubelet的 TLS Boostrap機制下的bootstrapping使用的就是token認證方式。上述kubectl使用的是ca認證,不需要token字段

  1. 上下文參數設置
root@master:~# kubectl config set-context kubernetes \--cluster=kubernetes \--user=lilei \--kubeconfig=lulei.kubeconfig#會追加context信息到lilei.kubeconfig文件中

集群參數和用戶參數可以同時設置多對,在上下文參數中將集群參數和用戶參數關聯起來。上面的上下文名稱為kubenetes,集群為kubenetes,用戶為lilei,表示使用lilei的用戶憑證來訪問kubenetes集群的default命名空間,也可以增加–namspace來指定訪問的命名空間。

  1. 設置當前使用的配置
#切換context為kubernetes,集群默認的context為kubernetes-admin@kubernetes,如果root用戶直接執行這個會失敗,因為當前root用的kubeconfig文件中沒有kubernetes這個context的信息,下面第二種指定kubeconfig即可
kubectl config use-context kubernetes
kubectl config use-context kubernetes --kubeconfig=lulei.kubeconfig
#列出可用的上下文,跟你的當前用戶的kubeconfig設置有關
kubectl config get-contexts <name>
#列出當前使用的上下文
kubectl config current-context <name>
#設置新的上下文,可以包括集群、用戶和命名空間
kubectl config set-context <name> [--cluster=<cluster>] [--user=<user>] [--namespace=<namespace>]
#刪除指定上下文
kubectl config delete-context <name>
#可以查看當前kubeconfig的內容,包括集群、用戶、上下文等配置信息
kubectl config view

最終生成的kubeconfig文件就是lilei.kubeconfig,將其復制到某個用戶的的.kube文件中,就可以使用該限制了

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

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

相關文章

Spring如何控制Bean加載+執行順序

1. Order 注解和 Ordered 接口 用途&#xff1a;控制組件執行順序或排序&#xff0c;但不控制Bean初始化順序。定義執行順序&#xff1a;通過整數值指定組件優先級&#xff0c;數值越小優先級越高。集合排序&#xff1a;影響自動裝配到集合中的組件排列順序。使用場景&#xf…

77.MySQL的分頁查詢

一、LIMIT關鍵字 LIMIT關鍵字用于限制返回結果集中的行數。其基本語法如下&#xff1a; SELECT * FROM 表名 LIMIT 行數; 例如&#xff0c;要從名為mark_info的表中選擇最新創建的10個工單的信息&#xff0c;可以執行以下查詢&#xff1a; SELECT * FROM mark_info ORDER B…

電力需求預測挑戰賽筆記 Taks1 跑通baseline

#AI夏令營 #Datawhale #夏令營 賽題 一句話介紹賽題任務可以這樣理解賽題&#xff1a; 【訓練時序預測模型助力電力需求預測】 電力需求的準確預測對于電網的穩定運行、能源的有效管理以及可再生能源的整合至關重要。 賽題任務 給定多個房屋對應電力消耗歷史 N 天的相關序列數…

拓撲排序(算法篇)

算法之拓撲排序 拓撲排序 概念&#xff1a; 拓撲排序是對有向無圈圖的頂點的一種排序。排序不必是唯一的&#xff0c;任何合理的排序都是可以的。具體做法是&#xff1a;先找出任意一個沒有入邊的頂點v(就是沒有其他頂點指向的頂點)&#xff0c;將頂點v放入隊列&#xff0c;…

element-plus el-table點擊當前行和劃過展示鼠標

在 Element Plus 的 el-table 組件中&#xff0c;設置滑過行時鼠標的樣式可以通過 CSS 來實現。你可以使用 CSS 的 cursor 屬性來定義鼠標懸停時的樣式。以下是一個簡單的例子&#xff1a; 首先&#xff0c;在你的 Vue 組件的 .el-table .el-table__row:hover {cursor: poin…

09.AOP-尚硅谷Spring零基礎入門到進階,一套搞定spring6全套視頻教程(源碼級講解)

現有代碼缺陷 針對帶日志功能的實現類&#xff0c;我們發現有如下缺陷&#xff1a; 對核心業務功能有干擾&#xff0c;導致程序員在開發核心業務功能時分散了精力附加功能分散在各個業務功能方法中&#xff0c;不利于統一維護 解決思路 解決核心&#xff1a;解耦。把附加功能從…

glm-4 聯網搜索 api 測試

今天測試了一下 glm-4 的聯網搜索 web_search tool 調用&#xff0c;發現了 web_search 的網頁檢索返回結果中幾個比較詭異的事情&#xff0c;特此記錄&#xff1a; 有些檢索結果沒有 icon、link、media 字段&#xff0c;但從內容上看確實是聯網搜索出來的結果&#xff0c;不知…

從零開始讀RocketMq源碼(三)Broker存儲Message流程解析

目錄 前言 準備 消息載體CommitLog 文件持久化位置 源碼解析 broker消息對象MessageExtBrokerInner 異步存儲message CommitLog的真相 創建MappedFile文件 加入異步刷盤隊列 Message異步存儲MappedByteBuffer 總結 前言 在面試中我們經常會聽到這樣的回答&#x…

國產化趨勢下源代碼數據防泄密的信創沙盒的方案分享

隨著國產化的大力推進&#xff0c;越來越多的企事業單位在逐步替換Windows、Linux等操作系統的使用。那么什是國產化了&#xff1f;國產化是指在產品或服務中采用國內自主研發的技術和標注&#xff0c;替代過去依賴的他國的產品和服務&#xff0c;國產化又被稱之為“信創”&…

GitLab CI/CD實現項目自動化部署

1 GitLab CI/CD介紹 GitLab CI/CD 是 GitLab 中集成的一套用于軟件開發的持續集成&#xff08;Continuous Integration&#xff09;、持續交付&#xff08;Continuous Delivery&#xff09;和持續部署&#xff08;Continuous Deployment&#xff09;工具。這套系統允許開發團隊…

vue里實現點擊按鈕回到頁面頂部功能,博客必備!

效果 步驟 1-標簽結構 動態綁定樣式style&#xff0c;監聽點擊事件&#xff0c;后續控制opacity透明度。和滾動距離 <div class"toTop" :style"dynamicStyles" click"toTop"><!--<i class"fa fa-arrow-up"></i>…

Django ORM中的F 對象

F 對象非常強大&#xff0c;可以在查詢和更新操作中進行復雜的字段間運算。 假設我們有一個包含商品信息的模型 Product&#xff1a; from django.db import modelsclass Product(models.Model):name models.CharField(max_length100)price models.DecimalField(max_digits…

MySQL向自增列插入0失敗問題

問題 在一次上線時&#xff0c;發現通過腳本添加的狀態表中&#xff0c;待提交的狀態不正確&#xff0c;本來應該是0&#xff0c;線上是101。 原因 默認情況下&#xff0c;MySQL對應自增列&#xff0c;認為0和null等價&#xff08;因為mysql認為0不是最佳實踐不推薦使用&…

超簡單的通配證書簽發工具,免費,無需安裝任何插件到本地

常見的acme.sh 或者 lego等工具需要配置&#xff0c;安裝不靈活&#xff0c;續簽需要配置計劃任務&#xff0c;簽發單域名證書或者通配證書需要不同的指令和配置&#xff0c;繁瑣&#xff0c;如果自己程序想要對接簽發證書的api有的不支持&#xff0c;有的用起來繁瑣。 最近發…

[手機Linux PostmarketOS]三, Alpine Linux命令使用

Alpine Linux 一些常用的指令&#xff1a; 添加國內源下載鏈接&#xff1a; 編譯以下文件&#xff0c;添加鏈接進去&#xff1a; sudo vi /etc/apk/repositories##清華源&#xff1a; https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main https://mirror.tuna.tsi…

【VIVADO SDK調試遇到DataAbortHandler】

問題 SDK調試遇到DataAbortHandler問題。 運行后不顯示結果&#xff0c;debug模式下發現進入DataAbortHandler異常函數。程序中存在大數組。 原因:SDK默認的堆棧為1024bytes,需要將堆棧調大。 修改方法&#xff1a; 解決:對application中src下的lscript.ld雙擊&#xff0c;…

android 添加一個水平線

在Android中&#xff0c;添加一個水平線通常可以通過幾種方式實現&#xff0c;最常見的是使用View組件或者自定義的Drawable。下面是一個簡單的例子&#xff0c;展示如何在布局文件中添加一個水平線&#xff1a; 使用View組件 在你的布局XML文件中&#xff0c;你可以添加一個…

Linux 程序卡死的特殊處理

一、前言 Linux環境。 我們在日常編寫的程序中&#xff0c;可能會出現一些細節問題&#xff0c;導致程序卡死&#xff0c;即程序沒法正常運行&#xff0c;界面卡住&#xff0c;也不會閃退... 當這種問題出現在客戶現場&#xff0c;那就是大問題了。。。 當我們暫時還無法排…

Python如何調用C++

ctypes 有以下優點: Python內建&#xff0c;不需要單獨安裝Python可以直接調用C/C 動態鏈接庫(.dll 或 .so)在Python一側&#xff0c;不需要了解 c/c dll 內部的工作方式提供了 C/C 數據類型與Python類型的相互映射&#xff0c;以及轉換&#xff0c;包括指針類型。 在使用cty…

如何定量選擇孔銷基準?-DTAS來幫你!

在當今快速發展的工程領域&#xff0c;公差仿真的作用日漸重要&#xff0c;在公差仿真中&#xff0c;基準體系的選擇對于最終結果更是至關重要。基準體系不同可能導致仿真過程中的參數計算、誤差分析以及最終的工程設計都有所不同。基準體系作為評估和比較的參照&#xff0c;直…