k8srbac 詳解

一、什麼是 k8srbac

k8srbac 全稱 Kubernetes Role-Based Access Control(基於角色的訪問控制),它是 Kubernetes 集群中的一種訪問控制機制。通過 k8srbac,可以在 Kubernetes 集群中實現權限的細分與管理,從而提高集群的安全性。

二、k8srbac 相關術語

在了解 k8srbac 的細節之前,先來了解 k8srbac 相關的術語。下面列出了 k8srbac 中比較重要的一些角色和資源:

  • Subject: 能夠對 Kubernetes 資源進行訪問的主體,可以是一個用戶或者一個服務賬戶。
  • Role: 角色代表了一組權限操作,例如可以創建、更新或刪除一個或多個資源。在 Kubernetes 中,角色只作用於指定的 Namespace。
  • ClusterRole: ClusterRole 與 Role 類似,但是作用於整個 Kubernetes 集群。
  • RoleBinding: 用於將 Role 與 Subject 進行綁定,從而賦予 Subject 對 Role 所代表的資源的權限。
  • ClusterRoleBinding: 與 RoleBinding 類似,但是作用於整個 Kubernetes 集群,可以將 ClusterRole 與各種 Subject 進行綁定。

三、k8srbac 角色權限設置示例

下面我們通過一個示例來展示如何使用 k8srbac 角色進行權限設置。假設我們有一個 Kubernetes 應用,它只需要訪問該 Cluster 的前端應用資源(例如 Ingress 和 Service),不需要訪問其他類型的資源。針對這種場景,我們可以創建如下的 k8srbac 角色:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: frontend-role
rules:
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - get
  - list
  - watch

在上面的 k8srbac 角色定義中,我們設置了兩個規則:

  • 允許讀取 Ingress 資源。
  • 允許讀取 Service 資源。

接下來,我們需要將該角色與 Subject 綁定起來。假設我們有一個名為 frontend-svcaccount 的 ServiceAccount,可以通過如下的 RoleBinding 進行綁定:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: frontend-rolebinding
  namespace: default
subjects:
- kind: ServiceAccount
  name: frontend-svcaccount
  apiGroup: ""
roleRef:
  kind: Role
  name: frontend-role
  apiGroup: ""

在上面的 RoleBinding 中,我們將 ServiceAccount frontend-svcaccount 與 Role frontend-role 進行了綁定。這樣,frontend-svcaccount 就可以讀取 Ingress 和 Service 資源了。

四、k8srbac ClusterRole 的使用示例

除了使用 Role 進行 Namespace 級別的權限控制之外,我們還可以使用 ClusterRole 進行 Kubernetes 集群級別的權限控制。下面我們來看一個例子,假設我們需要給某個賬號(假設該賬號名字為 devops)賦予下列權限:

  • 讀取 Node 資源。
  • 讀取 ConfigMap、Secret、Event 和 Pod 資源。
  • 讀取、創建和刪除 Namespace 資源。
  • 創建、更新和刪除 Pod 和 Service 資源。
  • 更新和刪除 Deployment 和 StatefulSet 資源。

我們可以創建如下的 ClusterRole:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: devops-cluster-role
rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "watch", "list"]
- apiGroups: [""]
  resources: ["configmaps", "secrets", "events", "pods"]
  verbs: ["get", "watch", "list"]
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "create", "delete"]
- apiGroups: [""]
  resources: ["pods", "services"]
  verbs: ["get", "create", "delete"]
- apiGroups: ["apps"]
  resources: ["deployments", "statefulsets"]
  verbs: ["update", "delete"]

接下來,我們需要將該 ClusterRole 與 devops 賬號進行綁定。可以通過如下的 ClusterRoleBinding 完成綁定:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: devops-clusterrolebinding
subjects:
- kind: User
  name: devops
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: devops-cluster-role
  apiGroup: rbac.authorization.k8s.io

在上面的 ClusterRoleBinding 中,我們將 devops 賬號與 devops-cluster-role 進行了綁定。這樣,devops 賬號就可以讀取和修改被該 ClusterRole 所授權的 Kubernetes 資源了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257805.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:46
下一篇 2024-12-15 12:47

相關推薦

  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和算法 C語言貪吃蛇主要運用了以下數據結構和算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論