一、Service Account的基本概念
在 Kubernetes 中,所有的 Pod 的運行都是在一個 Namespace 中,不同的 Namespace 中的 Pod 是相互隔離的。為了讓 Pod 在 Kubernetes 中安全地運行,Kubernetes 引入了 Service Account 的概念。Service Account 是一個資源對象,它提供了一個安全的方式讓 Pod 訪問其它 Kubernetes API。
Service Account 可以使用 Kubernetes API 自身進行身份驗證,同時還可以分配所需的角色(可以訪問那些資源),從而提供 Kubernetes 集群中的訪問控制。在 Kubernetes 集群中,每個命名空間都能夠包含一個 “default” Service Account。
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
二、Service Account 的創建、刪除及更新
可以使用 kubectl 命令行工具創建 Service Account:
$ kubectl create serviceaccount my-serviceaccount
serviceaccount "my-serviceaccount" created
也可以使用以下 YAML 定義創建:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
要刪除 Service Account:
$ kubectl delete serviceaccount my-serviceaccount
serviceaccount "my-serviceaccount" deleted
更新 Service Account 中的字段(比如 annotations):
$ kubectl patch serviceaccount my-serviceaccount -p '{"metadata": {"annotations":{"description" :"This is my service account"}}}'
三、Service Account 與 RBAC
要訪問 Kubernetes API,必須將 Service Account 分配給擁有訪問 Kubernetes API 的角色。在授權時,需要區分不同的角色,給予他們適當的訪問權限。這就是 RBAC(Role-Based Access Control):通過策略來限制授權訪問。
首先,需要確定哪些角色可以訪問 Kubernetes API。可以使用 Role 或 ClusterRole 定義需要訪問的資源和操作。這些資源和操作通常在單個 Namespace 中可見,對於跨 Namespace 的操作需要 ClusterRole。
然後,需要為需要訪問 Kubernetes API 的 Service Account 分配這些角色。這可以使用 RoleBinding 或 ClusterRoleBinding 完成。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: serviceaccount-reader
rules:
- apiGroups: [""]
resources: ["serviceaccounts"]
verbs: ["get", "watch", "list"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: serviceaccount-reader-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: serviceaccount-reader
subjects:
- kind: ServiceAccount
name: my-serviceaccount
四、使用 Service Account 的 Pod
在創建 Pod 時,可以指定要使用的 Service Account,也可以使用默認 Service Account。可以使用以下 YAML 定義 Pod:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
serviceAccountName: my-serviceaccount
containers:
- name: my-container
image: nginx
上面的 YAML 定義了一個名為 my-pod 的 Pod,並使用了名為 my-serviceaccount 的 Service Account。Pod 還創建了一個名為 my-container 的容器,使用了 nginx 鏡像。
五、總結
Service Account 是 Kubernetes 提供的微服務身份驗證的一種方式。通過分配角色,Service Account 可以訪問 Kubernetes API,並提供自動化身份驗證。每個命名空間均可擁有一個默認 Service Account。RBAC 可以幫助限制不同 Service Account 對 Kubernetes 資源和操作的訪問權限。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280341.html