Aggiunta di un token di autenticazione account di servizio a un file Kubeconfig
Scopri come aggiungere un token di autenticazione account di servizio al file kubeconfig di un cluster Kubernetes creato utilizzando Kubernetes Engine (OKE).
Quando si imposta il file kubeconfig per un cluster, per impostazione predefinita contiene un comando CLI di Oracle Cloud Infrastructure per generare un token di autenticazione specifico dell'utente di breve durata e con ambito cluster. Il token di autenticazione generato dal comando CLI è appropriato per autenticare i singoli utenti che accedono al cluster utilizzando kubectl e il dashboard Kubernetes.
Tuttavia, il token di autenticazione generato non è appropriato per autenticare i processi e gli strumenti che accedono al cluster, come gli strumenti di integrazione continua e distribuzione continua (CI/CD). Per garantire l'accesso al cluster, tali strumenti richiedono token di autenticazione non specifici dell'utente e di lunga durata.
Una soluzione è quella di utilizzare un account di servizio Kubernetes, come descritto in questo argomento. Dopo aver creato un account di servizio, associarlo a un'associazione clusterrolebinding con autorizzazioni di amministrazione cluster. Si crea un token di autenticazione per l'account di servizio, memorizzato come segreto Kubernetes. È quindi possibile aggiungere l'account di servizio (e il relativo token di autenticazione account di servizio associato) come definizione utente nel file kubeconfig stesso. Gli altri strumenti potranno quindi utilizzare il token di autenticazione dell'account di servizio durante l'accesso al cluster.
Per eseguire i comandi in questo argomento, è necessario disporre delle autorizzazioni appropriate. Vedere Informazioni sul controllo dell'accesso e sul motore Kubernetes (OKE).
Per aggiungere un token di autenticazione account di servizio a un file kubeconfig, effettuare le operazioni riportate di seguito.
-
Se non è già stato fatto, attenersi alla procedura per impostare il file di configurazione kubeconfig del cluster e (se necessario) impostare la variabile di ambiente KUBECONFIG in modo che punti al file. Si noti che è necessario impostare il proprio file kubeconfig. Non è possibile accedere a un cluster utilizzando un file kubeconfig impostato da un altro utente. Vedere Impostazione dell'accesso al cluster.
-
In una finestra di terminale, creare un nuovo account di servizio nello spazio di nomi kube-system immettendo il seguente comando kubectl:
kubectl -n kube-system create serviceaccount <service-account-name>
Ad esempio, per creare un account di servizio denominato kubeconfig-sa, immettere:
kubectl -n kube-system create serviceaccount kubeconfig-sa
L'output del comando precedente conferma la creazione dell'account di servizio. Ad esempio:
serviceaccount/kubeconfig-sa created
Si noti che la creazione dell'account di servizio nello spazio di nomi kube-system è una buona prassi consigliata e viene utilizzata nelle istruzioni riportate in questo argomento. Tuttavia, se lo si preferisce, è possibile creare l'account di servizio in un altro spazio di nomi a cui si ha accesso.
-
Creare un nuovo clusterrolebinding con le autorizzazioni di amministrazione del cluster e associarlo all'account di servizio appena creato immettendo il seguente comando kubectl:
kubectl create clusterrolebinding <binding-name> --clusterrole=cluster-admin --serviceaccount=kube-system:<service-account-name>
Ad esempio, per creare un'associazione clusterrolebinding denominata add-on-cluster-admin e associarla all'account del servizio kubeconfig-sa, immettere:
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:kubeconfig-sa
L'output del comando precedente conferma la creazione del clusterrolebinding. Ad esempio:
clusterrolebinding.rbac.authorization.k8s.io/add-on-cluster-admin created
- Ottenere un token di autenticazione per l'account di servizio kubeconfig-sa come indicato di seguito.
- In un editor di testo, creare un file (ad esempio, oke-kubeconfig-sa-token.yaml) per creare un segreto (ad esempio, denominato oke-kubeconfig-sa-token) con il seguente contenuto:
apiVersion: v1 kind: Secret metadata: name: oke-kubeconfig-sa-token namespace: kube-system annotations: kubernetes.io/service-account.name: kubeconfig-sa type: kubernetes.io/service-account-token
-
Creare il token dell'account di servizio immettendo:
kubectl apply -f <filename>
dove
<filename>
è il nome del file creato in precedenza. Ad esempio:kubectl apply -f oke-kubeconfig-sa-token.yaml
-
Visualizzare i dettagli del segreto immettendo:
kubectl describe secrets oke-kubeconfig-sa-token -n kube-system
L'output del comando precedente include un token di autenticazione (stringa alfanumerica lunga) come valore dell'elemento
token:
, come illustrato di seguito:Name: oke-kubeconfig-sa-token Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: kubeconfig-sa kubernetes.io/service-account.uid: 6d0fda1c-b456-44b3-25fd-4a824bef1936 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1289 bytes namespace: 11 bytes token: bxYk______rz15A
Nell'esempio sopra,
bxYk______rz15A
(abbreviato per leggibilità) è il token di autenticazione.
- In un editor di testo, creare un file (ad esempio, oke-kubeconfig-sa-token.yaml) per creare un segreto (ad esempio, denominato oke-kubeconfig-sa-token) con il seguente contenuto:
-
Ottenere il valore del token di autenticazione dell'account di servizio e assegnarne il valore (decodificato da base64) a una variabile di ambiente. Queste istruzioni si basano sul presupposto che si specifichi TOKEN come nome della variabile di ambiente. I comandi da immettere dipendono dal sistema operativo:
-
Per ottenere il valore del token di autenticazione dell'account di servizio in un ambiente MacOS, Linux o Unix, immettere il comando seguente:
TOKEN=`kubectl -n kube-system get secret oke-kubeconfig-sa-token -o jsonpath='{.data.token}' | base64 --decode`
-
Per ottenere il valore del token di autenticazione dell'account di servizio in un ambiente Windows:
-
Immettere il seguente comando:
kubectl -n kube-system get secret oke-kubeconfig-sa-token -o jsonpath='{.data.token}'
- Copiare l'output dal comando precedente e incollarlo in un decoder base64 (ad esempio, https://www.base64decode.org, https://www.base64decode.net o simile).
- Copiare l'output dal decoder base64.
-
Immettere il seguente comando:
TOKEN=`[<base64-decoded-output>]`
dove
<base64-decoded-output>
è l'output copiato dal decordo base64.
-
-
-
Aggiungere l'account di servizio (e il relativo token di autenticazione) come nuova definizione utente nel file kubeconfig immettendo il seguente comando kubectl:
kubectl config set-credentials <service-account-name> --token=$TOKEN
L'account di servizio (e il relativo token di autenticazione) viene aggiunto alla lista di utenti definiti nel file kubeconfig.
Ad esempio, per aggiungere l'account del servizio kubeconfig-sa e il relativo token di autenticazione al file kubeconfig, immettere:
kubectl config set-credentials kubeconfig-sa --token=$TOKEN
L'output del comando precedente conferma che l'account di servizio è stato aggiunto al file kubeconfig. Ad esempio:
User "kubeconfig-sa" set.
-
Impostare l'utente specificato nel file kubeconfig affinché il contesto corrente sia il nuovo utente dell'account di servizio creato, immettendo il seguente comando kubectl:
kubectl config set-context --current --user=<service-account-name>
Ad esempio:
kubectl config set-context --current --user=kubeconfig-sa
L'output del comando precedente conferma che il contesto corrente è stato modificato. Ad esempio:
Context "context-ctdiztdhezd" modified.
-
(Facoltativo) Per verificare che l'autenticazione funzioni come previsto, eseguire un comando kubectl per confermare che l'utente dell'account di servizio possa essere autenticato correttamente utilizzando il token di autenticazione dell'account di servizio.
Ad esempio, se in precedenza è stata distribuita un'applicazione Nginx di esempio nel cluster (vedere Distribuzione di un'applicazione Nginx di esempio in un cluster mediante Kubectl), immettere il comando seguente:
kubectl get pods -n kube-system
L'output del comando precedente mostra i pod in esecuzione sul cluster. Se il comando viene eseguito correttamente, l'utente dell'account di servizio nel file kubeconfig è stato autenticato correttamente utilizzando il token di autenticazione dell'account di servizio.
- Distribuire il file kubeconfig in base alle esigenze per consentire ad altri processi e strumenti (come gli strumenti di integrazione continua e distribuzione continua (CI/CD) di accedere al cluster.
Se in seguito si desidera rimuovere l'accesso al cluster dall'account di servizio, eliminare il segreto Kubernetes contenente il token di autenticazione dell'account di servizio immettendo il comando seguente:
kubectl -n kube-system delete secret <secret-name>