在 Kubernetes 中,ServiceAccount 提供了一种将 API 凭据(如密钥)自动挂载到 pod 中的方式。每个 ServiceAccount 都与一组凭证相关联,这些凭证被存储为 Kubernetes Secret 对象。当创建 pod 时,可以指定一个 ServiceAccount,Kubernetes 系统会自动将这些凭证挂载到 pod 中,使其能够安全地与 Kubernetes API 交互。
假设我们有一个需要访问 Kubernetes API 读取 Pod 信息的应用程序。我们将创建一个 ServiceAccount,并给它适当的权限。
创建 ServiceAccount:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
创建角色和角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
subjects:
- kind: ServiceAccount
name: my-serviceaccount
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
在 Pod 中使用 ServiceAccount:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
serviceAccountName: my-serviceaccount
containers:
- name: mycontainer
image: myimage
在这个例子中,我们首先创建了一个 ServiceAccount my-serviceaccount
,然后定义了一个 pod-reader
角色,该角色允许读取 Pod 信息,并通过 RoleBinding 将该角色绑定到我们的 ServiceAccount。最后,在创建 Pod 时,我们指定使用 my-serviceaccount
,这样 Pod 就有了读取其他 Pod 信息的权限。