Questa pagina spiega come configurare l'autenticazione utilizzando un token di connessione per accedere ai cluster registrati esterni a Google Cloud. Dopo la configurazione, gli amministratori dei cluster potranno accedere ai cluster dalla Google Cloud console. Sono supportati molti tipi di token di connessione, come specificato in Autenticazione Kubernetes. Il metodo più semplice consiste nel creare un account di servizio Kubernetes (KSA) nel cluster e utilizzare il relativo token di connessione per accedere.
Altri metodi di autenticazione
In alternativa alla configurazione dell'autenticazione utilizzando un token di connessione, puoi configurare uno dei seguenti metodi di autenticazione a seconda delle esigenze della tua organizzazione:
Identità Google, che consente agli utenti di accedere utilizzando la propria Google Cloud identità. Utilizza questa opzione se i tuoi utenti hanno già accesso a Google Cloud con un'identità Google.
Se il cluster è configurato per utilizzare un provider di identità OIDC, puoi utilizzare questo per autenticare il cluster dalla Google Cloud console. Puoi scoprire come configurare OIDC per i cluster GKE nelle seguenti guide:
- Configura i cluster per GKE Identity Service con OIDC. Questa guida mostra come configurare l'autenticazione OIDC su base cluster per tutti i tipi di cluster GKE.
- Configura GKE Identity Service per un parco risorse. Questa opzione consente di configurare OIDC a livello di parco risorse per i tipi di cluster supportati. La configurazione a livello di parco risorse è supportata per i cluster GKE su Google Cloud, tutti i tipi di cluster GKE e i cluster collegati EKS su AWS.
Se questi metodi di autenticazione forniti da Google non sono adatti alla tua organizzazione, segui le istruzioni riportate in questa pagina per configurare l'autenticazione utilizzando un token di connessione.
Concedi i ruoli IAM per l'accesso tramite la Google Cloud console
Gli utenti che vogliono visualizzare i cluster connessi utilizzando la Google Cloud console devono disporre almeno dei seguenti ruoli IAM:
roles/container.viewer. Questo ruolo consente agli utenti di visualizzare le risorse dei container nella console, inclusa la pagina Cluster GKE. Google Cloud Per i dettagli sulle autorizzazioni incluse in questo ruolo, consulta la sezione Ruoli di Kubernetes Engine nella documentazione IAM.roles/gkehub.viewer. Questo ruolo consente agli utenti di visualizzare i cluster esterni Google Cloud nella Google Cloud console. Gli utenti non hanno bisogno di questo ruolo se il parco risorse non include cluster esterni Google Cloud. Per i dettagli sulle autorizzazioni incluse in questo ruolo, consulta la sezione Ruoli di GKE Hub nella documentazione IAM.
Esegui i seguenti comandi per concedere questi ruoli:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto del progetto host del parco risorse.EMAIL_ADDRESS: l'indirizzo email associato all' account Google Cloud dell'utente.
Per saperne di più sulla concessione dei ruoli IAM, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni nella documentazione IAM.
Configura il controllo dell'accesso basato sui ruoli
L'accesso ai cluster è controllato utilizzando il controllo dell'accesso basato sui ruoli (RBAC) di Kubernetes.
Ti consigliamo di creare un KSA per ogni utente che accede al cluster. L'utilizzo di un token di connessione è simile all'utilizzo di una password, quindi ogni utente deve avere il proprio account. L'accesso con il token di connessione del KSA fa sì che tutte le operazioni vengano eseguite come KSA, limitate dai ruoli RBAC detenuti dal KSA.
Il KSA deve avere almeno i seguenti ruoli RBAC nel cluster per accedervi tramite la console:
Crea e applica il ruolo RBAC cloud-console-reader
Gli utenti autenticati che vogliono accedere alle risorse di un cluster nella Google Cloud console
devono disporre delle autorizzazioni Kubernetes pertinenti. Se non vuoi concedere a questi utenti autorizzazioni più estese, come quelle di un amministratore del cluster, puoi creare un ruolo RBAC personalizzato che includa le autorizzazioni minime per visualizzare i nodi, i volumi permanenti, i pod e le classi di archiviazione del cluster. Puoi definire questo insieme di
autorizzazioni creando una ClusterRole risorsa RBAC,
cloud-console-reader, nel cluster.
cloud-console-reader concede agli utenti le autorizzazioni get, list e watch per i nodi, i volumi permanenti, i pod e le classi di archiviazione del cluster, che consentono loro di visualizzare i dettagli di queste risorse.
kubectl
Per creare il ClusterRole cloud-console-reader e applicarlo al cluster, esegui il comando seguente:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
Puoi quindi concedere questo ruolo ai KSA come descritto nella sezione successiva.
Crea e autorizza un KSA
kubectl
Per creare un KSA e associarvi le autorizzazioni:
Crea le risorse KSA e
ClusterRoleBindingper associare iviewecloud-console-readerRBAC di KubernetesClusterRolesal KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}Sostituisci quanto segue:
KSA_NAME: il nome che scegli per il KSAVIEW_BINDING_NAME: il nome che scegli per la risorsaClusterRoleBindingview; puoi assegnare qualsiasi nome, ma potrebbe essere più facile assegnare il nome del KSACLOUD_CONSOLE_READER_BINDING_NAME: il nome che scegli per la risorsaClusterRoleBindingcloud-console-reader; puoi anche assegnare qualsiasi nome
A seconda dell'accesso che deve avere il account di servizio, associa altri ruoli al KSA. Per le opzioni, consulta i ruoli predefiniti di Kubernetes.
Ad esempio, se vuoi eseguire il deployment di un'applicazione Kubernetes da Cloud Marketplace, associa il ruolo
cluster-adminal KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Sostituisci
BINDING_NAMEcon il nome dell'associazione del ruolo del cluster per il account di servizio.
Autorizza altri account
kubectl
Per ogni altro utente o account di servizio che ottiene l'accesso al cluster, crea risorse ClusterRoleBinding per associare i ruoli view e cloud-console-reader al relativo account:
Associa i
viewecloud-console-readerClusterRoles:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}Sostituisci quanto segue:
ACCOUNT_NAME: il account di servizio KubernetesVIEW_BINDING_NAME: il nome che scegli per la risorsaClusterRoleBindingview; puoi assegnare qualsiasi nome, ma potrebbe essere più facile assegnare il nome dell'utente o del account di servizioCLOUD_CONSOLE_READER_BINDING_NAME: il nome che scegli per la risorsaClusterRoleBindingview; puoi anche assegnare qualsiasi nome
Associa altri ruoli, a seconda dell'accesso che deve avere l'account. Per le opzioni, consulta i ruoli predefiniti di Kubernetes.
Ad esempio, per associare il ruolo
cluster-admin, esegui il comando seguente:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Sostituisci
BINDING_NAMEcon il nome dell'associazione del ruolo del cluster per il account di servizio.
Recupera il token di connessione del KSA
kubectl
Per acquisire il token di connessione del KSA, esegui il comando seguente:
SECRET_NAME=KSA_NAME-token
kubectl apply -f - << __EOF__
apiVersion: v1
kind: Secret
metadata:
name: "${SECRET_NAME}"
annotations:
kubernetes.io/service-account.name: "${KSA_NAME}"
type: kubernetes.io/service-account-token
__EOF__
until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do
echo "waiting for token..." >&2;
sleep 1;
done
kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Sostituisci KSA_NAME con il nome che scegli per il KSA.
Nell'output di questo comando, copia il token e salvalo in modo che gli utenti possano utilizzare il token per accedere alla Google Cloud console.