Prima di iniziare

La registrazione di un cluster Kubernetes all'esterno di Google Cloud richiede i seguenti passaggi oltre al completamento dei prerequisiti generali.

Verifica la connettività di rete

Per registrare correttamente il cluster, devi assicurarti che i domini seguenti siano raggiungibili dal tuo 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 di breve durata per le operazioni degli agenti su gkeconnect.googleapis.com.
  • gkeconnect.googleapis.com per stabilire il canale utilizzato per ricevere le richieste da Google Cloud e generare risposte.
  • gkehub.googleapis.com per creare risorse di appartenenza del parco risorse lato Google Cloud corrispondenti al cluster che stai connettendo con Google Cloud.
  • www.googleapis.com per autenticare i token di servizio dalle richieste di servizio Google Cloud in entrata.
  • gcr.io e storage.googleapis.com per eseguire il pull dell'immagine dell'agente GKE Connect.

Se vuoi registrare il cluster utilizzando Workload Identity del parco risorse, devono essere raggiungibili anche i seguenti domini:

  • securetoken.googleapis.com
  • iamcredentials.googleapis.com
  • sts.googleapis.com

Se utilizzi un proxy per Connect, devi anche aggiornare la lista consentita del proxy con i domini pertinenti.

Se utilizzi gcloud per registrare il tuo 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 Controlli di servizio VPC per una maggiore sicurezza dei dati nella tua applicazione, devi assicurarti che i seguenti servizi siano all'interno del tuo 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 del parco risorse abilitato, devi avere anche i 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 in Configurare la connettività privata.

Configura identità

Tutte le opzioni di registrazione manuale dei cluster al di fuori di Google Cloud richiedono di configurare l'autenticazione su Google. Può trattarsi di:

I cluster collegati possono essere registrati con Workload Identity del parco risorse abilitato se il cluster soddisfa i prerequisiti del cluster collegato, 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, è necessario 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 registrato e di associare solo i ruoli IAM per il cluster corrispondente.

Per creare questo file, segui questi passaggi:

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 stai creando un account di servizio distinto per ogni cluster Kubernetes registrato, associa il ruolo IAM gkehub.connect all'account di servizio per il cluster corrispondente con una condizione IAM sul nome dell'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. Devi utilizzare 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 l'account di servizio.
  • MEMBERSHIP_NAME è il nome dell'appartenenza che scegli per 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, ovvero un file JSON. Ti consigliamo di assegnare un nome al file utilizzando il nome dell'account di servizio e il tuo ID progetto, ad esempio /tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json.

Prerequisiti del cluster collegato

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 del parco risorse.

Configura i vincoli del 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 dell'agente Connect nel cluster, devi creare una SCC personalizzata.

La definizione di SCC di esempio seguente specifica l'insieme di condizioni che l'agente Connect deve eseguire per poter 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 definizione di SCC come gke-connect-scc.yaml, utilizza lo strumento a riga di comando oc di OpenShift per creare la SCC gke-connect-scc per il tuo cluster, come indicato di seguito:

$ oc create -f gke-connect-scc.yaml

Per verificare che la SCC personalizzata sia stata creata, esegui questo comando oc:

$ oc get scc | grep gke-connect-scc

Requisiti di Workload Identity del parco risorse

Puoi registrare i cluster collegati con Workload Identity del parco risorse abilitato se la tua piattaforma crea un endpoint OIDC pubblico per il cluster (o ti consente di crearne uno) oppure se hai abilitato il rilevamento dell'emittente dell'account di servizio 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 del parco risorse abilitato dopo aver configurato SCC personalizzata, come descritto sopra.
  • Cluster di tipo: richiedi l'abilitazione del rilevamento dell'emittente dell'account di servizio per utilizzare Workload Identity del parco risorse. Questa opzione è abilitata per impostazione predefinita a partire da Kubernetes versione 1.20. Se devi abilitare questa funzionalità, segui le istruzioni in Proiezione del volume del token dell'account di servizio. Il rilevamento dell'emittente dell'account di servizio viene abilitato automaticamente quando il progetto del volume di token dell'account di servizio è abilitato.

Che cosa succede dopo?

Segui le istruzioni per registrare un cluster.