La registrazione di un cluster Kubernetes al di fuori di Google Cloud richiede i seguenti passaggi per aggiungere i prerequisiti generali.
Verifica la connettività di rete
Per registrare correttamente il cluster, devi assicurarti che i domini seguenti siano raggiungibili dal cluster Kubernetes.
cloudresourcemanager.googleapis.com
risolve i metadati relativi al progetto Google Cloud a cui è connesso il cluster.oauth2.googleapis.com
per ottenere token OAuth a breve durata per le operazioni dell'agente sugkeconnect.googleapis.com
.gkeconnect.googleapis.com
per stabilire il canale utilizzato per ricevere richieste da Google Cloud e segnalare le risposte.gkehub.googleapis.com
per creare risorse di appartenenza al parco risorse lato Google Cloud che corrispondono al cluster da connettere con Google Cloud.www.googleapis.com
per autenticare i token di servizio dalle richieste di servizio Google Cloud in entrata.gcr.io
estorage.googleapis.com
per eseguire il pull dell'immagine dell'agente GKE Connect.
Se vuoi registrare il cluster utilizzando Workload Identity, devono essere raggiungibili anche i seguenti domini:
securetoken.googleapis.com
iamcredentials.googleapis.com
sts.googleapis.com
Se utilizzi un proxy di Connect, devi aggiornare la lista consentita del proxy anche con i domini pertinenti.
Se utilizzi gcloud per registrare il cluster Kubernetes, questi domini devono essere raggiungibili anche nell'ambiente in cui esegui i comandi gcloud.
Utilizzo dei Controlli di servizio VPC
Se vuoi utilizzare i Controlli di servizio VPC per una maggiore sicurezza dei dati nell'applicazione, devi assicurarti che i seguenti servizi siano nel perimetro di servizio:
- API Resource Manager (
cloudresourcemanager.googleapis.com
) - API GKE Connect (
gkeconnect.googleapis.com
) - API Fleet (
gkehub.googleapis.com
)
Se vuoi registrare il cluster con Workload Identity abilitato, devi disporre anche dei seguenti servizi:
- API IAM Service Account Credentials (
iamcredentials.googleapis.com
) - API Security Token Service (
sts.googleapis.com
)
Devi anche configurare la connettività privata per l'accesso alle API pertinenti. Puoi scoprire come farlo nell'articolo Configurare la connettività privata.
Configura l'identità
Tutte le opzioni di registrazione manuale dei cluster al di fuori di Google Cloud richiedono la configurazione dell'autenticazione su Google. Ad esempio:
- Flex Workload Identity (consigliato dove disponibile). Puoi scoprire di più sui vantaggi dell'attivazione di Workload Identity del parco risorse in Utilizzare Workload Identity del parco risorse.
- Un account di servizio Google Cloud
I cluster collegati possono essere registrati con Workload Identity abilitato se il cluster soddisfa i nostri prerequisiti del cluster collegati, come descritto di seguito. In caso contrario, registra i cluster collegati con un account di servizio Google Cloud per l'autenticazione. La sezione successiva mostra come creare un account di servizio.
Crea un account di servizio Google Cloud utilizzando gcloud
Per registrare manualmente un cluster utilizzando un account di servizio Google Cloud, devi avere un file JSON contenente le credenziali dell'account di servizio. Per seguire il principio del privilegio minimo, ti consigliamo di creare un account di servizio distinto per ogni cluster Kubernetes che registri e di associarvi solo i ruoli IAM per il cluster corrispondente.
Per creare il file:
gcloud
Crea un account di servizio eseguendo questo comando:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
Elenca tutti gli account di servizio di un progetto eseguendo questo comando:
gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID
Se crei un account di servizio distinto per ogni cluster Kubernetes che registri, associa il ruolo IAM gkehub.connect all'account di servizio per il cluster corrispondente con una condizione IAM sul nome di appartenenza del cluster:
MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect" \
--condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"
In caso contrario, associa il ruolo all'account di servizio per tutti i cluster nel progetto senza la condizione.
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect"
Scarica il file JSON della chiave privata dell'account di servizio. Utilizzerai questo file quando registri un cluster:
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
--iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
--project=${FLEET_HOST_PROJECT_ID}
dove:
- FLEET_HOST_PROJECT_ID è l'ID progetto Google Cloud in cui vuoi registrare i cluster. Scopri come trovare questo valore.
- SERVICE_ACCOUNT_NAME è il nome visualizzato che scegli per [Account di servizio].
- MEMBERSHIP_NAME è il nome dell'appartenenza che scegli di rappresentare in modo univoco il cluster durante la registrazione.
- LOCAL_KEY_PATH è un percorso file locale in cui vuoi salvare la chiave privata dell'account di servizio, un file JSON. Ti consigliamo di assegnare un nome al file utilizzando il nome dell'account di servizio e l'ID progetto, ad esempio
/tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json
.
Prerequisiti del cluster collegati
A seconda del tipo di cluster Kubernetes di terze parti che vuoi registrare come cluster collegato, potresti dover soddisfare alcuni requisiti aggiuntivi per installare l'agente Connect e/o utilizzare Workload Identity.
Configura i vincoli di contesto di sicurezza (SCC) (cluster OpenShift)
Nei cluster OpenShift OKE e OKD, gli amministratori possono utilizzare le SCC per controllare le autorizzazioni per i pod. Per consentire l'installazione di Connect Agent nel cluster, devi creare una SCC personalizzata.
La seguente definizione di SCC di esempio specifica l'insieme di condizioni che l'agente di connessione deve eseguire per essere accettato nel cluster:
# Connect Agent SCC apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: gke-connect-scc allowPrivilegeEscalation: false # This is redundant with non-root + disallow privilege escalation, # but we provide it for defense in depth. requiredDropCapabilities: - ALL runAsUser: type: MustRunAsNonRoot seLinuxContext: type: RunAsAny supplementalGroups: type: MustRunAs ranges: - min: 1 max: 65535 fsGroup: type: MustRunAs ranges: - min: 1 max: 65535 volumes: - secret - projected readOnlyRootFilesystem: true seccompProfiles: - docker/default users: groups: # Grants all service accounts in the gke-connect namespace access to this SCC - system:serviceaccounts:gke-connect
Supponendo che tu abbia salvato la tua definizione di SCC come gke-connect-scc.yaml
, utilizza lo strumento a riga di comando OpenShift oc
per creare la SCC di gke-connect-scc
per il tuo cluster, nel seguente modo:
$ oc create -f gke-connect-scc.yaml
Per verificare che l'SCC personalizzato sia stato creato, esegui questo comando oc
:
$ oc get scc | grep gke-connect-scc
Requisiti di Fleet Workload Identity
Puoi registrare i cluster collegati se il mezzo Workload Identity è abilitato se la tua piattaforma crea un endpoint OIDC pubblico per il tuo cluster (o ti consente di crearne uno) o se hai abilitato il rilevamento dell'emittente dell'account di servizio di Kubernetes per il cluster. Se non riesci a soddisfare questi requisiti, devi registrare i cluster collegati con un account di servizio Google Cloud per l'autenticazione.
Per tipi di cluster specifici, consulta quanto segue:
- Cluster OpenShift: possono essere registrati con Workload Identity abilitato dopo aver configurato la SCC personalizzata, come descritto sopra.
- cluster Tipo: richiedi l'abilitazione del rilevatore dell'emittente dell'account di servizio per utilizzare Workload Identity del parco risorse. Questa funzionalità è abilitata per impostazione predefinita a partire dalla versione 1.20 di Kubernetes. Se devi attivare questa funzionalità, segui le istruzioni riportate in Proiezione del volume del token dell'account di servizio. Il rilevamento dell'emittente dell'account di servizio è abilitato automaticamente quando il progetto del volume del token dell'account di servizio è abilitato.
Che cosa succede dopo?
Segui le istruzioni per registrare un cluster.