Quando il tuo ambiente richiede la gestione diretta delle risorse Kubernetes da riga di comando, l'installazione di Config Sync con i comandi kubectl ti consente di sincronizzare le configurazioni dei cluster da una fonte di verità centrale. Sebbene questo metodo di installazione sia supportato, non è compatibile con la consoleCloud de Confiance o con Google Cloud CLI. Per gestire Config Sync utilizzando questi strumenti, consulta Personalizza l'installazione di Config Sync.
Prima di iniziare
Questa sezione descrive i prerequisiti da soddisfare prima di installare Config Sync utilizzando kubectl.
Prepara l'ambiente locale
Prima di installare Config Sync, assicurati di aver preparato l'ambiente locale completando le seguenti attività:
Creare o avere accesso a una fonte di riferimento.
Installa e inizializza Google Cloud CLI, che fornisce i comandi
gcloud,kubectlenomosutilizzati in queste istruzioni. Se utilizzi Cloud Shell, Google Cloud CLI è preinstallato.kubectlnon viene installato per impostazione predefinita da Google Cloud CLI. Per installarekubectl, utilizza il seguente comando:gcloud components install kubectlAutenticati su Cloud de Confiance by S3NS utilizzando il comando
gcloud auth loginin modo da poter scaricare i componenti di Config Sync.
Prepara i cluster
Crea o accedi a un cluster Google Kubernetes Engine che soddisfi i requisiti per Config Sync.
Prepara le autorizzazioni
L'utente Cloud de Confiance che installa Config Sync deve disporre delle autorizzazioni IAM per creare nuovi ruoli nel cluster. Se necessario, concedi questi ruoli con i seguenti comandi:
gcloud container clusters get-credentials CLUSTER_NAME
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user USER_ACCOUNT
Sostituisci quanto segue:
CLUSTER_NAME: il nome del tuo clusterUSER_ACCOUNT: l'indirizzo email del tuo account Cloud de Confiance
A seconda di come hai configurato Google Cloud CLI sul tuo sistema locale,
potresti dover aggiungere i campi --project e --zone.
Se devi concedere a Config Sync l'accesso a OCI
utilizzando gcpserviceaccount come tipo di autenticazione, per creare un'associazione di policy
devi disporre anche dell'autorizzazione iam.serviceAccounts.setIamPolicy.
Puoi ottenere questa autorizzazione concedendo il ruolo IAM Amministratore service account (roles/iam.serviceAccountAdmin). Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso.
Registra un cluster
Per registrare un cluster in Config Sync, completa i seguenti passaggi:
- Esegui il deployment di Config Sync
- Concedi a Config Sync l'accesso di sola lettura a uno dei seguenti elementi:
- Configura Config Sync
Esegui il deployment di Config Sync
Dopo aver verificato di soddisfare tutti i prerequisiti, puoi eseguire il deployment di Config Sync scaricando e applicando un manifest YAML:
Scarica l'ultima versione dei manifest di Config Sync utilizzando il seguente comando. Per scaricare una versione specifica, consulta Download.
gcloud storage cp gs://config-management-release/released/latest/config-sync.tar.gz config-sync.tar.gz
Estrai l'archivio:
tar -xzvf config-sync.tar.gz
Nell'archivio che hai estratto nel passaggio precedente, segui le istruzioni nel file
README.mdfornito per modificare la kustomization.Per aggiornare l'installazione di Config Sync, applica il manifest di cui è stato eseguito il rendering che hai creato seguendo le istruzioni di
README.md:kubectl apply -f CONFIG_SYNC_MANIFEST
Sostituisci
CONFIG_SYNC_MANIFESTcon il nome del manifest sottoposto a rendering.Sostituisci il comando
nomossu tutti i client con la nuova versione. Questa modifica garantisce che il comandonomospossa sempre ottenere lo stato di tutti i cluster registrati e convalidare le relative configurazioni.
Se l'operazione non riesce a causa di un problema con Config Sync che non è dovuto a un errore di sintassi YAML o JSON, l'oggetto potrebbe essere istanziato nel cluster, ma potrebbe non funzionare correttamente. In questo caso, puoi utilizzare il comando nomos
status per verificare la presenza di errori nell'oggetto.
Un'installazione valida senza problemi ha lo stato PENDING o SYNCED.
Un'installazione non valida ha lo stato NOT CONFIGURED ed elenca uno dei seguenti errori:
missing git-creds Secretgit-creds Secret is missing the key specified by secretType
Per risolvere il problema, correggi l'errore di configurazione. A seconda del tipo di errore, potrebbe essere necessario applicare nuovamente il manifest di Config Sync al cluster.
Se il problema è che hai dimenticato di creare il secret git-creds, Config Sync lo rileva non appena lo crei e non è necessario applicare nuovamente la configurazione.
Concedi l'accesso di sola lettura a Config Sync
Se archivi le configurazioni in Git, devi concedere a Config Sync l'accesso di sola lettura a Git. Se archivi le configurazioni come immagini OCI, devi concedere a Config Sync l'accesso di sola lettura a OCI. Se archivi le tue configurazioni in Helm, devi concedere a Config Sync l'accesso di sola lettura a Helm.
Concedi a Config Sync l'accesso di sola lettura a Git
Config Sync richiede l'accesso di sola lettura al tuo repository Git per poter leggere le configurazioni di cui è stato eseguito il commit nel repository e applicarle ai tuoi cluster.
Se il repository non richiede l'autenticazione per l'accesso in sola lettura, puoi continuare a configurare Config Sync e utilizzare none come tipo di autenticazione. Ad esempio, se puoi sfogliare il repository utilizzando un'interfaccia web senza eseguire l'accesso o se puoi utilizzare git
clone per creare un clone del repository localmente senza fornire credenziali o utilizzando credenziali salvate, non è necessario eseguire l'autenticazione. In questo caso, non è necessario creare un secret.
Tuttavia, la maggior parte degli utenti deve creare le credenziali perché l'accesso in lettura al proprio repository è limitato. Se sono richieste credenziali, queste vengono archiviate nel secret git-creds su ogni cluster registrato (a meno che tu non utilizzi un account di servizio Google). Il secret deve essere denominato git-creds perché si tratta di un valore fisso.
Config Sync supporta i seguenti meccanismi di autenticazione:
- Coppia di chiavi SSH (
ssh) - Cookiefile (
cookiefile) - Token (
token) - Account di servizio Google (
gcpserviceaccount) - Account di servizio predefinito di Compute Engine (
gcenode) - App GitHub (
githubapp)
Il meccanismo che scegli dipende da ciò che è supportato dal tuo repository. In genere, consigliamo di utilizzare una coppia di chiavi SSH. Sia GitHub che Bitbucket supportano l'utilizzo di una coppia di chiavi SSH. Tuttavia, se utilizzi un repository in Cloud Source Repositories o Secure Source Manager, ti consigliamo di utilizzare un account di servizio Google, poiché la procedura è più semplice. Se la tua organizzazione ospita il tuo repository e non sai quali metodi di autenticazione sono supportati, contatta l'amministratore.
Per utilizzare un repository in Cloud Source Repositories come repository Config Sync, completa i seguenti passaggi per recuperare l'URL di Cloud Source Repositories:
Elenca tutti i repository:
gcloud source repos listDall'output, copia l'URL del repository che vuoi utilizzare. Ad esempio:
REPO_NAME PROJECT_ID URL my-repo my-project https://source.developers.google.com/p/my-project/r/my-repo-csrDevi utilizzare questo URL quando configuri Config Sync nella sezione seguente. Se configuri Config Sync utilizzando la consoleCloud de Confiance , aggiungi l'URL nel campo URL. Se configuri Config Sync utilizzando Google Cloud CLI, aggiungi l'URL al campo
syncRepodel file di configurazione.
Coppia di chiavi SSH
Una coppia di chiavi SSH è costituita da due file, una chiave pubblica e una chiave privata. La chiave pubblica ha in genere un'estensione .pub.
Per utilizzare una coppia di chiavi SSH, completa i seguenti passaggi:
Crea una coppia di chiavi SSH per consentire a Config Sync di eseguire l'autenticazione nel repository Git. Questo passaggio è necessario se devi autenticarti nel repository per clonarlo o leggerlo. Salta questo passaggio se un amministratore della sicurezza ti fornisce una coppia di chiavi. Puoi utilizzare una singola coppia di chiavi per tutti i cluster o una coppia di chiavi per cluster, a seconda dei requisiti di sicurezza e conformità.
Il comando seguente crea una chiave RSA a 4096 bit. I valori più bassi non sono consigliati:
ssh-keygen -t rsa -b 4096 \ -C "GIT_REPOSITORY_USERNAME" \ -N '' \ -f /path/to/KEYPAIR_FILENAME
Sostituisci quanto segue:
GIT_REPOSITORY_USERNAME: il nome utente che vuoi che Config Sync utilizzi per l'autenticazione nel repository/path/to/KEYPAIR_FILENAME: un percorso per la coppia di chiavi
Se utilizzi un host di repository Git di terze parti come GitHub o se vuoi utilizzare un account di servizio con Cloud Source Repositories, ti consigliamo di utilizzare un account separato.
Configura il repository per riconoscere la chiave pubblica appena creata. Consulta la documentazione del tuo provider host Git. Per comodità, sono incluse le istruzioni per alcuni provider host Git più diffusi:
- Cloud Source Repositories
- Bitbucket
- GitHub Ti consigliamo di creare chiavi di deployment separate per fornire l'accesso di sola lettura a un singolo repository GitHub.
- GitLab
Aggiungi la chiave privata a un nuovo secret nel cluster:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
Sostituisci
/path/to/KEYPAIR_PRIVATE_KEY_FILENAMEcon il nome della chiave privata (quella senza il suffisso.pub).(Consigliato) Per configurare il controllo degli host noti utilizzando l'autenticazione SSH, puoi aggiungere la chiave degli host noti al campo
data.known_hostsnel secretgit_creds. Per disattivare il controllo diknown_hosts, puoi rimuovere il campoknown_hostsdal secret. Per aggiungere la chiave degli host noti, esegui:kubectl edit secret git-creds \ --namespace=config-management-system
Poi, in
data, aggiungi la voce degli host noti:known_hosts: KNOWN_HOSTS_KEY
Elimina la chiave privata dal disco locale oppure proteggila.
Quando configuri Config Sync e aggiungi l'URL del tuo repository Git, utilizza il protocollo SSH. Se utilizzi un repository in Cloud Source Repositories, devi utilizzare il seguente formato quando inserisci l'URL:
ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAMESostituisci quanto segue:
EMAIL: il tuo nome utente Cloud de ConfiancePROJECT_ID: l'ID del progetto Cloud de Confiancein cui si trova il repositoryREPO_NAME: il nome del repository
File dei cookie
La procedura per acquisire un cookiefile dipende dalla configurazione del repository. Per un esempio, consulta Genera credenziali statiche nella documentazione di Cloud Source Repositories.
Le credenziali vengono in genere archiviate nel file .gitcookies nella tua home directory o potrebbero essere fornite da un amministratore della sicurezza.
Per utilizzare un cookiefile, segui questi passaggi:
Dopo aver creato e ottenuto il
cookiefile, aggiungilo a un nuovo secret nel cluster.Se non utilizzi un proxy HTTPS, crea il secret con il seguente comando:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE
Se devi utilizzare un proxy HTTPS, aggiungilo al secret insieme a
cookiefileeseguendo questo comando:kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE \ --from-literal=https_proxy=HTTPS_PROXY_URL
Sostituisci quanto segue:
/path/to/COOKIEFILE: il percorso e il nome file appropriatiHTTPS_PROXY_URL: l'URL del proxy HTTPS che utilizzi per comunicare con il repository Git
Proteggi i contenuti del
cookiefile, se ti occorre ancora a livello locale. In caso contrario, eliminalo.
Token
Se la tua organizzazione non consente l'uso di chiavi SSH, potresti preferire l'utilizzo di un token. Con Config Sync, puoi utilizzare i token di accesso personali (PAT) di GitHub, i PAT o le chiavi di deployment di GitLab o la password per l'app di Bitbucket come token.
Per creare un secret utilizzando il token, completa i seguenti passaggi:
Crea un token utilizzando GitHub, GitLab o Bitbucket:
- GitHub: crea un PAT.
Concedi al token l'ambito
repoin modo che possa leggere da repository privati. Poiché associ un PAT a un account GitHub, ti consigliamo inoltre di creare un utente della macchina e associare il tuo PAT a quest'ultimo. - GitLab: crea un PAT o crea un token di deployment
- Bitbucket: Crea una password per l'app.
- GitHub: crea un PAT.
Concedi al token l'ambito
Dopo aver creato e ottenuto il token, aggiungilo a un nuovo secret nel cluster.
Se non utilizzi un proxy HTTPS, crea il secret con il seguente comando:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace="config-management-system" \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN
Sostituisci quanto segue:
USERNAME: il nome utente che vuoi utilizzare.TOKEN: il token creato nel passaggio precedente.
Se devi utilizzare un proxy HTTPS, aggiungilo al secret insieme a
usernameetokeneseguendo il seguente comando:kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN \ --from-literal=https_proxy=HTTPS_PROXY_URL
Sostituisci quanto segue:
USERNAME: il nome utente che vuoi utilizzare.TOKEN: il token creato nel passaggio precedente.HTTPS_PROXY_URL: l'URL del proxy HTTPS che utilizzi per comunicare con il repository Git.
Proteggi il token se ti occorre ancora a livello locale. In caso contrario, eliminalo.
Service account Google
Se il tuo repository si trova in Cloud Source Repositories o in Secure Source Manager e il tuo cluster utilizza GKE Workload Identity Federation for GKE o Workload Identity Federation for GKE del parco risorse, puoi concedere a Config Sync l'accesso a un repository nello stesso progetto del tuo cluster gestito utilizzando un account di servizio Google.
- Se non hai ancora un account di servizio, creane uno.
Concedi i ruoli IAM corretti al account di servizio in modo che possa accedere al repository:
Cloud Source Repositories
Concedi il ruolo IAM Cloud Source Repositories Reader (
roles/source.reader) al account di servizio Google. Per saperne di più su ruoli e autorizzazioni di Cloud Source Repositories, consulta Concedi le autorizzazioni per visualizzare i repository.Concedi l'autorizzazione a livello di progetto se le stesse autorizzazioni si applicano a tutti i repository del progetto.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/source.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com"Concedi l'autorizzazione specifica per il repository se vuoi che i service account abbiano livelli di accesso diversi per ogni repository del progetto.
gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
Secure Source Manager
Concedi i ruoli IAM Secure Source Manager Instance Accessor (
roles/securesourcemanager.instanceAccessor) e Secure Source Manager Repo Reader (roles/securesourcemanager.repoReader) al account di servizio Google. Per saperne di più sui ruoli e sulle autorizzazioni di Secure Source Manager, consulta Gestione dei ruoli del repository.Concedi l'autorizzazione a livello di progetto se le stesse autorizzazioni si applicano a tutti i repository del progetto.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/securesourcemanager.instanceAccessor \ --member="serviceAccount:GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com"gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/securesourcemanager.repoReader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com"Per concedere autorizzazioni specifiche per il repository, puoi utilizzare l'interfaccia web di Secure Source Manager per il repository. Per saperne di più, consulta Concedi agli utenti i ruoli a livello di repository.
Se configuri Config Sync utilizzando la console Cloud de Confiance , seleziona Workload Identity Federation for GKE come Tipo di autenticazione e poi aggiungi l'indirizzo email del tuo account di servizio.
Se configuri Config Sync utilizzando Google Cloud CLI, aggiungi
gcpserviceaccountcomesecretTypee poi aggiungi l'indirizzo email del tuo service account agcpServiceAccountEmail.Se utilizzi un repository in Secure Source Manager, devi utilizzare il seguente formato quando configuri Config Sync e aggiungi l'URL del tuo repository Git:
https://INSTANCE_ID-PROJECT_NUMBER-git.LOCATION.sourcemanager.dev/PROJECT_ID/REPO_NAME.gitSostituisci quanto segue:
INSTANCE_ID: il nome dell'istanza Secure Source Manager.PROJECT_ID: l'ID del progetto Cloud de Confiance in cui si trova l'istanza.PROJECT_NUMBER: il numero di progetto Cloud de Confiance in cui si trova l'istanza.LOCATION: la regione in cui si trova l'istanza.REPO_NAME: il nome del repository.
Dopo aver configurato Config Sync, crea un'associazione dei criteri IAM tra l'account di servizio Kubernetes e l'account di servizio Google. L'account di servizio Kubernetes non viene creato finché non configuri Config Sync per la prima volta.
Se utilizzi cluster registrati in un parco risorse, devi creare l'associazione delle policy una sola volta per parco risorse. Tutti i cluster registrati in un parco risorse condividono lo stesso pool di federazione delle identità per i workload per GKE. Con il concetto di identicità del parco risorse, se aggiungi la policy IAM al tuo account di servizio Kubernetes in un cluster, anche il account di servizio Kubernetes dello stesso spazio dei nomi in altri cluster dello stesso parco risorse riceve la stessa policy IAM.
Questa associazione consente al ServiceAccount Kubernetes di Config Sync di agire come account di servizio Google:
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog[config-management-system/KUBERNETES_SERVICEACCOUNT]" \ --project=PROJECT_ID
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto dell'organizzazione.FLEET_HOST_PROJECT_ID: se utilizzi Workload Identity Federation for GKE, questo valore corrisponde aPROJECT_ID. Se utilizzi Workload Identity Federation for GKE per i parchi risorse, questo è l'ID progetto del parco risorse in cui è registrato il cluster.GSA_NAME: il account di servizio Google personalizzato che vuoi utilizzare per connetterti a Secure Source Manager o Cloud Source Repositories.KUBERNETES_SERVICEACCOUNT: il ServiceAccount Kubernetes per il reconciler:- Per i repository root, se il nome
RootSyncèroot-sync, utilizzaroot-reconciler. In caso contrario, utilizzaroot-reconciler-ROOT_SYNC_NAME. Se installi Config Sync utilizzando la console Cloud de Confiance o Google Cloud CLI, Config Sync crea automaticamente un oggettoRootSyncdenominatoroot-sync.
- Per i repository root, se il nome
REPOSITORY: il nome del repository.POLICY_FILE: il file JSON o YAML con la policy di Identity and Access Management.
Service account Compute Engine predefinito
Se il tuo repository si trova in Cloud Source Repositories
e il tuo cluster è GKE con Workload Identity Federation for GKE disabilitato,
puoi utilizzare gcenode come tipo di autenticazione.
Se configuri Config Sync utilizzando la console Cloud de Confiance , seleziona Repository Google Cloud come Tipo di autenticazione.
Se configuri Config Sync utilizzando Google Cloud CLI, aggiungi gcenode come secretType.
Se selezioni Repository Google Cloud o gcenode, puoi utilizzare il account di servizio predefinito di Compute Engine. Devi concedere il ruolo IAM Cloud Source Repositories Reader (roles/source.reader) al account di servizio predefinito di Compute Engine. Per saperne di più sui ruoli e sulle autorizzazioni di Cloud Source Repositories, consulta Concedi le autorizzazioni per visualizzare i repository.
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/source.reader \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com"
Sostituisci PROJECT_ID con l'ID progetto della tua organizzazione e PROJECT_NUMBER con il numero di progetto della tua organizzazione.
App GitHub
Se il tuo repository è in GitHub, puoi utilizzare githubapp come tipo di autenticazione.
Per utilizzare un'app GitHub, completa i seguenti passaggi:
Segui le istruzioni su GitHub per eseguire il provisioning di un'app GitHub e concederle l'autorizzazione di lettura dal tuo repository.
Aggiungi la configurazione dell'app GitHub a un nuovo secret nel cluster:
Utilizzo dell'ID client
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-client-id=CLIENT_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
- Sostituisci
CLIENT_IDcon l'ID client dell'app GitHub. - Sostituisci
INSTALLATION_IDcon l'ID installazione dell'app GitHub. - Sostituisci
/path/to/GITHUB_PRIVATE_KEYcon il nome del file contenente la chiave privata. - Sostituisci
BASE_URLcon l'URL di base per l'endpoint API GitHub. Questo è necessario solo quando il repository non è ospitato su www.github.com. In caso contrario, l'argomento può essere omesso e il valore predefinito saràhttps://api.github.com/.
Utilizzo dell'ID applicazione
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-application-id=APPLICATION_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
- Sostituisci
APPLICATION_IDcon l'ID applicazione dell'app GitHub. - Sostituisci
INSTALLATION_IDcon l'ID installazione dell'app GitHub. - Sostituisci
/path/to/GITHUB_PRIVATE_KEYcon il nome del file contenente la chiave privata. - Sostituisci
BASE_URLcon l'URL di base per l'endpoint API GitHub. Questo è necessario solo quando il repository non è ospitato su www.github.com. In caso contrario, l'argomento può essere omesso e il valore predefinito saràhttps://api.github.com/.
- Sostituisci
Elimina la chiave privata dal disco locale oppure proteggila.
Quando configuri Config Sync e aggiungi l'URL del tuo repository Git, utilizza il tipo di autenticazione
githubapp.
Concedi a Config Sync l'accesso di sola lettura a OCI
Config Sync richiede l'accesso di sola lettura all'immagine OCI archiviata in Artifact Registry per poter leggere le configurazioni incluse nell'immagine e applicarle ai cluster.
Se l'immagine non richiede l'autenticazione per l'accesso di sola lettura, puoi continuare a configurare Config Sync e utilizzare none come tipo di autenticazione. Ad esempio, se l'immagine è pubblica e accessibile a chiunque su internet, non è necessario eseguire l'autenticazione.
Tuttavia, la maggior parte degli utenti deve creare credenziali per accedere alle immagini limitate. Config Sync supporta i seguenti meccanismi di autenticazione:
- ServiceAccount Kubernetes (
k8sserviceaccount) Account di servizio predefinito di Compute Engine (
gcenode)
ServiceAccount Kubernetes
Puoi utilizzare un ServiceAccount Kubernetes come tipo di autenticazione se archivi l'immagine OCI in Artifact Registry e il tuo cluster utilizza GKE Workload Identity Federation for GKE o Workload Identity Federation for GKE del parco risorse.
Concedi il ruolo Artifact Registry Reader (roles/artifactregistry.reader)
sul progetto o sul repository al ServiceAccount Kubernetes. Per saperne di più su ruoli e autorizzazioni di Artifact Registry, consulta Configura ruoli e autorizzazioni per Artifact Registry.
Concedi l'autorizzazione a livello di progetto se le stesse autorizzazioni si applicano a tutti i repository nel progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --condition=NoneConcedi l'autorizzazione specifica per il repository se vuoi che i service account abbiano livelli di accesso diversi per ogni repository nel tuo progetto:
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --project=PROJECT_ID \ --condition=None
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto dell'organizzazione.FLEET_HOST_PROJECT_NUMBER: se utilizzi Workload Identity Federation for GKE, questo è lo stesso numero di progetto diPROJECT_ID. Se utilizzi Workload Identity Federation for GKE del parco risorse, questo è il numero di progetto del parco risorse in cui è registrato il tuo cluster.FLEET_HOST_PROJECT_ID: se utilizzi Workload Identity Federation for GKE, questo valore corrisponde aPROJECT_ID. Se utilizzi Workload Identity Federation for GKE per i parchi risorse, questo è l'ID progetto del parco risorse in cui è registrato il cluster.KUBERNETES_SERVICEACCOUNT: il ServiceAccount Kubernetes per il reconciler:- Per i repository root, se il nome
RootSyncèroot-sync, utilizzaroot-reconciler. In caso contrario, utilizzaroot-reconciler-ROOT_SYNC_NAME. Se installi Config Sync utilizzando la console Cloud de Confiance o Google Cloud CLI, Config Sync crea automaticamente un oggettoRootSyncdenominatoroot-sync. REPOSITORY: l'ID del repository.LOCATION: la località regionale o multiregionale del repository.
Service account Compute Engine predefinito
Se archivi l'immagine OCI in Artifact Registry e il tuo cluster è GKE con Workload Identity Federation for GKE disabilitato, puoi utilizzare gcenode come tipo di autenticazione.
Config Sync utilizza il account di servizio predefinito di Compute Engine.
Devi concedere al account di servizio predefinito di Compute Engine l'accesso in lettura ad Artifact Registry.
Concedi al account di servizio Compute Engine l'autorizzazione in lettura per Artifact Registry eseguendo questo comando:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com \
--role=roles/artifactregistry.reader
Sostituisci PROJECT_ID con l'ID progetto della tua organizzazione e PROJECT_NUMBER con il numero di progetto della tua organizzazione.
Configura Config Sync per un'autorità di certificazione
Per i server configurati con certificati di un'autorità di certificazione (CA) non ancora attendibile, Config Sync può essere configurato in modo da utilizzare un certificato CA per verificare le connessioni HTTPS al server. Questa opzione è supportata per i server Git, Helm o OCI. Il certificato CA deve includere certificati SSL completi (radice/intermedio/foglia).
Se il tuo server utilizza già una CA attendibile o non ti connetti tramite HTTPS, puoi saltare questo passaggio e lasciare caCertSecretRef non impostato.
RootSync
Recupera il certificato CA utilizzato per emettere il certificato per il tuo server Git e salvalo in un file.
Per gli oggetti
RootSync, il secret deve essere creato nello spazio dei nomiconfig-management-system. Ad esempio:kubectl create ns config-management-system &&
kubectl create secret generic ROOT_CA_CERT_SECRET_NAME
--namespace=config-management-system
--from-file=cert=/path/to/CA_CERT_FILEQuando configuri Config Sync, imposta il valore del campo
caCertSecretRef.namenell'oggettoRootSyncsu ROOT_CA_CERT_SECRET_NAME.
RepoSync
Recupera il certificato CA utilizzato per emettere il certificato per il tuo server Git e salvalo in un file.
Per gli oggetti
RepoSync, il secret deve essere creato nello stesso spazio dei nomi di RepoSync. Ad esempio:kubectl create ns REPO_SYNC_NAMESPACE &&
kubectl create secret generic NAMESPACE_CA_CERT_SECRET_NAME
--namespace=REPO_SYNC_NAMESPACE
--from-file=cert=/path/to/CA_CERT_FILEQuando configuri
RepoSync, imposta il valore del campocaCertSecretRef.namenell'oggettoRepoSyncsu NAMESPACE_CA_CERT_SECRET_NAME.
Concedi a Config Sync l'accesso di sola lettura a Helm
Config Sync richiede l'accesso di sola lettura al repository Helm per poter leggere i grafici Helm nel repository e installarli nei cluster.
Se il repository non richiede l'autenticazione per l'accesso in sola lettura, puoi continuare a configurare Config Sync e utilizzare none come tipo di autenticazione. Ad esempio, se il tuo repository Helm è pubblico e chiunque su internet può accedervi, non è necessario eseguire l'autenticazione.
Tuttavia, la maggior parte degli utenti deve creare credenziali per accedere ai repository Helm privati. Config Sync supporta i seguenti meccanismi di autenticazione:
- Token (
token) - ServiceAccount Kubernetes (
k8sserviceaccount) - Account di servizio predefinito di Compute Engine (
gcenode)
Token
Crea un Secret con un nome utente e una password del repository Helm:
kubectl create secret generic SECRET_NAME \
--namespace=config-management-system \
--from-literal=username=USERNAME \
--from-literal=password=PASSWORD
Sostituisci quanto segue:
SECRET_NAME: il nome che vuoi assegnare al secret.USERNAME: il nome utente del repository Helm.PASSWORD: la password del repository Helm.
Quando configuri Config Sync, utilizzerai il nome del Secret che hai scelto per spec.helm.secretRef.name.
ServiceAccount Kubernetes
Puoi utilizzare un ServiceAccount Kubernetes come tipo di autenticazione se archivi il grafico Helm in Artifact Registry e il tuo cluster utilizza GKE Workload Identity Federation for GKE o Workload Identity Federation for GKE del parco risorse.
Concedi il ruolo Artifact Registry Reader (roles/artifactregistry.reader)
sul progetto o sul repository al ServiceAccount Kubernetes. Per saperne di più su ruoli e autorizzazioni di Artifact Registry, consulta Configura ruoli e autorizzazioni per Artifact Registry.
Concedi l'autorizzazione a livello di progetto se le stesse autorizzazioni si applicano a tutti i repository nel progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --condition=NoneConcedi l'autorizzazione specifica per il repository se vuoi che i service account abbiano livelli di accesso diversi per ogni repository nel tuo progetto:
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.s3ns.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \ --project=PROJECT_ID \ --condition=None
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto dell'organizzazione.FLEET_HOST_PROJECT_NUMBER: se utilizzi Workload Identity Federation for GKE, questo è lo stesso numero di progetto diPROJECT_ID. Se utilizzi Workload Identity Federation for GKE del parco risorse, questo è il numero di progetto del parco risorse in cui è registrato il tuo cluster.FLEET_HOST_PROJECT_ID: se utilizzi Workload Identity Federation for GKE, questo valore corrisponde aPROJECT_ID. Se utilizzi Workload Identity Federation for GKE per i parchi risorse, questo è l'ID progetto del parco risorse in cui è registrato il cluster.KUBERNETES_SERVICEACCOUNT: il ServiceAccount Kubernetes per il reconciler:- Per i repository root, se il nome
RootSyncèroot-sync, utilizzaroot-reconciler. In caso contrario, utilizzaroot-reconciler-ROOT_SYNC_NAME. REPOSITORY: l'ID del repository.LOCATION: la località regionale o multiregionale del repository.
Service account Compute Engine predefinito
Se archivi il grafico Helm in Artifact Registry e il tuo cluster è GKE con Workload Identity Federation for GKE disabilitato, puoi utilizzare gcenode come tipo di autenticazione.
Config Sync utilizza il account di servizio predefinito di Compute Engine.
Devi concedere al account di servizio predefinito di Compute Engine l'accesso in lettura ad Artifact Registry. Potresti dover concedere l'ambito di accesso storage-ro per concedere l'autorizzazione di sola lettura per eseguire il pull delle immagini.
Concedi al account di servizio Compute Engine l'autorizzazione in lettura per Artifact Registry:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com \
--role=roles/artifactregistry.reader
Sostituisci PROJECT_ID con l'ID progetto della tua organizzazione e PROJECT_NUMBER con il numero di progetto della tua organizzazione.
Configura Config Sync
Per configurare Config Sync dal repository root, devi creare un oggetto RootSync che sincronizzi il repository root con il cluster. Puoi creare un solo repository root per cluster e il repository root può essere un repository non strutturato o un repository gerarchico.
Se utilizzi il webhook di ammissione di Config Sync (il webhook di ammissione è disabilitato per impostazione predefinita) e installi Config Sync in un cluster privato, aggiungi una regola firewall per consentire la porta
10250. Il webhook di ammissione di Config Sync utilizza la porta10250per la prevenzione della deviazione.Attendi che le CRD
RootSynceRepoSyncsiano disponibili:until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; do date; sleep 1; echo ""; doneSalva uno dei seguenti manifest come
root-sync.yaml. Utilizza la versione del manifest corrispondente al tipo di origine delle tue configurazioni.Git
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceType: git sourceFormat: unstructured git: repo: ROOT_REPOSITORY revision: ROOT_REVISION branch: ROOT_BRANCH dir: ROOT_DIRECTORY auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL secretRef: name: ROOT_SECRET_NAME noSSLVerify: ROOT_NO_SSL_VERIFY caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAMESostituisci quanto segue:
ROOT_SYNC_NAME: aggiungi il nome dell'oggetto RootSync.ROOT_REPOSITORY: aggiungi l'URL del repository Git da utilizzare come repository root. Puoi inserire gli URL utilizzando il protocollo HTTPS o SSH. Ad esempio,https://github.com/GoogleCloudPlatform/anthos-config-management-samplesutilizza il protocollo HTTPS. Questo campo è obbligatorio.ROOT_REVISION: aggiungi la revisione Git (tag o hash) o il branch da cui eseguire la sincronizzazione. Questo campo è facoltativo e il valore predefinito èHEAD. Quando utilizzi un hash, deve essere un hash completo e non una forma abbreviata.ROOT_BRANCH: aggiungi il branch del repository da cui eseguire la sincronizzazione. Questo campo è facoltativo e il valore predefinito èmaster. Per semplicità, ti consigliamo di utilizzare il camporevisionper specificare un nome di branch. Se vengono specificati sia il camporevisionsia il campobranch,revisionha la precedenza subranch.ROOT_DIRECTORY: aggiungi il percorso nel repository Git alla directory root che contiene la configurazione con cui vuoi eseguire la sincronizzazione. Questo campo è facoltativo e il valore predefinito è la directory root (/) del repository.ROOT_AUTH_TYPE: aggiungi uno dei seguenti tipi di autenticazione:none: non utilizzare l'autenticazionessh: utilizza una coppia di chiavi SSHcookiefile: utilizza uncookiefiletoken: utilizza un tokengcpserviceaccount: utilizza un account di servizio Google per accedere a un repository Cloud Source Repositories.gcenode: utilizza un account di servizio Google per accedere a un repository Cloud Source Repositories. Seleziona questa opzione solo se Workload Identity Federation for GKE non è abilitato nel tuo cluster.
Per ulteriori informazioni su questi tipi di autenticazione, consulta Concessione dell'accesso di sola lettura a Git per Config Sync.
Questo campo è obbligatorio.
ROOT_EMAIL: se hai aggiuntogcpserviceaccountcomeROOT_AUTH_TYPE, aggiungi l'indirizzo email del tuo account di servizio Google. Ad esempioacm@PROJECT_ID.s3ns.iam.gserviceaccount.com.ROOT_SECRET_NAME: aggiungi il nome del secret. Se questo campo è impostato, devi aggiungere la chiave pubblica del secret al provider Git. Questo campo è facoltativo.ROOT_NO_SSL_VERIFY: per disattivare la verifica del certificato SSL, imposta questo campo sutrue. Il valore predefinito èfalse.ROOT_CA_CERT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, il tuo provider Git deve utilizzare un certificato emesso da questa autorità di certificazione (CA). Il secret deve contenere il certificato CA in una chiave denominatacert. Questo campo è facoltativo.Per scoprire di più su come configurare l'oggetto Secret per il certificato CA, consulta Configura l'autorità di certificazione
Per una spiegazione dei campi e un elenco completo dei campi che puoi aggiungere al campo
spec, consulta Campi RootSync.Questo manifest crea un oggetto
RootSyncche utilizza Git come origine.OCI
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceType: oci sourceFormat: unstructured oci: image: ROOT_IMAGE dir: ROOT_DIRECTORY auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAMESostituisci quanto segue:
ROOT_SYNC_NAME: aggiungi il nome dell'oggetto RootSync.ROOT_IMAGE: l'URL dell'immagine OCI da utilizzare come repository root, ad esempioLOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME. Per impostazione predefinita, l'immagine viene estratta dal taglatest, ma puoi estrarre le immagini anche daTAGoDIGEST. SpecificaTAGoDIGESTinPACKAGE_NAME:- Per eseguire il pull entro il giorno
TAG:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG - Per eseguire il pull entro il giorno
DIGEST:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
- Per eseguire il pull entro il giorno
ROOT_DIRECTORY: aggiungi il percorso nel repository alla directory root che contiene la configurazione con cui vuoi eseguire la sincronizzazione. Questo campo è facoltativo e il valore predefinito è la directory root (/) del repository.ROOT_AUTH_TYPE: aggiungi uno dei seguenti tipi di autenticazione:none: non utilizzare l'autenticazionegcenode: utilizza il account di servizio predefinito di Compute Engine per accedere a un'immagine in Artifact Registry. Seleziona questa opzione solo se Workload Identity Federation for GKE non è abilitato nel tuo cluster.gcpserviceaccount: utilizza un account di servizio Google per accedere a un'immagine.
Questo campo è obbligatorio.
ROOT_EMAIL: se hai aggiuntogcpserviceaccountcomeROOT_AUTH_TYPE, aggiungi l'indirizzo email del tuo account di servizio Google. Ad esempioacm@PROJECT_ID.s3ns.iam.gserviceaccount.com.ROOT_CA_CERT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, il provider OCI deve utilizzare un certificato emesso da questa autorità di certificazione (CA). Il secret deve contenere il certificato CA in una chiave denominatacert. Questo campo è facoltativo.
Per scoprire di più su come configurare l'oggetto Secret per il certificato CA, consulta Configura l'autorità di certificazione
Per una spiegazione dei campi e un elenco completo dei campi che puoi aggiungere al campo
spec, consulta Campi RootSync.Questo manifest crea un oggetto
RootSyncche utilizza un'immagine OCI come origine.Helm
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceType: helm sourceFormat: unstructured helm: repo: ROOT_HELM_REPOSITORY chart: HELM_CHART_NAME version: HELM_CHART_VERSION releaseName: HELM_RELEASE_NAME namespace: HELM_RELEASE_NAMESPACE values: foo: bar: VALUE_1 baz: - qux: VALUE_2 xyz: VALUE_3 includeCRDs: HELM_INCLUDE_CRDS auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL secretRef: name: ROOT_SECRET_NAME caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAMESostituisci quanto segue:
ROOT_SYNC_NAME: aggiungi il nome dell'oggetto RootSync.ROOT_HELM_REPOSITORY: l'URL del repository Helm da utilizzare come repository root. Puoi inserire gli URL utilizzando il protocollo HTTPS o SSH. Ad esempio,https://github.com/GoogleCloudPlatform/anthos-config-management-samplesutilizza il protocollo HTTPS. Questo campo è obbligatorio.HELM_CHART_NAME: aggiungi il nome del tuo grafico Helm. Questo campo è obbligatorio.HELM_CHART_VERSION: la versione del grafico. Questo campo è facoltativo. Se non viene specificato alcun valore, viene utilizzata l'ultima versione.HELM_RELEASE_NAME: il nome della release Helm. Questo campo è facoltativo.HELM_RELEASE_NAMESPACE: lo spazio dei nomi di destinazione per una release. Imposta uno spazio dei nomi solo per le risorse che contengononamespace: {{ .Release.Namespace }}nei relativi template. Questo campo è facoltativo. Se non viene specificato alcun valore, viene utilizzato lo spazio dei nomi predefinitoconfig-management-system.HELM_INCLUDE_CRDS: impostato sutruese vuoi che il template Helm generi anche una CustomResourceDefinition. Questo campo è facoltativo. Se non viene specificato alcun valore, il valore predefinito èfalsee non verrà generata una CRD.VALUE: i valori da utilizzare al posto dei valori predefiniti che accompagnano il grafico Helm. Formatta questo campo nello stesso modo del file values.yaml del grafico Helm. Questo campo è facoltativo.ROOT_AUTH_TYPE: aggiungi uno dei seguenti tipi di autenticazione:none: non utilizzare l'autenticazionetoken: utilizza un nome utente e una password per accedere a un repository Helm privato.gcenode: utilizza il account di servizio predefinito di Compute Engine per accedere a un'immagine in Artifact Registry. Seleziona questa opzione solo se Workload Identity Federation for GKE non è abilitato nel tuo cluster.gcpserviceaccount: utilizza un account di servizio Google per accedere a un'immagine.
Questo campo è obbligatorio.
ROOT_EMAIL: se hai aggiuntogcpserviceaccountcomeROOT_AUTH_TYPE, aggiungi l'indirizzo email del tuo account di servizio Google. Ad esempioacm@PROJECT_ID.s3ns.iam.gserviceaccount.com.ROOT_SECRET_NAME: aggiungi il nome del secret setokenèROOT_AUTH_TYPE. Questo campo è facoltativo.ROOT_CA_CERT_SECRET_NAME: aggiungi il nome del tuo secret. Se questo campo è impostato, il provider Helm deve utilizzare un certificato emesso da questa autorità di certificazione (CA). Il secret deve contenere il certificato CA in una chiave denominatacert. Questo campo è facoltativo.
Per scoprire di più su come configurare l'oggetto Secret per il certificato CA, consulta Configura l'autorità di certificazione
Per una spiegazione dei campi e un elenco completo dei campi che puoi aggiungere al campo
spec, consulta Campi RootSync.Questo manifest crea un oggetto
RootSyncche utilizza Helm come origine.Applica le modifiche:
kubectl apply -f root-sync.yaml
(Facoltativo) Specifica un nome cluster per i selettori di cluster
Se vuoi utilizzare cluster-name-selectors, devi fornire un nome cluster a Config Sync. Questo passaggio è facoltativo ed è obbligatorio solo se utilizzi i selettori dei nomi dei cluster.
Per fornire un nome del cluster, completa i seguenti passaggi:
Aggiungi la variabile di ambiente
CLUSTER_NAMEal deploymentreconciler-manager:kubectl set env deployment/reconciler-manager -n config-management-system CLUSTER_NAME=CLUSTER_NAME
Sostituisci
CLUSTER_NAMEcon il nome del cluster o del membership.Per propagare il nome del cluster ai riconciliatori RootSync e RepoSync, riavvia il deployment
reconciler-manager:kubectl rollout restart deployment/reconciler-manager -n config-management-system
Verifica lo stato di sincronizzazione del repository root
Puoi utilizzare il comando nomos status
per controllare lo stato di sincronizzazione del repository root:
nomos status
Dovresti vedere un output simile al seguente esempio:
my_managed_cluster-1
--------------------
<root> git@github.com:foo-corp/acme/admin@main
SYNCED f52a11e4
Verifica l'installazione di RootSync
Quando crei un oggetto RootSync, Config Sync crea un reconciler con il prefisso root-reconciler. Un reconciler è un pod di cui viene eseguito il deployment come deployment.
Sincronizza i manifest da un repository Git a un cluster.
Puoi verificare che l'oggetto RootSync funzioni correttamente controllando lo stato del deployment root-reconciler:
kubectl get -n config-management-system deployment \
-l configsync.gke.io/sync-name=ROOT_SYNC_NAME
Sostituisci ROOT_SYNC_NAME con il nome di RootSync.
Dovresti vedere un output simile al seguente esempio:
NAME READY UP-TO-DATE AVAILABLE AGE
root-reconciler 1/1 1 1 3h42m
Per ulteriori modi per esplorare lo stato dell'oggetto RootSync, consulta Monitoraggio degli oggetti RootSync e RepoSync.
Dopo aver completato la configurazione del repository root, puoi facoltativamente scegliere di configurare la sincronizzazione da più repository. Questi repository sono utili se vuoi un repository che contenga configurazioni con ambito dello spazio dei nomi sincronizzate con un determinato spazio dei nomi tra i cluster.
Esegui l'upgrade di Config Sync
I passaggi per eseguire l'upgrade di Config Sync dipendono dalla versione da cui esegui l'upgrade e da quella a cui esegui l'upgrade. A partire dalla versione 1.20.0, Config Sync viene fornito come installazione autonoma senza l'operatore ConfigManagement. Se esegui l'upgrade da una versione precedente alla 1.20.0 alla versione 1.20.0 o successiva, devi prima disinstallare l'operatore ConfigManagement prima di eseguire l'upgrade.
Per eseguire l'upgrade da una versione non supportata, esegui un upgrade passo passo con incrementi di non più di tre versioni secondarie alla volta. Ad esempio, se la versione attuale di Config Sync è 1.16.0, esegui prima l'upgrade alla versione 1.19.0 e poi alla versione 1.22.0.
Disinstalla l'operatore ConfigManagement
Se esegui l'upgrade da una versione precedente alla 1.20.0 alla versione 1.20.0 o successive, devi prima disinstallare l'operatore ConfigManagement.
Puoi verificare se Config Management è installato sul tuo cluster eseguendo questo comando:
kubectl get configmanagement
Se l'output non è vuoto, Config Management è installato sul cluster.
Per disinstallare Config Management, completa i seguenti passaggi per disinstallare Config Management, ma lascia Config Sync installato sul cluster. Ti consigliamo di utilizzare nomos CLI per disinstallare l'operatore ConfigManagement perché ha un'interfaccia più completa e una gestione degli errori più efficace. Devi utilizzare lo script shell solo se non hai accesso a
nomos CLI.
nomos (consigliato)
Assicurati che l'interfaccia a riga di comando nomos sia aggiornata all'ultima versione.
Esegui questo comando per aggiornare il cluster nel contesto kubectl attuale:
nomos migrate --remove-configmanagement
script shell
Copia il seguente script shell in un file, quindi eseguilo per aggiornare il cluster nel contesto kubectl corrente.
#!/bin/bash
set -euox pipefail
hnc_enabled="$(kubectl get configmanagements.configmanagement.gke.io config-management -o=jsonpath="{.spec.hierarchyController.enabled}" --ignore-not-found)"
if [[ "${hnc_enabled}" == "true" ]]; then
echo "Hierarchy Controller is enabled on the ConfigManagement object. It must be disabled before migrating."
echo "This can be done by unsetting the spec.hierarchyController field on ConfigManagement."
exit 1
fi
kubectl delete deployment -n config-management-system config-management-operator --ignore-not-found --cascade=foreground
if kubectl get configmanagement config-management &> /dev/null ; then
kubectl patch configmanagement config-management --type="merge" -p '{"metadata":{"finalizers":[]}}'
kubectl delete configmanagement config-management --cascade=orphan --ignore-not-found
fi
kubectl delete clusterrolebinding config-management-operator --ignore-not-found
kubectl delete clusterrole config-management-operator --ignore-not-found
kubectl delete serviceaccount -n config-management-system config-management-operator --ignore-not-found
kubectl delete customresourcedefinition configmanagements.configmanagement.gke.io --ignore-not-found
Installa la nuova versione di Config Sync
Per eseguire l'upgrade di Config Sync, completa i seguenti passaggi per ogni cluster registrato:
Scarica il manifest di Config Sync e i comandi
nomosper la nuova versione.Estrai l'archivio:
tar -xzvf config-sync.tar.gz
Nell'archivio che hai estratto nel passaggio precedente, segui le istruzioni nel file
README.mdfornito per modificare la kustomization.Per aggiornare l'installazione di Config Sync, applica il manifest di cui è stato eseguito il rendering che hai creato seguendo le istruzioni di
README.md:kubectl apply -f CONFIG_SYNC_MANIFEST
Sostituisci
CONFIG_SYNC_MANIFESTcon il nome del manifest sottoposto a rendering.Sostituisci il comando
nomossu tutti i client con la nuova versione. Questa modifica garantisce che il comandonomospossa sempre ottenere lo stato di tutti i cluster registrati e convalidare le relative configurazioni.
Disinstalla Config Sync
Per disinstallare Config Sync, completa i seguenti passaggi:
Un amministratore centrale deve rimuovere il repository root:
Se hai attivato il webhook e vuoi conservare le tue risorse, disattiva la prevenzione della deviazione per le risorse abbandonate. Se non hai attivato il webhook, non devi eseguire ulteriori passaggi per conservare le tue risorse.
Elimina l'oggetto
RootSynceseguendo questo comando:kubectl delete -f root-sync.yaml
Con i manifest che hai utilizzato per installare Config Sync, puoi anche disinstallare Config Sync.
kubectl delete -f CONFIG_SYNC_MANIFEST --ignore-not-found
Passaggi successivi
- Scopri come configurare la sincronizzazione da più repository.