Post

Token generálása Kubernetesben

A változás az egyetlen állandó az életben és akkor ne beszéljünk az informatikáról…
A szokásos frissítésekkel megvan az a csodás lehetőség, hogy valami elromlik vagy csak megváltozik. Persze Kubernetesben is állandóan változik valami és most olyan változés jött, ami az Én leírásom is kicsit megkavarta. 1.24 el változott a token generálásának módja.

< 1.24 Kubernetes esetén

Eddig ügye így hoztuk létre:

1
2
3
4
kubectl create serviceaccount admin-user
kubectl create clusterrolebinding admin-user-binding \
  --clusterrole cluster-admin \
  --serviceaccount default:admin-user

Ezután már ki is volt olvasható a token

1
2
3
SECRET_NAME=$(kubectl get serviceaccount admin-user -o jsonpath='{$.secrets[0].name}')
TOKEN=$(kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 -d | sed $'s/$/\\\n/g')
echo $TOKEN

1.24 után már a $TOKEN sajna üres lesz, mert nem generálódik le a szükséges secret:

The LegacyServiceAccountTokenNoAutoGeneration feature gate is beta, and enabled by default. When enabled, Secret API objects containing service account tokens are no longer auto-generated for every ServiceAccount. Use the TokenRequest API to acquire service account tokens, or if a non-expiring token is required, create a Secret API object for the token controller to populate with a service account token by following this guide.

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md#urgent-upgrade-notes

>= 1.24 Kubernetes esetén

Szerencsére nem lett túlbonyolítva az új megoldásban se

1
2
3
4
5
6
kubectl create serviceaccount admin-user
kubectl create clusterrolebinding admin-user-binding \
  --clusterrole cluster-admin \
  --serviceaccount default:admin-user

kubectl create token admin-user

Console-ra kiírt tokent már fel is használhatjuk

Service Account esetén

Ha nincs mód az TokenRequest API használatára, 1.24 től kell egy service account. Előszőr hozzuk létre majd rendeljük hozzá a kívánt jogosultságot

1
2
3
4
kubectl create serviceaccount admin-user2
kubectl create clusterrolebinding admin-user-binding2 \
  --clusterrole cluster-admin \
  --serviceaccount default:admin-user2

Majd generálni neki egy secretet

1
2
3
4
5
6
7
8
9
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:
  name: admin-user-token
  annotations:
    kubernetes.io/service-account.name: admin-user2
type: kubernetes.io/service-account-token
EOF

Az kubernetes.io/service-account.name nél a név legyen ugyanaz mint amit előzőleg létrehoztunk a serviceaccount nál

1
2
3
SECRET_NAME="admin-user-token"
TOKEN=$(kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 -d | sed $'s/$/\\\n/g')
echo $TOKEN

Forrás: https://github.com/MicrosoftDocs/azure-docs/issues/94737

This post is licensed under CC BY 4.0 by the author.