1 min read | by Jordi Prats
Starting Kubernetes 1.24, Secrets are not automatically generated when Service Accounts are created. Since we won't have a Secret generated when we create the ServiceAccount, how can we create ServiceAccount Secrets so that External Applications can access the Kubernetes API?
Assuming we create the sa-name
ServiceAccount like this:
$ kubectl create sa sa-name
serviceaccount/sa-name created
We won't get any tokens:
$ kubectl get sa,secret
NAME SECRETS AGE
serviceaccount/default 0 29s
serviceaccount/sa-name 0 6s
But we can request a new token by creating an empty secret with the kubernetes.io/service-account.name
annotation:
cat <<"EOF" | kubectl apply -f -
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: demo
annotations:
kubernetes.io/service-account.name: sa-name
EOF
Kubernetes is going to populate the secret that we will be able to use with to access the Kubernetes API:
$ kubectl get secret demo -o json | jq '.data | keys[]'
"ca.crt"
"namespace"
"token"
Posted on 17/04/2023