

CKAD Prep Part 8 – Kubernetes Service Accounts - briansdevblog
source link: https://www.briansdevblog.com/2021/05/ckad-prep-part-8-kubernetes-service-accounts/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Kubernetes Service Accounts
As a developer or a cluster admin, you interact with the Kubernetes
apiserver
via kubectl
. A ServiceAccount
is a Kubernetes object that allows an application running inside a Pod
to access the Kubernetes apiserver
. This is useful for applications that need to interact directly with the Kubernetes API, such as monitoring tools. A ServiceAccount
allows an application to talk to the apiserver
securely with the appropriate permissions.
A
ServiceAccount
is defined as follows.
apiVersion: v1 kind: ServiceAccount metadata: name: sample-service-account
The
ServiceAccount
itself is of little use unless you associate it with a set of roles. To do this you’ll need to create a Role
.
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader-role rules: - apiGroups: [ "" ] # "" indicates the core API group resources: [ "pods" ] verbs: [ "get", "watch", "list" ]
This Role
describes the APIs that the Role
owner will have access to as well as resources and access to those resources. In this instance the Role
can get, watch and list pods.
To associate a Role
with a
ServiceAccount
, you need to create a RoleBinding
. A RoleBinding
linking the pod-reader-role
to the sample-service-account
is defined below.
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods-role-binding namespace: default subjects: - kind: ServiceAccount name: sample-service-account namespace: default roleRef: kind: Role name: pod-reader-role # this must match the name of the Role you want to bind to apiGroup: rbac.authorization.k8s.io
Finally, we can create a Pod
that references the
ServiceAccount
by setting the serviceAccountName
in the Pod
spec as follows.
apiVersion: v1 kind: Pod metadata: name: service-account-pod spec: serviceAccountName: sample-service-account containers: - name: service-account-pod image: busybox command: [ 'sh', '-c', 'echo container started & sleep 3600' ]
Next, create the various objects on the cluster as follows.
When the Pod
starts you can exec into the container and get the
ServiceAccount
token from /var/run/secrets/kubernetes.io/serviceaccount/token
. You can then use the token to make an authenticated call to the Kubernetes API.
Given the
ServiceAccount
, Role
and RoleBinding
created earlier, we have the required privileges to retrieve a list of Pods from the API.
If we cat
index.html we’ll see a list of Pod
details.
The sample code for these notes is available here.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK