KubeSphere分級(jí)管理實(shí)踐及解析
前言
K8s 是容器編排和分布式應(yīng)用部署領(lǐng)域的領(lǐng)導(dǎo)者,在 K8s 環(huán)境中,我們只需要關(guān)心應(yīng)用的業(yè)務(wù)邏輯,減輕了我們服務(wù)器網(wǎng)絡(luò)以及存儲(chǔ)等方面的管理負(fù)擔(dān)。對(duì)于一個(gè)用戶而言,K8s 是一個(gè)很復(fù)雜的容器編排平臺(tái),學(xué)習(xí)成本非常高。KubeSphere 抽象了底層的 K8s,并進(jìn)行了高度的產(chǎn)品化,構(gòu)建了一個(gè)全棧的多租戶容器云平臺(tái),為用戶提供了一個(gè)健壯、安全、功能豐富、具備極致體驗(yàn)的 Web 控制臺(tái),解決了 K8s 使用門檻高和云原生生態(tài)工具龐雜等痛點(diǎn),使我們可以專注于業(yè)務(wù)的快速迭代,其多維度的數(shù)據(jù)監(jiān)控,對(duì)于問(wèn)題的定位,提供了很大的幫助。
為什么要在 KuberSphere 上實(shí)現(xiàn)分級(jí)管理
在 KubeSphere 中,資源可以在租戶之間共享,根據(jù)分配的不同角色,可以對(duì)各種資源進(jìn)行操作。租戶與資源之間、資源與資源之間的自由度很高,權(quán)限粒度也比較大。在我們的系統(tǒng)中,資源是有權(quán)限等級(jí)的,像是低等級(jí)用戶可以通過(guò)邀請(qǐng)、賦予權(quán)限等操作來(lái)操作高等級(jí)資源,或者像是低等級(jí)項(xiàng)目中的 Pod 可以調(diào)度到高等級(jí)的節(jié)點(diǎn)上,對(duì)資源。諸如此類跨等級(jí)操作資源等問(wèn)題,我們?cè)?KubeSphere 基礎(chǔ)上來(lái)實(shí)現(xiàn)了分級(jí)管理。
什么是分級(jí)體系
分級(jí),顧名思義就是按照既定的標(biāo)準(zhǔn)對(duì)整體進(jìn)行分解、分類。我們將其抽象成一個(gè)金字塔模型,從地基到塔頂會(huì)有很多個(gè)層級(jí),我們將公共資源作為金字塔的地基,擁有最高權(quán)限的 admin 作為塔頂,其他資源按照權(quán)限等級(jí)劃分成不同等級(jí)。低層級(jí)資源是不能訪問(wèn)高等級(jí)資源,高等級(jí)資源可以獲取它等級(jí)之下的所有資源,構(gòu)建了這樣一個(gè)權(quán)益遞減、層級(jí)間隔離的分級(jí)體系。
如何實(shí)現(xiàn)分級(jí)管理
我們定義了一個(gè)代表等級(jí)的標(biāo)簽 kubernetes.io/level
。以一個(gè)多節(jié)點(diǎn)的集群為例,首先我們會(huì)給用戶、企業(yè)空間、節(jié)點(diǎn)等資源打上代表等級(jí)的標(biāo)簽。在邀請(qǐng)用戶加入企業(yè)空間或者項(xiàng)目時(shí),要求加入的企業(yè)空間或者項(xiàng)目的等級(jí)不得高于用戶的等級(jí),同樣項(xiàng)目在綁定企業(yè)空間時(shí),也要求項(xiàng)目的等級(jí)不得高于企業(yè)空間的等級(jí),才能對(duì)資源進(jìn)行納管;我們認(rèn)為同一項(xiàng)目下的資源的等級(jí)是相同的,基于項(xiàng)目創(chuàng)建的負(fù)載、Pod、服務(wù)等資源的等級(jí)跟項(xiàng)目保持一致;同時(shí) Pod 中加入節(jié)點(diǎn)親和性,以使 Pod 調(diào)度到不高于其權(quán)限等級(jí)的節(jié)點(diǎn)上。
例如這里,我們創(chuàng)建了一個(gè)權(quán)限等級(jí)是 3 的用戶 demo-user
,他可以加入權(quán)限等級(jí)不高于3的企業(yè)空間或者項(xiàng)目中。
kind: User apiVersion: iam.kubesphere.io/v1alpha2 metadata: name: demo-user labels: kubernetes.io/level: 3 spec: email: demo-user@kubesphere.io
創(chuàng)建一個(gè)權(quán)限等級(jí)是 2 的項(xiàng)目 demo-ns
,那么基于項(xiàng)目創(chuàng)建的負(fù)載、Pod、存儲(chǔ)等資源的權(quán)限等級(jí)也是 2。
apiVersion: v1 kind: Namespace metadata: name: demo-ns labels: kubernetes.io/level: 2
基于 demo-ns
項(xiàng)目創(chuàng)建了一個(gè)nginx
的 Pod,他的權(quán)限等級(jí)也是 2,同時(shí)加入節(jié)點(diǎn)親和性,要求其調(diào)度到權(quán)限等級(jí)不高于 2 的節(jié)點(diǎn)上。
apiVersion: apps/v1 kind: Pod metadata: labels: kubernetes.io/level: 2 name: nginx spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 protocol: TCP affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/level operator: Lt values: - 2 - matchExpressions: - key: kubernetes.io/level operator: In values: - 2
如何實(shí)現(xiàn)資源的升降級(jí)
在分級(jí)管理體系中,支持等級(jí)的無(wú)限劃分,只需要定義一個(gè)中間值,就可以在兩個(gè)等級(jí)之間插入一個(gè)新的等級(jí),無(wú)需操作其他資源;在對(duì)資源進(jìn)行升降級(jí)時(shí),只需要修改對(duì)應(yīng)資源的 label
標(biāo)簽,就可以對(duì)資源進(jìn)行升降級(jí)操作。當(dāng)然,在對(duì)資源進(jìn)行升降級(jí)的時(shí)候,我們需要對(duì)資源進(jìn)行檢測(cè),保證升級(jí)時(shí),其上層資源的權(quán)限等級(jí)不得低于目標(biāo)等級(jí);同時(shí),降級(jí)時(shí),其下層資源的權(quán)限等級(jí)不得高于目標(biāo)等級(jí)。在不滿足升降級(jí)操作條件時(shí),需要將對(duì)應(yīng)資源也做相應(yīng)調(diào)整才可以。
不同層級(jí)間 Pod 的網(wǎng)絡(luò)隔離
在分級(jí)體系中,我們要求高等級(jí)的 Pod 能訪問(wèn)低等級(jí)的 Pod,但是低等級(jí)的 Pod 不能訪問(wèn)高等級(jí)的 Pod,那我們需要如何保證不同層級(jí)間 Pod 的網(wǎng)絡(luò)通信呢。
項(xiàng)目在不開(kāi)啟網(wǎng)絡(luò)隔離的情況下,Pod 間的網(wǎng)絡(luò)是互通的,所以這里會(huì)新增一個(gè)黑名單的網(wǎng)絡(luò)策略。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all namespace: demo-ns labels: kubernetes.io/level: 2 spec: podSelector: {} policyTypes: - Ingress
podSelector:{}
作用于項(xiàng)目中所有 Pod,阻止所有流量的流入。
然后放行標(biāo)簽等級(jí)大于目標(biāo)等級(jí)(這里是 2)的流量流入(我們對(duì) Ingress 流量沒(méi)有做限制)。
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: level-match-network-policy namespace: demo-ns labels: kubernetes.io/level: 2 spec: podSelector: matchExpressions: - key: kubernetes.io/level operator: Gt values: - 2 policyTypes: - Ingress
總結(jié)
KubeSphere 解決了用戶構(gòu)建、部署、管理和可觀測(cè)性等方面的痛點(diǎn),它的資源可以在多個(gè)租戶之間共享。但是在資源有權(quán)限等級(jí)的場(chǎng)景中,低等級(jí)資源可以操作高等級(jí)資源,造成資源越權(quán)管理的問(wèn)題。為解決這一問(wèn)題,我們?cè)?KubeSphere 的基礎(chǔ)上進(jìn)行了改造,以適應(yīng)租戶與資源之間和資源與資源之間的分級(jí)管理,同時(shí)在項(xiàng)目的網(wǎng)絡(luò)策略中,增加黑名單和白名單策略,增強(qiáng)了項(xiàng)目間的網(wǎng)絡(luò)隔離,讓資源的管理更安全。
以上就是KubeSphere分級(jí)管理實(shí)踐及解析的詳細(xì)內(nèi)容,更多關(guān)于KubeSphere分級(jí)管理實(shí)踐的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Kubernetes Dashboard 配置用戶名密碼方式登錄操作流程
為了K8s集群安全,默認(rèn)情況下Dashboard以Token的形式登錄的,那如果我們想以用戶名/密碼的方式登錄該怎么操作呢?其實(shí)只需要我們創(chuàng)建用戶并進(jìn)行 ClusterRoleBinding綁定即可,下面給大家分享Kubernetes Dashboard 配置用戶名密碼方式登錄操作流程,感興趣的朋友一起看看吧2024-06-06Kubernetes訪問(wèn)控制之鑒權(quán)方法詳解
這篇文章主要為大家介紹了Kubernetes訪問(wèn)控制之鑒權(quán)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09關(guān)于k8s?使用?Service?控制器對(duì)外暴露服務(wù)的問(wèn)題
這篇文章主要介紹了k8s使用Service控制器對(duì)外暴露服務(wù),包括部署deploy,部署?service及查看?service?和?pod?的關(guān)系,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03某集團(tuán)任意文件下載到虛擬主機(jī)getshell的方法
這篇文章主要介紹了某集團(tuán)任意文件下載到虛擬主機(jī)getshell的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01K8S內(nèi)部pod之間相互調(diào)用案例以及詳解
這篇文章主要給大家介紹了關(guān)于K8S內(nèi)部pod之間相互調(diào)用案例的相關(guān)資料,Pod是Kubernetes中最小的可部署單元,它是一個(gè)或多個(gè)容器的集合,它們共享網(wǎng)絡(luò)和存儲(chǔ)資源,并在同一節(jié)點(diǎn)上運(yùn)行,需要的朋友可以參考下2023-08-08