8

CKAD Prep Part 8 – Kubernetes Service Accounts - briansdevblog

 2 years ago
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
apiserver via
kubectl
kubectl. A
ServiceAccount
ServiceAccount is a Kubernetes object that allows an application running inside a Pod to access the Kubernetes
apiserver
apiserver. This is useful for applications that need to interact directly with the Kubernetes API, such as monitoring tools.  A
ServiceAccount
ServiceAccount allows an application to talk to the 
apiserver
apiserver securely with the appropriate permissions.

A

ServiceAccount
ServiceAccount is defined as follows.
apiVersion: v1
kind: ServiceAccount
metadata:
name: sample-service-account
apiVersion: v1
kind: ServiceAccount
metadata:
  name: sample-service-account

The 

ServiceAccount
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" ]
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
ServiceAccount, you need to create a
RoleBinding
RoleBinding. A
RoleBinding
RoleBinding linking the
pod-reader-role
pod-reader-role to the
sample-service-account
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
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
ServiceAccount by setting the
serviceAccountName
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' ]
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.

Create_Objects.png

When the Pod starts you can exec into the container and get the

ServiceAccount
ServiceAccount token from
/var/run/secrets/kubernetes.io/serviceaccount/token
/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
ServiceAccountRole and
RoleBinding
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.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK