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.
>= 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