Profilo delle competenze: ingegnere del deployment
In qualità di operatore, puoi creare un'organizzazione per fornire ai clienti l'accesso all'infrastruttura della piattaforma. Per ottenere le autorizzazioni necessarie per creare un'organizzazione, chiedi all'Amministratore sicurezza di concederti il ruolo Amministratore dell'organizzazione.
La risorsa Organization è il nodo radice della gerarchia di risorse air-gapped di Google Distributed Cloud (GDC) e di tutte le risorse che appartengono a un gruppo di organizzazioni sotto il nodo dell'organizzazione. In questo modo, puoi visualizzare e controllare centralmente ogni risorsa che appartiene a un'organizzazione.
Per saperne di più sulle organizzazioni, consulta la Panoramica dell'organizzazione.
1.1. Prima di iniziare
Assicurati di aver installato quanto segue:
Un browser nel tuo sistema.
L'interfaccia a riga di comando (CLI) Git.
L'interfaccia a riga di comando kubectl.
gcloud CLI.
1.2. Creare un client OIDC in OC IT ADFS
Consulta le istruzioni per la configurazione di ADFS OIDC per creare un client OpenID Connect (OIDC) in ADFS per consentire all'operatore di accedere all'organizzazione che stai per creare. Registra l'ID client e il client secret del client OIDC. Non devi riutilizzare il client nelle connessioni ad altri cluster, come il cluster di amministrazione principale e altri cluster di amministrazione dell'organizzazione, o a servizi come ServiceNow.
Aggiungi il seguente URL di callback di GKE Identity Service all'allowlist nel client ADFS OIDC che hai creato per l'organizzazione che creerai:
https://ais-core.ORG_NAME.GDC_URL.GDC_DOMAIN/finish-loginAd esempio:
- Nome dell'organizzazione:
operations - Nome dell'istanza Distributed Cloud:
google - Nome di dominio Distributed Cloud:
gdch.test
L'URL di callback di GKE Identity Service in questo caso è
https://ais-core.operations.google.gdch.test/finish-login.- Nome dell'organizzazione:
Aggiungi il seguente URL di callback del servizio di identità GKE all'allowlist nel client OIDC ADFS che hai creato per ogni zona del tuo universo GDC:
https://ais-core.ORG_NAME.ZONE.GDC_URL.GDC_DOMAIN/finish-loginAd esempio:
- Nome dell'organizzazione:
operations - nome zona:
zone-1 - Nome dell'istanza Distributed Cloud:
google - Nome di dominio Distributed Cloud:
gdch.test
L'URL di callback di GKE Identity Service in questo caso è
https://ais-core.operations.zone-1.google.gdch.test/finish-login.- Nome dell'organizzazione:
Imposta le seguenti variabili da utilizzare nelle sezioni successive:
export ADFS_CERT_BASE64=ADFS_CERT_BASE64 export ADFS_CLIENT_ID=ADFS_CLIENT_ID export ADFS_CLIENT_SECRET=ADFS_CLIENT_SECRET export ADFS_ISSUER_URI=ADFS_ISSUER_URISostituisci le variabili con i seguenti valori:
Variabile Definizione ADFS_CERT_BASE64Il file adfs.pemcon codifica base64.ADFS_CLIENT_IDL'identificatore client ADFS. ADFS_CLIENT_SECRETIl secret condiviso del client ADFS. ADFS_ISSUER_URIL'URI dell'emittente ADFS. Per ottenere l'URI, controlla il percorso /adfs/.well-known/openid-configurationdel server ADFS:
curl -s https://fs.opscenter.local/adfs/.well-known/openid-configuration | jq '.issuer' "https://fs.opscenter.local/adfs"
Il valore è in generehttps://adfs.domain.com/adfs.
1.3 Crea subnet globali e dividile per ogni zona
Prima di creare un'organizzazione, devi creare le subnet root globali e dividerle per ogni zona con la subnet dell'API pubblica di gestione degli indirizzi IP (IPAM). Se stai creando una nuova organizzazione v2 in una zona che in precedenza aveva un'organizzazione v1, assicurati di visualizzare la pagina Prerequisiti aggiuntivi prima di creare le subnet globali.
Le subnet root globali ospitano il pool di intervalli di indirizzi IP root (CIDR) suddiviso in ogni zona per eseguire il bootstrap di tutti i cluster all'interno dell'organizzazione tenant, inclusi il cluster di infrastruttura dell'organizzazione e le VM dei carichi di lavoro. Una piccola parte dell'intervallo di indirizzi IP viene resa disponibile anche alle subnet radice come pool di indirizzi IP anycast. Puoi assegnare automaticamente CIDR dedicati a ogni zona utilizzando un controller oppure puoi fornire manualmente i CIDR a ogni zona.
Per eseguire il bootstrap di un'organizzazione, devi inserire l'intervallo di indirizzi IP interni dal questionario di input dell'organizzazione (OIQ). Devi utilizzare questi intervalli di indirizzi IP per creare la subnet root globale nel server API globale.
Devi creare subnet radice diverse per ogni server API globale. Il mapping del campo OIQ, del nome della subnet root globale e del server API globale è fornito nella sezione successiva.
1.3.1. Definisci l'intervallo CIDR per OIQ
Gli intervalli CIDR non possono sovrapporsi tra loro e non possono sovrapporsi a zone-infra-cidr.
Il zone-infra-cidr esiste in ogni zona e può essere recuperato dal
questionario di acquisizione del cliente (CIQ)
se il cliente lo ha definito.
Per recuperare zone-infra-cidr, esegui:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get cidrclaim -n gpc-system zone-infra-cidr
Di seguito è riportato un esempio di output YAML:
apiVersion: system.private.gdc.goog/v1alpha1
kind: CIDRClaim
metadata:
name: zone-infra-cidr
namespace: gpc-system
spec:
ipv4Spec:
staticCidrBlocks:
- 192.0.2.0/24
ipv6Spec:
staticCidrBlocks:
- 2001:db8::/32
status:
ipv4AllocationStatus:
cidrBlocks:
- 192.0.2.0/24
ipv6AllocationStatus:
cidrBlocks:
- 2001:db8::/32
In questo esempio, zone-infra-cidr è 192.0.2.0/24, quindi nessun campo
della query OIQ deve sovrapporsi a 192.0.2.0/24.
La tabella seguente mostra i campi OIQ e i relativi valori minimi predefiniti:
| Campo OIQ | Descrizione | Dimensioni minime richieste | Dimensione minima per zona per l'organizzazione | Nome della subnet principale globale | Server API globale |
|---|---|---|---|---|---|
infraVPCCIDR |
Carichi di lavoro di sistema, inclusi la console dell'organizzazione, le API di gestione e i servizi proprietari. | \( 15 - \lceil \log_2(ZoneNumber) \rceil \) | 16 | infra-vpc-root-cidr |
Radice globale |
defaultVPCCIDR |
Carichi di lavoro ed endpoint utente nel VPC predefinito tra le zone. | \( 16 - \lceil \log_2(ZoneNumber) \rceil \) | 16 | default-vpc-root-cidr |
Organizzazione globale |
orgAdminExternalCIDR |
Workload ed endpoint nel cluster perimetrale che gestiscono il traffico amministrativo tra la rete esterna e l'organizzazione. | \( 22 - \lceil \log_2(ZoneNumber) \rceil \) | 23 | admin-external-root-cidr |
Radice globale |
orgDataExternalCIDR |
Carichi di lavoro ed endpoint raggiungibili esternamente dagli utenti, come bilanciatori del carico esterni e NAT in uscita. | \( 22 - \lceil \log_2(ZoneNumber) \rceil \) | 23 | data-external-root-cidr |
Radice globale |
Se non hai abbastanza IP come minimo predefinito suggerito, devi seguire la procedura di suddivisione manuale per creare le subnet per ogni zona.
Tieni presenti le seguenti limitazioni per gli intervalli di subnet IPv4:
orgDataExternalCIDR,orgAdminExternalCIDR,infraVPCCIDRedefaultVPCCIDRnon devono sovrapporsi tra loro, con altri intervalli allocati all'interno dell'organizzazione e con eventuali intervalli IPv4 nelle reti in peering. I CIDR per questi provengono dallo spazio di indirizzi privati RFC 1918.Reti in peering: possono essere qualsiasi subnet pubblicizzata con reti esterne tramite collegamenti di interconnessione o subnet in peering con altri VPC nella stessa organizzazione.
Se le organizzazioni condividono le stesse risorse di interconnessione
AttachmentGroup, i valoriorgDataExternalCIDReorgAdminExternalCIDRdevono essere univoci. In caso contrario, la sovrapposizione con altre organizzazioni è consentita.
1.3.2. Crea subnet globali nel server API di amministrazione principale globale
Prima di creare un'organizzazione, devi creare le seguenti subnet nel server API di amministrazione principale globale:
infra-vpc-root-cidradmin-external-root-cidrdata-external-root-cidr
Queste subnet sono necessarie per eseguire il bootstrap del cluster dell'infrastruttura dell'organizzazione in ogni zona.
Devi avere uno spazio dei nomi con un nome che corrisponda al nome dell'organizzazione che assegnerai alla tua organizzazione. Conferma che questo spazio dei nomi esiste:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get namespaceSe questo spazio dei nomi non esiste, crealo:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG create namespace ORG_NAMECrea il file YAML della subnet
infra-vpc-root-cidr, ad esempioORG_NAME-infra-vpc-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: INFRA_VPC_CIDR type: RootCrea il file YAML della subnet
admin-external-root-cidr, ad esempioORG_NAME-admin-external-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: admin ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: admin-external-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ORG_ADMIN_EXTERNAL_CIDR type: RootCrea il file YAML della subnet
data-external-root-cidr, ad esempioORG_NAME-data-external-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/network-segment: data ipam.gdc.goog/usage: network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: data-external-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ORG_DATA_EXTERNAL_CIDR type: RootCopia i file YAML delle subnet
infra-vpc-root-cidr,admin-external-root-cidredata-external-root-cidrnel repository IAC per l'organizzazione root:cp YAML_FILE_PATH/ORG_NAME-infra-vpc-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-admin-external-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-data-external-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/Assicurati che il file
kustomization.yamlnella radice dell'organizzazione contenga le definizioniSubnetappena aggiunte. ControllaIAC_REPO_PATH/iac/infrastructure/global/orgs/root/kustomization.yaml:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME-admin-external-root-cidr.yaml - ORG_NAME-data-external-root-cidr.yaml - ORG_NAME-infra-vpc-root-cidr.yamlEsegui il commit dei file YAML della subnet:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea richiesta di unione:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchAttendi la revisione del codice e l'unione.
1.3.3. Dividere le subnet radice per le zone
Le subnet root globali ospitano l'intervallo di indirizzi IP root (CIDR) per tutte le zone. Per utilizzare l'intervallo di indirizzi IP nella zona, le subnet root globali devono prima essere divise in subnet più piccole da utilizzare per le zone. Ogni zona deve avere almeno un intervallo di indirizzi IP root.
IPAM ha un controller globale che suddivide automaticamente la subnet root globale in subnet più piccole per le zone esistenti. Gli amministratori possono delegare ai controller IPAM la suddivisione automatica della subnet della zona se non si preoccupano dell'esatto blocco CIDR utilizzato da una determinata zona. Il controller monitora la creazione della subnet root globale e crea una subnet per ogni zona con una lunghezza del prefisso predefinita fissa.
| Subnet radice della zona | Lunghezza prefisso fissa predefinita |
|---|---|
defaultZoneInfraVPCSubnetSize |
16 |
defaultZoneAdminVRFSubnetSize |
23 |
defaultZoneDataVRFSubnetSize |
23 |
defaultZoneDefaultVPCSubnetSize |
16 |
defaultAnycastSubnetSize |
26 |
Le subnet radice globali devono avere nomi fissi se vuoi che i controller IPAM dividano automaticamente la subnet della zona:
infra-vpc-root-cidradmin-external-root-cidrdata-external-root-cidrdefault-vpc-root-cidr
Se imposti l'annotazione ipam.gdc.goog/pause-auto-division: true per le tue risorse Subnet, devi definire manualmente l'esatto blocco CIDR utilizzato da una determinata zona. Se crei le subnet root globali con nomi diversi, l'annotazione ipam.gdc.goog/pause-auto-division non ha effetto e le subnet globali non verranno suddivise automaticamente.
1.3.3.1. Suddividere automaticamente le subnet root per le zone
Il controller globale suddivide automaticamente la subnet radice globale in subnet più piccole per le zone esistenti. Ad esempio, considera il seguente flusso di lavoro per capire come il controller suddivide la subnet root globale in subnet più piccole per le zone esistenti:
Se esistono due zone denominate zone1 e zone2, una subnet di root globale di esempio
infra-vpc-root-cidr che utilizza infraVPCCIDR, ad esempio 10.0.0.0/16, dallo spazio dei nomi OIQ in org-1
ha il seguente aspetto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.0/14
type: Root
Quando viene eseguito il deployment sulla piattaforma GDC, il controller
crea automaticamente due subnet secondarie denominate infra-vpc-zone1-root-cidr e
infra-vpc-zone2-root-cidr con la lunghezza del prefisso /16:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
prefixLength: 16
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
prefixLength: 16
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
1.3.3.2. Dividere manualmente le subnet root per le zone
Questa sezione presuppone che tu abbia impostato l'annotazione
ipam.gdc.goog/pause-auto-division: true quando
crei le subnet root globali nel server API di amministrazione root globale.
Questa annotazione mette in pausa il controller per riconciliare queste subnet root globali,
consentendoti di creare manualmente la subnet root e la subnet anycast di una zona.
Per dividere manualmente la subnet root globale in subnet più piccole per le zone, completa i seguenti passaggi:
Elenca le zone nel tuo universo:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG get zone -AConferma il CIDR dedicato della subnet principale che vuoi applicare alla tua zona. Esegui questa operazione per ogni zona del tuo universo.
Assegna il CIDR dedicato alla subnet per la tua zona in un file YAML, ad esempio
ORG_NAME-infra-vpc-zone1-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc ipam.gdc.goog/usage: zone-network-root-range annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-zone1-root-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ZONAL_CIDR zone: ZONE_NAME propagationStrategy: SingleZone type: Branch parentReference: name: infra-vpc-root-cidr namespace: ORG_NAMERipeti questo passaggio per ogni zona del tuo universo GDC.
Conferma il CIDR dedicato della subnet radice che vuoi applicare alla subnet anycast.
Assegna il CIDR dedicato alla subnet anycast in un file YAML, ad esempio
ORG_NAME-infra-vpc-anycast-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/vpc: infra-vpc annotations: ipam.gdc.goog/pivot-destination: global-org name: infra-vpc-anycast-cidr namespace: ORG_NAME spec: ipv4Request: cidr: ANYCAST_CIDR propagationStrategy: None type: Branch parentReference: name: infra-vpc-root-cidr namespace: ORG_NAMECopia i file YAML della subnet di zona nel repository IAC per l'organizzazione radice. Ad esempio, se avevi due file YAML di subnet di zona:
cp YAML_FILE_PATH/ORG_NAME-infra-vpc-zone1-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-infra-vpc-zone2-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ cp YAML_FILE_PATH/ORG_NAME-infra-vpc-anycast-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/root/Assicurati che il file
kustomization.yamlnella radice dell'organizzazione contenga le definizioniSubnetappena aggiunte. ControllaIAC_REPO_PATH/iac/infrastructure/global/orgs/root/kustomization.yaml:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME-infra-vpc-zone1-root-cidr.yaml - ORG_NAME-infra-vpc-zone2-root-cidr.yaml - ORG_NAME-infra-vpc-anycast-cidr.yamlEsegui il commit dei file YAML della subnet:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea la richiesta di unione:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchAttendi la revisione del codice e l'unione.
1.3.3.2.1. Esempio di suddivisione manuale delle subnet radice per le zone per infra-vpc
Se esistono due zone denominate zone1 e zone2, una subnet di root globale di esempio
infra-vpc-root-cidr che utilizza infraVPCCIDR, ad esempio 192.0.2.0/24, dallo spazio dei nomi OIQ in org-1
ha il seguente aspetto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
ipam.gdc.goog/pause-auto-division: "true"
name: infra-vpc-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.0/24
type: Root
Crea manualmente la subnet per ogni zona denominata infra-vpc-zone1-root-cidr e
infra-vpc-zone2-root-cidr e la subnet anycast infra-vpc-anycast-cidr con il CIDR dedicato che preferisci:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.0/26
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.64/26
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/vpc: infra-vpc
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: infra-vpc-anycast-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.0.2.128/26
propagationStrategy: None
type: Branch
parentReference:
name: infra-vpc-root-cidr
namespace: org-1
Assicurati di aggiungere tutti i file YAML della subnet al repository IAC.
1.3.3.2.2. Esempio di suddivisione manuale delle subnet radice per le zone per il segmento di rete dati
Se esistono due zone denominate zone1 e zone2, una subnet root globale di esempio
data-external-root-cidr che utilizza orgDataExternalCIDR, ad esempio 10.0.0.0/24, dallo spazio dei nomi OIQ in org-1
ha il seguente aspetto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
ipam.gdc.goog/pause-auto-division: "true"
name: data-external-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.0/24
type: Root
Crea manualmente la subnet per ogni zona denominata data-external-zone1-root-cidr e
data-external-zone2-root-cidr e la subnet anycast data-global-anycast-cidr con il CIDR dedicato che preferisci:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: data-external-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.0/26
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: data-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: data-external-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.64/26
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: data-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: data-global-anycast-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 10.0.0.128/26
propagationStrategy: None
type: Branch
parentReference:
name: data-external-root-cidr
namespace: org-1
Assicurati di aggiungere tutti i file YAML della subnet al repository IAC.
1.3.3.2.3. Esempio di suddivisione manuale delle subnet radice per le zone per il segmento di rete amministrativa
Se esistono due zone denominate zone1 e zone2, una subnet root globale di esempio
admin-external-root-cidr che utilizza orgAdminExternalCIDR, ad esempio 192.168.1.0/24, dallo spazio dei nomi OIQ in org-1
ha il seguente aspetto:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: admin
ipam.gdc.goog/usage: network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
ipam.gdc.goog/pause-auto-division: "true"
name: admin-external-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.0/24
type: Root
Crea manualmente la subnet per ogni zona denominata admin-external-zone1-root-cidr e
admin-external-zone2-root-cidr e la subnet anycast admin-global-anycast-cidr con il CIDR dedicato che preferisci:
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: admin
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: admin-external-zone1-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.0/26
zone: zone1
propagationStrategy: SingleZone
type: Branch
parentReference:
name: admin-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: admin
ipam.gdc.goog/usage: zone-network-root-range
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: admin-external-zone2-root-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.64/26
zone: zone2
propagationStrategy: SingleZone
type: Branch
parentReference:
name: admin-external-root-cidr
namespace: org-1
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
labels:
ipam.gdc.goog/network-segment: data
annotations:
ipam.gdc.goog/pivot-destination: global-org
name: admin-global-anycast-cidr
namespace: org-1
spec:
ipv4Request:
cidr: 192.168.1.128/26
propagationStrategy: None
type: Branch
parentReference:
name: admin-external-root-cidr
namespace: org-1
Assicurati di aggiungere tutti i file YAML della subnet al repository IAC.
1.4. Crea un'organizzazione con IAC
Utilizza IAC per creare un'organizzazione:
Genera un elenco dei server e dei tipi di server disponibili:
kubectl get servers -n gpc-system -o jsonpath='{range .items[?(@.status.bareMetalHostStatus.provisionState=="available")]}{.metadata.name}{"\t"}{.spec.serverHardware.machineClassName}{"\t"}{.status.bareMetalHostStatus.provisionState}{"\n"}{end}'L'output di esempio è simile al seguente:
ag-aa-bm04 o1-standard1-64-gdc-metal available ag-ab-bm07 o1-standard1-64-gdc-metal available ag-ab-bm11 o1-highmem1-96-gdc-metal available ag-ab-bm12 o1-highmem1-96-gdc-metal available ag-ab-bm13 o1-highmem1-96-gdc-metal available ag-ab-bm14 o1-highgpu1-48-gdc-metal available ag-ab-bm15 o1-highgpu1-48-gdc-metal available ag-ab-bm16 o1-highgpu1-48-gdc-metal availableQuando specifichi
--server-quotae--admin-serverin un secondo momento, assicurati di avere serveravailablesufficienti per soddisfare la richiesta.Vai al repository
iace aggiungi la struttura di directory per la nuova organizzazione:mkdir -p infrastructure/global/orgs/root/ORG_NAME/Crea una risorsa personalizzata
Organization:gdcloud organizations config create --name ORG_NAME \ --log-retention-policy LOG_RETENTION_POLICY \ --kms-root-key-type KMS_ROOT_KEY_TYPEAd esempio:
gdcloud organizations config create --name org-1 \ --log-retention-policy paAuditLogsRetentionTime=400,ioAuditLogsRetentionTime=2000,operationalLogsRetentionTime=90,metricsRetentionTime=90 \ --kms-root-key-type ctm-rootSostituisci le seguenti variabili:
Variabile Definizione ORG_NAMEIl nome dell'organizzazione. Il nome di un'organizzazione deve soddisfare i seguenti criteri:
- Essere composto da 3-19 lettere ASCII minuscole, cifre o trattini.
- Deve iniziare con una lettera.
- Non hanno trattini finali.
- Non deve terminare con la stringa
-system.
LOG_RETENTION_POLICYLa configurazione dei tempi di conservazione per audit log, log operativi e metriche in giorni. KMS_ROOT_KEY_TYPEQuesta configurazione contiene il tipo di chiave radice scelto per il KMS di un'organizzazione. Ogni servizio KMS ha una chiave radice per criptare le chiavi generate dal KMS. Per impostazione predefinita, il KMS genera una chiave radice CTM, una chiave radice archiviata in Thales CipherTrust Manager di cui viene eseguito il backup da un HSM fisico. Puoi anche scegliere una chiave radice software archiviata come secret Kubernetes. Passa ctm-rootolocal-rootperkmsRootKeyType.Un esempio del file YAML della risorsa personalizzata
Organizationgenerato è simile al seguente:apiVersion: resourcemanager.global.private.gdc.goog/v1alpha1 kind: Organization metadata: namespace: gpc-system name: org-1 spec: type: Tenant logRetentionPolicy: paAuditLogsRetentionTime: 400 ioAuditLogsRetentionTime: 2000 operationalLogsRetentionTime: 90 metricsRetentionTime: 90 securityConfig: kmsRootKeyType: "ctm-root"(Facoltativo) In versione 1.14.2 e successive, la crittografia IPsec da nodo a nodo è disattivata per impostazione predefinita. Se è necessaria questa crittografia IPsec, puoi abilitare la crittografia IPsec da nodo a nodo modificando il file YAML della risorsa personalizzata
Organizatione aggiungendo un'annotazione:metadata: annotations: n2n.security.private.gdc.goog/node-to-node-encryption-disabled: "false"Un valore di
"false"per questa annotazione attiva la crittografia.Crea una risorsa personalizzata
OrganizationZonalConfigper ogni zona del deployment:gdcloud organizations zonal-configs create --name ORG_NAME \ --zones=ZONES \ --version GDC_VERSION \ --server-quota SERVER_QUOTA \ --storage-sku STORAGE_SIZE \ --admin-server ADMIN_SERVERAd esempio:
gdcloud organizations zonal-configs create --name org-1 \ --zones=us-central1-a,us-central1-b \ --version 1.9.2-gdch.153 \ --server-quota o1-highmem1-40-gdc-metal=1,o1-standard1-64-gdc-metal=2,o1-highmem1-96-gdc-metal=3,o1-highmem1-104-gdc-metal=4,o1-highmem1-448-gdc-metal=5,o1-highgpu1-48-gdc-metal=6 \ --storage-sku block-standard=100Ti,file-standard=100Ti,object-standard=100Ti \ --admin-server o1-standard1-64-gdc-metal=3Sostituisci le seguenti variabili:
Variabile Definizione ORG_NAMEIl nome dell'organizzazione. Il nome di un'organizzazione deve soddisfare i seguenti criteri:
- Essere composto da 3-30 lettere ASCII minuscole, cifre o trattini.
- Deve iniziare con una lettera.
- Non hanno trattini finali.
- Non deve terminare con la stringa
-system.
ZONESI nomi delle zone nel deployment. GDC_VERSIONLa versione del sistema GDC per cui creare l'organizzazione. SERVER_QUOTAI server da allocare per il cluster di amministrazione dell'organizzazione e il cluster di sistema quando vengono generati automaticamente. Se intendi eseguire risorse di unità di elaborazione grafica (GPU) che sono workload basati su VM, come API di intelligenza artificiale e machine learning (AI/ML) preaddestrate, devi eseguire il provisioning delle macchine GPU quando crei un'organizzazione. Per ulteriori informazioni, consulta la sezione Abilitare il supporto GPU per i cluster di sistema. ADMIN_SERVERUna coppia chiave-valore del tipo di server e della quantità di server di amministrazione dell'organizzazione da allocare per quel tipo di server. I tipi misti non sono supportati per i server. Il valore predefinito è o1-standard1-64-gdc-metal: 3.STORAGE_SIZELe dimensioni dei diversi tipi di spazio di archiviazione da assegnare all'organizzazione. La dimensione minima dello spazio di archiviazione a blocchi per un'organizzazione è 250 Gi, che viene impostata con il flag BlockStandard.Un esempio del file YAML della risorsa personalizzata
OrganizationZonalConfiggenerato è simile al seguente:apiVersion: resourcemanager.global.private.gdc.goog/v1alpha1 kind: OrganizationZonalConfig metadata: namespace: gpc-system name: org-1-zone1-config spec: organizationRef: name: org-1 zone: zone1 version: 1.5.0-gdch.11 capacities: storage: block-standard: 10Ti file-standard: 10Ti object-nearline: 10Ti object-standard: 10Ti workloadServers: o1-highmem1-40-gdc-metal: 1Esamina i file YAML generati. I file si trovano nella directory
HOME.Conferma il tipo di organizzazione. Puoi eseguire il provisioning di due tipi di organizzazione:
- Architettura dell'organizzazione v1 (organizzazione v1)
- Architettura dell'organizzazione v2 (organizzazione v2)
Per impostazione predefinita, le nuove organizzazioni vengono sottoposte a provisioning in base al tipo di deployment impostato dalle impostazioni dei feature gate:
- Per impostazione predefinita, i deployment di
PRODUCTIONgenerano organizzazioni v2. ACCREDITEDdeployment generano organizzazioni v1 per impostazione predefinita.
Nel raro caso in cui devi ignorare il tipo di organizzazione predefinito per il tuo tipo di deployment, aggiorna il campo
spec.compatibilityOptions.architectureOverridePolicynella risorsa personalizzataOrganizationgenerata conForceV1oForceV2, a seconda del tipo di organizzazione che vuoi utilizzare. Ad esempio, il seguente snippet forza la creazione di un'organizzazione v2 in un deploymentACCREDITED:... spec: ... compatibilityOptions: architectureOverridePolicy: ForceV2 ...Conferma le impostazioni rimanenti per assicurarti che componenti come lo spazio di archiviazione e la potenza di calcolo siano sufficienti per le esigenze della tua azienda.
Copia le risorse personalizzate
OrganizationeOrganizationZonalConfignel repository nella directory della nuova organizzazione:cp YAML_FILE_PATH/ORG_NAME.yaml IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ORG_NAME/cp YAML_FILE_PATH/ORG_NAME-ZONE.yaml IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ORG_NAME/Sostituisci quanto segue:
ORG_NAME: il nome dell'organizzazione definito nel comandogdcloud organizations config createutilizzando il parametro--name.ZONE: il nome di ogni zona nel deployment. Il nome della zona viene derivato utilizzando il seguente formato:{generalRegion}-{regionQualifier}{regionCounter}-{zoneLetter}. Ad esempio:us-central1-b. Consulta la sezione Zona nel questionario di acquisizione del cliente per le descrizioni dei valori dell'attributo zona.
Aggiungi il file
kustomization.yamlper la nuova organizzazione:cat > IAC_REPO_PATH/iac/infrastructure/global/orgs/root/ORG_NAME/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ORG_NAME-kustomization resources: - ORG_NAME.yaml - ORG_NAME-ZONE.yaml EOFAggiungi la nuova organizzazione come risorsa dell'organizzazione principale:
Apri il file
kustomization.yamldella radice globale:vim /iac/infrastructure/global/orgs/root/kustomization.yamlAggiungi il nuovo
Organizationcome risorsa alla fine dell'elenco di risorse esistente:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - ... # existing resource items - ORG_NAME
Esegui il commit del file YAML dell'organizzazione e dei file kustomize:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea richiesta di unione:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchAttendi la revisione del codice e l'unione.
Verifica che siano disponibili le configurazioni globali e di zona dell'organizzazione:
Verifica che l'organizzazione globale sia disponibile nel tuo universo GDC:
kubectl get organization -AL'output è simile al seguente:
NAMESPACE NAME AGE gpc-system org 34s gpc-system root 14hControlla lo stato dell'organizzazione globale:
kubectl --kubeconfig GLOBAL_ROOT_ADMIN_KUBECONFIG \ get organization/ORG_NAME -n gpc-system -o yamlAssicurati che le condizioni
statusnell'output YAML sianoTrue.Controlla lo stato della configurazione dell'organizzazione in ogni zona:
kubeconfig --kubeconfig ROOT_ADMIN_KUBECONFIG \ get organization/ORG_NAME -n gpc-system -o yamlPer cambiare contesto zonale, utilizza gcloud CLI per accedere a ogni zona prima di controllare lo stato dell'organizzazione. Assicurati che le condizioni
statusnell'output YAML per ogni zona sianoTrue.
1.5. Crea subnet globali nel server API dell'organizzazione globale
Devi creare default-vpc-root-cidr nel server API globale dell'organizzazione all'interno dello spazio dei nomi platform dopo l'esecuzione del server API globale.
Questa subnet radice alloca l'indirizzo IP per i cluster all'interno dell'organizzazione tenant, ad esempio i cluster utente, nonché gli indirizzi IP per i carichi di lavoro VM.
Crea il file YAML della subnet
default-vpc-root-cidr, ad esempiodefault-vpc-root-cidr.yaml:apiVersion: ipam.global.gdc.goog/v1 kind: Subnet metadata: labels: ipam.gdc.goog/allocation-preference: default ipam.gdc.goog/vpc: default-vpc ipam.gdc.goog/usage: network-root-range name: default-vpc-root-cidr # don't change the name if you want IPAM controller to automatically divide the zone's subnet. namespace: platform spec: type: Root ipv4Request: cidr: DEFAULT_VPC_CIDRVai al repository
iace aggiungi la struttura di directory per l'organizzazione globale:cd iac; mkdir -p infrastructure/global/orgs/ORG_NAME/Copia il file YAML della subnet
default-vpc-root-cidrnel repository IAC nella directory della nuova organizzazione:cp YAML_FILE_PATH/default-vpc-root-cidr.yaml \ IAC_REPO_PATH/iac/infrastructure/global/orgs/ORG_NAME/Crea il file
kustomization.yamlnella cartella dell'organizzazione con le definizioniSubnetappena aggiunte. ControllaIAC_REPO_PATH /iac/infrastructure/global/orgs/ORG_NAME/kustomization.yaml:cat > infrastructure/global/orgs/ORG_NAME/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ORG_NAME-kustomization resources: - default-vpc-root-cidr.yaml EOFEsegui il commit del file YAML dell'organizzazione e dei file kustomize:
git add "IAC_REPO_PATH/iac/infrastructure" git commitCrea la richiesta di unione:
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin {USERNAME1}-branchAttendi la revisione del codice e l'unione.
Analogamente a come vengono suddivise le subnet globali nel cluster di amministrazione root globale, anche default-vpc-root-cidr viene suddiviso e propagato a ogni zona in modo che l'organizzazione zonale possa utilizzare gli indirizzi IP.
1.7. Configura NTPRelay per l'amministratore dell'organizzazione
Devi configurare manualmente l'autenticazione tra i NTPRelay root-admin e org-admin.
Segui NTP-P0001.3 (Root Admin -> Org Admin NTPRelay Encryption) per configurare la crittografia per questa organizzazione.
1.8. Connetti il provider di identità IO all'organizzazione con IAC
Consulta la guida ADFS per creare un client OIDC in ADFS per la nuova organizzazione e annota l'ID client e il client secret del client OIDC.
Imposta il nome dell'organizzazione come variabile di ambiente:
export ORG_NAME=ORG_NAMEVerifica che
ORG_NAMEcorrisponda esattamente al nome dell'organizzazione.Esporta il file kubeconfig del cluster di amministrazione principale ed esegui questi comandi
kubectlper ottenere i nomi del cluster e della zona:export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl get clusters -A kubectl get zones -n mz-systemAggiungi il file
ioauthmethod.yamlper l'organizzazione:cat > infrastructure/global/orgs/${ORG_NAME}/ioauthmethod.yaml << EOF apiVersion: iam.global.private.gdc.goog/v1alpha1 kind: IOAuthMethod metadata: name: io-idp-authmethod namespace: gpc-system oidc: certificateAuthorityData: ADFS_CERT_BASE64 clientID: ADFS_ORG_CLIENT_ID clientSecret: ADFS_ORG_CLIENT_SECRET groupPrefix: gdch-infra-operator- groupsClaim: groups issuerURI: ADFS_ISSUER_URI scopes: openid email offline_access userClaim: email userPrefix: gdch-infra-operator- cloudConsoleRedirectURI: http://cloud.console.not.enabled kubectlRedirectURI: http://localhost:9879/callback EOFSostituisci le seguenti variabili:
Variabile Definizione ADFS_CERT_BASE64La codifica Base64 del certificato utilizzato da ADFS per l'autofirma, che GKE Identity Service richiede per stabilire una connessione sicura con un'istanza ADFS interna. ADFS_ORG_CLIENT_IDL'ID OpenID Connect per il client dell'organizzazione in ADFS. ADFS_ORG_CLIENT_SECRETIl secret OpenID Connect per il client dell'organizzazione registrato in ADFS. ADFS_ISSUER_URIUn URI emittente valido, richiesto dal servizio di identità GKE per consentire le richieste di accesso con reindirizzamento ad ADFS. Aggiungi il file
initial-admin.yamlper l'organizzazione:cat > infrastructure/global/orgs/${ORG_NAME}/initial-admin.yaml << EOF apiVersion: iam.private.gdc.goog/v1alpha1 kind: ExpirationClusterRoleBinding metadata: name: iac-binding-USER-org-iam-admin spec: expirationTimestamp: EXPIRATION roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: organization-iam-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: gdch-infra-operator-USER@opscenter.local EOFSostituisci le seguenti variabili:
Variabile Definizione USERIl nome utente con il prefisso dell'IO per accedere inizialmente al cluster. Ricorda di aggiungere il prefisso al nome utente. EXPIRATIONIl timestamp formattato RFC 3339 in corrispondenza del quale il sistema revoca l'accesso. Ad esempio, "2020-11-14T00:20:12+00:00".Aggiungi i file appena creati al file
kustomization.yamlinIAC_REPO_PATH /iac/infrastructure/global/orgs/ORG_NAME/kustomization.yaml:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: ORG_NAME-kustomization resources: - ... # existing resource items - ioauthmethod.yaml - initial-admin.yamlEsegui il commit del file YAML dell'organizzazione e dei file kustomize:
git add "infrastructure/global" git add "infrastructure/zonal" git commitEsegui il push dell'aggiornamento su GitLab:
git -c http.sslVerify=false pushAttendi la revisione del codice e l'unione.
Per confermare che l'operatore può accedere all'organizzazione, accedi all'organizzazione generata ed esegui il seguente comando per verificare che esista un provider di identità (IdP) in
ClientConfigdell'organizzazione:Imposta il file kubeconfig del cluster di amministrazione in base all'architettura della tua organizzazione:
Per un'organizzazione v1, esegui:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGSostituisci ORG_ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione dell'organizzazione, ad esempio
/tmp/${ORG}-admin-kubeconfig.Per un'organizzazione v2, esegui:
export KUBECONFIG=ORG_INFRA_CLUSTER_KUBECONFIGSostituisci ORG_INFRA_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster dell'infrastruttura dell'organizzazione, ad esempio
/tmp/${ORG}-infra-kubeconfig.
Verifica che esista un IdP nel
ClientConfigdell'organizzazione:kubectl get ClientConfig default -n kube-public -o yaml
Per la versione 1.14.3, devi applicare manualmente il ruolo
global-zone-viewerper consentire a tutti gli utenti autenticati di visualizzare le zone in un universo utilizzando gcloud CLI. Applica le risorse di ruolo e associazione di ruolo:kubectl --kubeconfig ORG_GLOBAL_API_SERVER_KUBECONFIG apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: global-zone-viewer namespace: mz-system rules: - apiGroups: - location.mz.global.private.gdc.goog resources: - zones verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: global-zone-viewer-binding namespace: mz-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: global-zone-viewer subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated EOFSostituisci
ORG_GLOBAL_API_SERVER_KUBECONFIGcon il file kubeconfig del server API globale dell'organizzazione. Per ulteriori informazioni, consulta Generare manualmente il file kubeconfig.
1.9. Connetti il provider di identità del cliente all'organizzazione
Per connettere un provider di identità (IdP) del cliente all'organizzazione e accedere all'organizzazione con le sue identità, completa i seguenti passaggi:
Accedi dalla CLI con l'account amministratore IO iniziale impostato durante la creazione dell'organizzazione, che viene associato automaticamente a
org-iam-adminnel cluster di amministrazione dell'organizzazione.Chiedi al cliente di aggiungere il seguente URL di callback AIS globale all'allowlist nel client OIDC o SAML che ha creato per l'organizzazione che stai per creare:
https://ais-core.ORG_NAME.GDC_URL/finish-loginAd esempio, se l'URL principale di GDC è
.google.gdch.teste il nome dell'organizzazione èoperations, l'URL di callback AIS globale èhttps://ais-core.operations.google.gdch.test/finish-login.Se utilizzi un client SAML, devi anche aggiungere il seguente URL di callback SAML globale di AIS alla lista consentita:
https://ais-core.ORG_NAME.GDC_URL/saml-callbackChiedi al cliente di aggiungere il seguente URL di callback AIS all'allowlist nel client OIDC o SAML creato per ogni zona. Ad esempio, per un universo a tre zone, gli URL di callback AIS a livello di zona sono simili ai seguenti:
https://ais-core.ORG_NAME.ZONE_1.GDC_URL/finish-login https://ais-core.ORG_NAME.ZONE_2.GDC_URL/finish-login https://ais-core.ORG_NAME.ZONE_3.GDC_URL/finish-loginSe l'URL radice di GDC è
.google.gdch.test, il nome della zona èzone-1e il nome dell'organizzazione èoperations, l'URL di callback AIS èhttps://ais-core.operations.zone-1.google.gdch.test/finish-login.Se utilizzi un client SAML, devi anche aggiungere i seguenti URL di callback SAML AIS alla lista consentita per ogni zona:
https://ais-core.ORG_NAME.ZONE_1.GDC_URL/saml-callback https://ais-core.ORG_NAME.ZONE_2.GDC_URL/saml-callback https://ais-core.ORG_NAME.ZONE_3.GDC_URL/saml-callbackImposta il file kubeconfig del cluster di amministrazione in base all'architettura della tua organizzazione. Se hai già impostato la variabile kubeconfig, salta questo passaggio.
Per un'organizzazione v1, esegui:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGSostituisci ORG_ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione dell'organizzazione, ad esempio
/tmp/${ORG}-admin-kubeconfig.Per un'organizzazione v2, esegui:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIGSostituisci MANAGEMENT_API_SERVER_KUBECONFIG con il percorso di kubeconfig del server API Management, ad esempio
/tmp/${ORG}-management-kubeconfig.
Dal ticket di richiesta del cliente per una nuova organizzazione, decidi se l'IdP utilizza OIDC o SAML. Segui la guida che corrisponde al tipo di IdP specificato:
Configurazione con OIDC
Crea un file
identity-provider-config.yamle compilalo facendo riferimento ai ticket di creazione dell'organizzazione per i valori dell'IdP dell'amministratore dell'account:cat << EOF > identity-provider-config.yaml apiVersion: iam.global.gdc.goog/v1 kind: IdentityProviderConfig metadata: name: pa-idp-oidc namespace: platform spec: oidc: certificateAuthorityData: "PA_IDP_BASE64_ENCODED_CERTIFICATE" clientID: PA_IDP_CLIENT_ID clientSecret: PA_IDP_CLIENT_SECRET groupPrefix: PA_IDP_GROUP_CLAIM groupsClaim: PA_IDP_PREFIX issuerURI: PA_IDP_ISSUER_URI scopes: openid email profile userClaim: PA_IDP_USER_CLAIM userPrefix: PA_IDP_PREFIX EOFDi seguito sono riportate le descrizioni dettagliate dei campi:
Attributo Tipo di attributo Descrizione certificateAuthorityDataObbligatorio Un certificato dell'autorità di certificazione con codifica Base64 e formato PEM standard per il provider OIDC. clientIDObbligatorio L'ID per l'applicazione client che effettua richieste di autenticazione al provider OpenID. clientSecretObbligatorio Il secret condiviso tra l'applicazione client OIDC e il provider OIDC. extraParamsFacoltativo Un elenco separato da virgole di coppie chiave-valore che sono codificate come query e inviate con la richiesta dell'endpoint di autenticazione. groupPrefixFacoltativo Il prefisso da anteporre all'attestazione dei gruppi per evitare conflitti con i gruppi esistenti, in genere utilizzato quando si configurano più provider di identità.
Devi includere il prefisso del gruppo prima di tutti i nomi dei gruppi. Ad esempio, se haimyprefix-come prefisso del gruppo e un gruppo denominatogroupAnel tuo provider di identità, quando aggiungi una policy o un binding, devi eseguire il binding dimyprefix-groupA. Il nome del gruppo è impostato nel campogroupsClaim.groupsClaimFacoltativo Il nome dell'attestazione nel token ID OIDC che contiene le informazioni sui gruppi dell'utente. Questo nome deve corrispondere a quello dell'attestazione che contiene le informazioni sull'appartenenza al gruppo nel tuo provider OIDC. issuerURIObbligatorio L'URL a cui vengono inviate le richieste di autorizzazione al tuo provider OIDC. Questo URI deve indirizzare al livello all'interno di .well-known/openid-configuration.scopesFacoltativo Un elenco separato da virgole di identificatori per specificare quali privilegi di accesso vengono richiesti oltre all'ambito openid.userClaimObbligatorio Il nome dell'attestazione nel token ID OIDC che contiene il nome utente. Ad esempio, se l'attestazione utente è email, gli utenti vengono identificati dal campo utente nel token OIDC.
Se questo valore non è presente nel token ID, l'autenticazione non va a buon fine.userPrefixFacoltativo Il prefisso da anteporre alle attestazioni utente per evitare conflitti con i nomi utente esistenti, in genere utilizzato quando si configurano più provider di identità.
Ad esempio, se l'attributo utente èemaile il prefisso utente èprefix-, gli utenti vengono identificati comeprefix-sally@example.com. L'utente èsally@example.come il prefisso,prefix-, viene aggiunto all'utente per distinguere i diversi provider di identità.
Si consiglia di inserire un separatore alla fine del prefisso, come descritto in precedenza in questa tabella per l'impostazionegroupPrefix.(Facoltativo) Se il tuo provider di identità utilizza attributi personalizzati, configura prima gli attributi nel tuo IdP. Poi aggiungi le coppie chiave-valore corrispondenti nella sezione
oidcdel fileidentity-provider-config.yamlper ulteriori rivendicazioni relative a utenti o gruppi, ad esempio il reparto o la data di nascita. Quando applichi le modifiche alla configurazione del provider di identità, GKE Identity Service riconosce gli attributi personalizzati. Ecco un esempio di attributi personalizzati:"attributeMapping": { "attribute.birthday": "assertion.birthday", "attribute.department": "assertion.department" }Configura la configurazione del provider di identità:
kubectl apply -f identity-provider-config.yamlAttendi la riconfigurazione dei vari componenti del sistema.
Verifica la configurazione aprendo la console dell'interfaccia utente di amministrazione della piattaforma in un browser web. Seleziona Accedi con pa-idp-oidc dalla pagina di reindirizzamento. Se viene eseguito il reindirizzamento all'istanza IdP dell'account PA e dopo l'accesso con l'istanza IdP dell'account PA viene eseguito il reindirizzamento alla pagina della console dell'interfaccia utente amministratore della piattaforma, la configurazione è riuscita. In caso contrario, controlla i valori in
identity-provider-config.yamle ripeti il passaggio precedente.
Configurazione con SAML
Crea un file
identity-provider-config.yamle compilalo facendo riferimento ai ticket di creazione dell'organizzazione per i valori dell'IDP dell'account PA:cat << EOF > identity-provider-config.yaml apiVersion: iam.global.gdc.goog/v1 kind: IdentityProviderConfig metadata: name: pa-idp-saml namespace: platform spec: saml: idpEntityID: PA_IDP_ISSUER_URI idpSingleSignOnURI: PA_IDP_SSO_URI groupPrefix: PA_IDP_PREFIX groupsAttribute: PA_IDP_GROUPS_ATTRIBUTE idpCertificateDataList: [PA_IDP_SAML_CERT] userAttribute: PA_IDP_USER_ATTRIBUTE userPrefix: PA_IDP_PREFIX EOFDi seguito sono riportate le descrizioni dettagliate dei campi:
.Attributo Tipo di attributo Descrizione idpCertificateDataListObbligatorio I certificati IdP utilizzati per verificare la risposta SAML. Questi certificati devono essere codificati in base64 standard e in formato PEM. Per facilitare la rotazione dei certificati del provider di identità, sono supportati al massimo due certificati. idpEntityIDObbligatorio L'ID entità SAML per il provider SAML, specificato in formato URI. Ad esempio, https://www.idp.com/saml. idpSingleSignOnURIObbligatorio L'URI dell'endpoint SSO del provider SAML. Ad esempio, `https://www.idp.com/saml/sso`. groupPrefixFacoltativo Il prefisso facoltativo da anteporre a ogni nome del gruppo. userPrefixFacoltativo Il prefisso facoltativo da anteporre al nome utente. userAttributeFacoltativo Il nome dell'attributo nella risposta SAML che contiene il nome utente. Se questo attributo non è presente nella risposta SAML, l'autenticazione non riesce. groupsAttributeFacoltativo Il nome dell'attributo nella risposta SAML che contiene i gruppi dell'utente. (Facoltativo) Se il tuo provider di identità utilizza attributi personalizzati, configura prima gli attributi nel tuo IdP. Poi aggiungi le coppie chiave-valore corrispondenti nella sezione
samldel fileidentity-provider-config.yamlper ulteriori rivendicazioni relative a utenti o gruppi, ad esempio il reparto o la data di nascita. Quando applichi le modifiche alla configurazione del provider di identità, GKE Identity Service riconosce gli attributi personalizzati. Ecco un esempio di attributi personalizzati:"attributeMapping": { "attribute.birthday": "assertion.birthday", "attribute.department": "assertion.department" }Configura la patch di configurazione del provider di identità:
kubectl apply -f identity-provider-config.yamlAttendi la riconfigurazione dei vari componenti del sistema.
Verifica la configurazione aprendo la console dell'interfaccia utente di amministrazione della piattaforma in un browser web. Seleziona Log in with pa-idp-oidc (Accedi con pa-idp-oidc) dalla pagina di reindirizzamento. Se viene eseguito il reindirizzamento all'istanza IdP dell'account PA e dopo l'accesso con l'istanza IdP dell'account PA viene eseguito il reindirizzamento alla pagina della console dell'interfaccia utente amministratore della piattaforma, la configurazione è riuscita. In caso contrario, controlla i valori in
identity-provider-config.yamle ripeti il passaggio precedente.
Prefisso utente e gruppo
I prefissi di utenti e gruppi devono essere impostati per ogni IdP in Distributed Cloud
per evitare conflitti di denominazione tra account di IdP diversi. Il prefisso viene utilizzato
con il nome dell'utente e del gruppo per concatenare il nome del soggetto nei binding dei ruoli
nel cluster. Ad esempio, per un utente con nome jack@example.com,
e il prefisso utente dell'IdP è example-org-idp-, il nome del soggetto nel
cluster sarebbe example-org-idp-jack@example.com.
Per decidere il valore del prefisso:
- Includi il livello della gerarchia (radice, organizzazione, progetto).
- Includi il nome dell'IdP (adfs, keycloak).
- Ti consigliamo di aggiungere un carattere separatore come
-come suffisso perché non viene aggiunto alcun separatore tra il prefisso e il nome utente.
Assegnare l'amministratore iniziale
Per concedere l'accesso iniziale all'organizzazione, il PA deve essere assegnato come
amministratore dell'organizzazione. Per assegnare il PA come amministratore iniziale, crea un IAMRoleBinding nel server API globale:
kubectl apply -f --kubeconfig=GLOBAL_API_SERVER_KUBECONFIG - <<EOF
apiVersion: iam.global.gdc.goog/v1
kind: IAMRoleBinding
metadata:
name: PA_INITIAL_ADMIN_EMAIL-binding
namespace: platform
spec:
roleRef:
apiGroup: iam.global.gdc.goog
kind: IAMRole
name: organization-iam-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: PA_IDP_PREFIXPA_INITIAL_ADMIN_EMAIL
EOF
1.10 Stabilisci la connettività di rete per l'organizzazione
Un'organizzazione appena creata è isolata e non è possibile accedervi da nessuna rete esterna. Per rendere operativa l'organizzazione, devi connetterla a una o più reti esterne utilizzando il servizio Interconnect.
Questo processo prevede la configurazione di un insieme di risorse personalizzate che definiscono la connessione logica. Di seguito sono riportati due scenari comuni per fornire la connettività a una nuova organizzazione.
Scenario 1: collegamento di un'organizzazione a un interconnessione condivisa esistente
Se hai un interconnessione esistente per una rete condivisa, devi solo aggiornare AttachmentGroup e RoutePolicy per includere la nuova organizzazione.
Aggiorna
AttachmentGroup: unAttachmentGroupspecifica quali organizzazioni possono utilizzare un insieme di collegamenti VLAN. Modifica il file YAMLAttachmentGroupe aggiungi la nuova organizzazione all'elencospec.entities. Per un'organizzazione v2, devi specificare la retedomainType(OrgAdmin,OrgDataoOrgMixed) a cui connetterti.Esempio di aggiornamento
AttachmentGroup:apiVersion: system.private.gdc.goog/v1alpha1 kind: AttachmentGroup metadata: name: attachment-group-shared namespace: gpc-system spec: identifier: shared-network entities: - orgName: existing-org-1 # Existing organization domainType: OrgMixed - orgName: new-customer-org # Add the new organization domainType: OrgMixedAggiorna il
RoutePolicy: UnRoutePolicydefinisce i prefissi IP pubblicizzati. Modifica la policy e aggiungi le subnet IP esterni per la nuova organizzazione aspec.out.ipPrefixList. In questo modo, il traffico in entrata può raggiungere l'organizzazione.Esempio di aggiornamento
RoutePolicy:apiVersion: system.private.gdc.goog/v1alpha1 kind: RoutePolicy metadata: name: shared-routepolicy namespace: gpc-system spec: # ... other fields ... out: asPathAccessList: - action: Permit asPathRegex: ".*" ipPrefixList: - action: Permit ipPrefix: EXTERNAL_SUBNET_OF_EXISTING_ORG_1 - action: Permit ipPrefix: EXTERNAL_SUBNET_OF_NEW_CUSTOMER_ORG # Add new prefix # ... deny rules ...Applica le modifiche utilizzando
kubectl applycon il processo Infrastructure as Code (IaC).
Scenario 2: creazione di una nuova interconnessione dedicata
Per una connessione dedicata, devi creare un nuovo insieme di risorse di interconnessione. L'intero processo prevede la creazione di cinque risorse personalizzate in ordine.
- Crea un
InterconnectLinkper ogni nuova connessione fisica. - Crea un
InterconnectGroupper raggruppare i link fisici e consentire la nuova organizzazione. - Crea un
AttachmentGroupe specifica la nuova organizzazione nell'elencoentities. - Crea un
RoutePolicyche consenta i prefissi IP in entrata e in uscita per questa connessione dedicata. - Crea una o più risorse
InterconnectAttachmentper definire le VLAN e le sessioni BGP.
Per esempi completi e passaggi dettagliati per ciascuna di queste risorse, consulta la documentazione Configurare un'interconnessione.
1.11 Configurare il webhook di Alertmanager per connettersi a ServiceNow
Segui i passaggi descritti in MON-T0016 per connettere il webhook di Alertmanager a ServiceNow per la creazione di incident.
1.12 Configura il listino prezzi di fatturazione per l'organizzazione
Il sottocomponente Fatturazione per un'organizzazione richiede che i prodotti o i servizi da fatturare siano configurati con la risorsa personalizzata SKUDescription. Un singolo SKUDescription descrive un singolo prodotto o
servizio da fatturare insieme al relativo prezzo. Una raccolta di oggetti SKUDescription
può quindi essere considerata il listino prezzi di un'organizzazione. I
passaggi seguenti configurano il prospetto dei prezzi per l'organizzazione in IAC.
1.12.1 Ottenere il prospetto dei prezzi
Se non disponi già delle risorse del foglio dei prezzi SKUDescription per un'organizzazione, contatta l'Ufficio di gestione del programma (PMO) per ottenere il foglio dei prezzi. Il prospetto dei prezzi deve essere una serie di file YAML contenenti risorse
SKUDescription.
1.12.2 Determinare se il listino prezzi è condiviso o meno
Il prospetto dei prezzi può essere condiviso tra tutte le organizzazioni o configurato per ogni organizzazione. L'Ufficio di gestione del progetto può informarti se il foglio dei prezzi è condiviso o meno.
1.12.2.1 Foglio prezzi condiviso
Se il prospetto dei prezzi è condiviso, inseriscilo nella cartella IAC condivisa common-data.
Se questa organizzazione non è la prima a essere creata, il foglio dei prezzi potrebbe già esistere nella cartella condivisa
common-data. Se il foglio dei prezzi esiste, verifica che siano stati seguiti i passaggi 2-4 e procedi con il passaggio 5.Crea la cartella condivisa per il foglio prezzi.
mkdir -p IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/Sostituisci IAC_REPO_PATH con il percorso del repository IAC.
Salva le risorse YAML del foglio dei prezzi
SKUDescriptionin questa cartella. Successivamente, la cartellaskudescriptionsdeve contenere file YAML separati per area. Configura la struttura delle cartelle e i file YAML in modo che siano in linea con il tuo caso d'uso della fatturazione:Fatturazione gestita dal partner: Google addebita l'importo al partner. Colloca le risorse
SKUDescriptionnello spazio dei nomipartner-billing-system.Fatturazione cliente: il partner addebita l'importo all'utente finale. Colloca le risorse
SKUDescriptionnello spazio dei nomibilling-system.
Gli esempi riportati di seguito mostrano le strutture dei file dei modelli di fatturazione sia per la fatturazione dei clienti sia per quella gestita dai partner. Per ogni modello, vengono visualizzati due servizi, di calcolo e di archiviazione, con due file YAML per ogni servizio:
Fatturazione cliente:
├── customer ├── compute │ ├── compute-sku1.yaml │ └── compute-sku2.yaml └── storage ├── storage-sku1.yaml └── storage-sku2.yamlFatturazione gestita dal partner:
├── partner ├── compute │ ├── partner-compute-sku1.yaml │ └── partner-compute-sku2.yaml └── storage ├── partner-storage-sku1.yaml └── partner-storage-sku2.yamlVerifica che nella directory sia presente un file
kustomization.yamlche includa tutti i file YAML del listino prezziSKUDescription.touch IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/kustomization.yaml cd IAC_REPO_PATH/iac/infrastructure/common-data/bil/skudescriptions/ kustomize edit add resource */*.yamlEsporta la variabile di ambiente
ORG_CLUSTER:Per un'organizzazione v1, esegui:
export ORG_CLUSTER=ORG_ADMIN_CLUSTER_NAMEPer un'organizzazione v2, esegui:
export ORG_CLUSTER=ORG_INFRA_CLUSTER_NAME
Crea la directory di fatturazione
skudescriptionsnell'organizzazione:Per un'organizzazione v1:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptionsPer un'organizzazione v2:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions
Sostituisci ORG_CLUSTER_NAME con il nome del cluster di amministrazione dell'organizzazione, a seconda del tipo di versione dell'organizzazione.
Includi il listino prezzi comune nell'organizzazione:
Per un'organizzazione v1:
cat > IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptions/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../../../common-data/bil/skudescriptions EOFPer un'organizzazione v2:
cat > IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions/kustomization.yaml << EOF apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../../../common-data/bil/skudescriptions EOF
Esegui il commit del file YAML e personalizza i file:
cd IAC_REPO_PATH git add "iac" git commitEsegui il push dell'aggiornamento su GitLab:
git -c http.sslVerify=false pushAttendi la revisione del codice e l'unione.
Verifica che gli oggetti
SKUDescriptionesistano nel cluster specificato per il tuo modello di fatturazione corrispondente.Esporta il valore
KUBECONFIGin base al tipo di organizzazione.Per un'organizzazione v1, esegui:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIGSostituisci ORG_ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione dell'organizzazione, ad esempio
/tmp/${ORG}-admin-kubeconfig.Per un'organizzazione v2, esegui:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIGSostituisci MANAGEMENT_API_SERVER_KUBECONFIG con il percorso di kubeconfig del server API Management, ad esempio
/tmp/${ORG}-management-kubeconfig.
Esegui l'interfaccia a riga di comando
kubectl:Per la fatturazione cliente:
kubectl get SKUDescription -n billing-systemPer la fatturazione partner:
kubectl get SKUDescription -n partner-billing-system
1.12.2.2 Foglio dei prezzi specifico dell'organizzazione
Se il prospetto dei prezzi è specifico per un'organizzazione, devi inserirlo nella cartella del cluster dell'organizzazione.
Crea la directory di fatturazione
skudescriptionsnel cluster dell'organizzazione:Per un'organizzazione v1:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptionsPer un'organizzazione v2:
mkdir -p IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions
Salva le risorse YAML del foglio dei prezzi
SKUDescriptionin questa cartella. Successivamente, la cartellaskudescriptionsdeve contenere file YAML separati per area. Nell'esempio seguente, vengono visualizzati due servizi, compute e storage, con due file YAML ciascuno:. ├── compute │ ├── compute-sku1.yaml │ └── compute-sku2.yaml └── storage ├── storage-sku1.yaml └── storage-sku2.yamlAssicurati che nella directory sia presente un file
kustomization.yamlche includa tutti i file YAML del listino prezziSKUDescription.Per un'organizzazione v1:
touch IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptions/kustomization.yaml cd IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/bil/skudescriptions/ kustomize edit add resource */*.yamlPer un'organizzazione v2:
touch IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions/kustomization.yaml cd IAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/bil/skudescriptions/ kustomize edit add resource */*.yaml
Assicurati che il file
kustomization.yamlnella radice dell'organizzazione contenga la cartellabil/skudescriptionsappena aggiunta. ControllaIAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME/kustomization.yamlper un'organizzazione v1 eIAC_REPO_PATH/iac/infrastructure/zonal/zones/ZONE_NAME/ORG_CLUSTER_NAME-management/kustomization.yamlper un'organizzazione v2 :apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ... # existing resource items - bil/skudescriptionsEsegui il commit e il trasferimento temporaneo del file YAML e dei file kustomize:
cd IAC_REPO_PATH git add "iac" git commitEsegui il push dell'aggiornamento su GitLab:
git -c http.sslVerify=false pushAttendi la revisione del codice e l'unione.
Verifica che gli oggetti
SKUDescriptionesistano nel cluster specificato:Per un'organizzazione v1, esegui:
export KUBECONFIG=ORG_ADMIN_CLUSTER_KUBECONFIG kubectl get SKUDescription -n billing-systemSostituisci ORG_ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione dell'organizzazione, ad esempio
/tmp/${ORG}-admin-kubeconfig.Per un'organizzazione v2, esegui:
export KUBECONFIG=MANAGEMENT_API_SERVER_KUBECONFIG kubectl get SKUDescription -n billing-systemSostituisci MANAGEMENT_API_SERVER_KUBECONFIG con il percorso di kubeconfig del server API Management, ad esempio
/tmp/${ORG}-management-kubeconfig. .
1.13 Create Billing recurring usages
Distributed Cloud offre
stock keeping unit (SKU) che comportano
addebiti ricorrenti. Tuttavia, Distributed Cloud non tiene traccia dei costi di utilizzo per determinati SKU. Per gestire queste informazioni, utilizza la risorsa
RecurringUsage. Per dettagli e istruzioni sulla creazione di utilizzi ricorrenti, vedi Creare utilizzi ricorrenti.
1.14 Configurare la fatturazione per un'organizzazione
Il sottocomponente di fatturazione non inizia a calcolare i costi per un'organizzazione
finché non viene raggiunta l'ora di inizio della fatturazione. L'ora di inizio fatturazione ha un valore
predefinito di 9999-01-01T00:00:00-07:00. Pertanto, dopo che un'organizzazione è
considerata pronta, l'IO esegue l'override dell'ora di inizio della fatturazione per avviare il
workflow di fatturazione.
1.14.1 Ottieni l'ora di inizio della fatturazione
L'ora di inizio della fatturazione deve corrispondere all'inizio del periodo di esecuzione, disponibile nel contratto. Se non hai ancora l'ora di inizio della fatturazione per un'organizzazione, contatta l'Ufficio di gestione del programma (PMO) per ottenere le informazioni.
1.14.2 Mappa l'account di pagamento della fatturazione a un'organizzazione
Gli ambienti air-gap di Google Distributed Cloud (GDC) richiedono un account di fatturazione per monitorare i costi per progetti e organizzazioni. Se non colleghi un account di fatturazione a un'organizzazione o a un progetto, perderai i dati sui costi associati alla risorsa.
Per addebitare l'utilizzo del servizio al cliente, tutti gli account di fatturazione all'interno di un'organizzazione utilizzano un unico listino prezzi.
1.14.2.1 Prima di iniziare
Prima di continuare, chiedi all'Amministratore sicurezza di concederti i seguenti ruoli obbligatori. Questi ruoli vengono associati allo spazio dei nomi del progetto per la fatturazione a livello di progetto o allo spazio dei nomi della piattaforma per la fatturazione a livello di organizzazione:
Amministratore account di fatturazione dell'organizzazione: crea, gestisci e associa la risorsa
BillingAccount. Chiedi all'Amministratore sicurezza di concederti il ruoloorganization-billing-account-admin.Utente dell'account di fatturazione dell'organizzazione: legge, elenca e associa la risorsa
BillingAccount. Chiedi all'Amministratore sicurezza di concederti il ruoloorganization-billing-account-user.Gestore account di fatturazione dell'organizzazione: legge, elenca, crea e aggiorna la risorsa
BillingAccountBinding. Chiedi all'Amministratore sicurezza di concederti il ruoloorganization-billing-manager.
1.14.2.2 Crea un nuovo account di fatturazione
Un account di fatturazione è identificato in modo univoco dal suo name e dal suo namespace. Per creare un account di fatturazione, utilizza una risorsa personalizzata per stabilire name e namespace:
Crea un file YAML e aggiungi la risorsa personalizzata
BillingAccounte i seguenti contenuti:apiVersion: billing.gdc.goog/v1 kind: BillingAccount metadata: namespace: platform name: BIL_ACCOUNT_NAME spec: displayName: BIL_DISPLAY_NAME paymentSystemConfig: cloudBillingConfig: accountID: "012345-6789AB-CDEF01"Sostituisci le seguenti variabili:
- BIL_ACCOUNT_NAME: il nome dell'account di fatturazione. Ad
esempio.
test-billing-account. - BIL_DISPLAY_NAME: il nome visualizzato dell'account di fatturazione. Ad
esempio.
"Test Billing Account".
- BIL_ACCOUNT_NAME: il nome dell'account di fatturazione. Ad
esempio.
Verifica il tipo di configurazione dei pagamenti. Gli account di fatturazione Distributed Cloud devono avere una delle seguenti configurazioni di pagamento:
cloudBillingConfig: la configurazione di pagamento predefinita. Questa configurazione memorizza un ID account di fatturazione Cloud.customConfig: una configurazione personalizzata per i partner per memorizzare la configurazione di pagamento per fatturare all'organizzazione.customConfigsupporta un dizionario di stringhe chiave-valore, con una chiave obbligatoriapayment-config-type.
Gli esempi seguenti mostrano snippet di file YAML
BillingAccountper diverse configurazioni di pagamento:cloudBillingConfigspec: paymentSystemConfig: cloudBillingConfig: accountID: CLOUD_BILLING_ACCOUNT_IDSostituisci
CLOUD_BILLING_ACCOUNT_IDcon l'Google Cloud ID account di fatturazione.customConfigspec: paymentSystemConfig: customConfig: "payment-config-type": PAYMENT_CONFIG_TYPESostituisci
PAYMENT_CONFIG_TYPEcon il tipo di configurazione di pagamento scelto per la configurazione di fatturazione personalizzata.Se non disponi delle informazioni per la configurazione
customConfigdella tua organizzazione, inserisci i seguenti dettagli:spec: paymentSystemConfig: customConfig: "payment-config-type": "N/A"Il seguente file YAML mostra una risorsa
BillingAccountcompleta con la configurazionecloudBillingConfig:apiVersion: billing.gdc.goog/v1 kind: BillingAccount metadata: namespace: platform name: test-billing-account spec: displayName: "Test Billing Account" paymentSystemConfig: cloudBillingConfig: accountID: "012345-6789AB-CDEF01"Salva il file YAML della risorsa personalizzata. Esegui l'interfaccia a riga di comando di
kubectlper applicare la risorsa nel cluster dell'organizzazione per l'organizzazione o il progetto specifico a cui vuoi addebitare i costi:kubectl --kubeconfig $ORG_KUBECONFIG apply -f billingaccount.yaml
1.14.2.3 Collega un'organizzazione a un account di fatturazione
Per collegare un'organizzazione a un BillingAccount:
Aggiungi i seguenti contenuti al file YAML
billingaccountbinding.yaml:- Nella sezione
billingAccountRef, compila il camponamecon i contenuti del camponamedelBillingAccountche vuoi collegare. - Nella sezione
metadata, compila il camponamespacecon i contenuti del campo identico nella risorsaBillingAccount. In questo esempio, lo spazio dei nomi dell'organizzazione èplatform:
apiVersion: billing.gdc.goog/v1 kind: BillingAccountBinding metadata: name: billing namespace: platform spec: billingAccountRef: name: BIL_ACCOUNT_NAME namespace: platform- Nella sezione
Applica il file
billingaccountbinding.yaml:kubectl --kubeconfig $ORG_KUBECONFIG apply -f billingaccountbinding.yaml
1.14.3 Prima di iniziare
Prima di continuare, chiedi all'Amministratore sicurezza di concederti il ruolo Bil Monitor (bil-monitor) nel cluster di amministrazione dell'organizzazione per lo spazio dei nomi billing-system.
Questa autorizzazione ti consente di leggere le risorse correlate per la convalida.
1.14.4 Sostituisci l'ora di inizio della fatturazione
Crea due file YAML con i seguenti percorsi:
infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME/bil-monetizer-override.yaml.infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME/bil-invoice-override.yaml.- Crea le sottodirectory necessarie per ogni file se non sono presenti.
Aggiungi la risorsa
SubcomponentOverridee i seguenti contenuti a ogni file:Per la fatturazione cliente:
File
bil-monetizer-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-monetizer namespace: ORG_NAME spec: subComponentRef: bil-monetizer backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONEFile
bil-invoice-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-invoice namespace: ORG_NAME spec: subComponentRef: bil-invoice backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE
Per la fatturazione gestita dal partner:
Aggiungi il flag
enablePartnerBilling: truealla fine di ogni file YAML:File
bil-monetizer-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-monetizer namespace: ORG_NAME spec: subComponentRef: bil-monetizer backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: trueFile
bil-invoice-override.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-invoice namespace: ORG_NAME spec: subComponentRef: bil-invoice backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: true
Sostituisci le seguenti variabili:
ORG_NAME: il nome dell'organizzazione. Ad esempio:
org-1.BILLING_START_TIME: il timestamp per avviare il flusso di lavoro di fatturazione.Il timestamp deve seguire il formato RFC 3339. Ad esempio, se il flusso di lavoro di fatturazione inizia il 01/01/2024 con il fuso orario del Pacifico (UTC-8) di Stati Uniti e Canada, aggiungi il valore del timestamp come
2024-01-01T00:00:00-08:00.BILLING_TIMEZONE: il fuso orario del flusso di lavoro di fatturazione. Il fuso orario deve seguire il formato RFC 3339. Ad esempio, se il fuso orario di fatturazione è il fuso orario standard della costa del Pacifico degli Stati Uniti e del Canada (UTC-8), aggiungi il valore del fuso orario come
PST8PDT.
File
bil-monetizer-override-mp.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-monetizer namespace: ORG_NAME-mp spec: subComponentRef: bil-monetizer backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: trueFile
bil-invoice-override-mp.yaml:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: bil-invoice namespace: ORG_NAME-mp spec: subComponentRef: bil-invoice backend: operableParameters: billingStartTime: BILLING_START_TIME billingTimezone: BILLING_TIMEZONE enablePartnerBilling: true
Salva e archivia i file YAML nella cartella
infrastructure/zonal/zones/ZONE_NAME/root-admin/components/bil/ORG_NAME.Crea una richiesta di pull contenente i file YAML insieme al file di personalizzazione necessario.
1.14.5 Convalida l'ora di inizio della fatturazione
Verifica di aver sostituito l'ora di inizio della fatturazione per il monetizzatore e la generazione delle fatture:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG \
get deployment billing-monetizer -n billing-system \
-o jsonpath='{.spec.template.spec.containers[0].args}{"\n"}'
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG \
get cronjob billing-ig-job -n billing-system \
-o jsonpath='{.spec.jobTemplate.spec.template.spec.containers[0].args}{"\n"}'
1.15 Configura la policy di rete del proxy di archiviazione degli oggetti nel cluster di amministrazione dell'organizzazione
1.15.1 Crea il file YAML della policy di rete
Crea il file YAML del criterio di rete allow-obs-system-ingress-traffic, ad esempio networkpolicy.yaml:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
annotations:
policy.network.gke.io/enable-logging: "true"
resourcemanager.gdc.goog/propagated-name: allow-obs-system-ingress-traffic
name: allow-obs-system-ingress-traffic
namespace: obj-system
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
resourcemanager.gdc.goog/project-name: obs-system
podSelector: {}
policyTypes:
- Ingress
1.15.2 Applica il criterio di rete al cluster di amministrazione dell'organizzazione
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG apply -f networkpolicy.yaml
1.16. Creare un sito di backup
Se usufruisci dell'assistenza per il ripristino di emergenza, devi completare di nuovo i passaggi precedenti per il sito di backup. Se non hai attivato il ripristino di emergenza, salta questa sezione.
- Segui le indicazioni della sezione 1.4. - 1.9. per creare un'altra organizzazione per il sito di backup.
1.17. Risolvere i problemi relativi alla creazione dell'organizzazione
1.17.1. Conferma che tutte le risorse di cui è stato eseguito il deployment siano integre e presenti
Il processo di creazione dell'organizzazione crea più risorse in diversi cluster Kubernetes. Per prima cosa, controlla le risorse di cui è stato eseguito il deployment e assicurati che siano
in buono stato. Le sezioni seguenti descrivono le risorse create per un'organizzazione chiamata operations.
1.17.2. Conferma tutte le risorse di cui è stato eseguito il deployment nel cluster di amministrazione principale
Completa i seguenti passaggi per verificare che tutte le risorse nel cluster di amministrazione principale siano integre e presenti:
Ottieni la configurazione kubeconfig richiesta per il cluster di amministrazione root seguendo le istruzioni riportate in IAM-R0004. Assicurati di impostare le seguenti variabili di ambiente e l'alias per queste istruzioni di verifica:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG export ORG="ORG_NAME" alias k=kubectlVerifica che le risorse firewall siano disponibili:
Stabilisci una connessione SSH al firewall e verifica che sia stato creato un nuovo
vsys:show config running | match 'vsys[0-9] 'L'output è simile al seguente:
vsys1 { vsys2 {Consulta la risorsa
FirewallVirtualSystem:k get firewallvirtualsystem -n gpc-systemL'output è simile al seguente:
NAME AGE kb-ab-fw01-internal-vsys2-operations 4d19h kb-ab-fw01-vsys-root-admin 13d kb-ac-fw01-internal-vsys2-operations 4d19h kb-ac-fw01-vsys-root-admin 13d
Verifica che le risorse di archiviazione siano disponibili:
Consulta la risorsa
StorageVirtualMachine:k get StorageVirtualMachine -n gpc-systemL'output è simile al seguente:
NAME STORAGEORG MGMTIP READY AGE operations-admin operations 10.0.2.10 True 5d22h operations-user operations 10.0.2.18 True 5d22h root-admin root 10.0.2.2 True 13d
Verifica che le risorse HSM siano disponibili:
Controlla gli HSM:
k get hsms -n gpc-systemL'output è simile al seguente:
NAMESPACE NAME AGE IP READY REASON gpc-system zk-aa-hsm01 2h 198.51.100.192 True ReconcileHSMSuccess gpc-system zk-aa-hsm02 2h 198.51.100.193 True ReconcileHSMSuccess gpc-system zk-ab-hsm01 2h 198.51.100.194 True ReconcileHSMSuccessControlla il cluster HSM:
k get hsmcluster -n gpc-systemL'output è simile al seguente:
NAMESPACE NAME AGE READY REASON gpc-system hsmcluster 38h True ReconcileHSMClusterSuccessControlla il tenant HSM:
k get hsmtenant -AL'output è simile al seguente:
NAMESPACE NAME AGE READY REASON gpc-system root 13d True ReconcileHSMTenantSuccess operations operations 5d22h True ReconcileHSMTenantSuccess
Verifica che le risorse della macchina e del nodo siano disponibili:
Consulta le risorse di
AddressPoolClaim:k get addresspoolclaims -AL'output è simile al seguente:
NAMESPACE NAME AGE operations admin-control-plane-node-pool 5d23h operations operations-admin-dns-default-ipv4-ipc 5d23h operations operations-admin-load-balancer-default-ipv4-ipc 5d23hConsulta le risorse di
NodePoolClaim:k get nodepoolclaims -AL'output è simile al seguente:
NAMESPACE NAME AGE operations admin-control-plane-node-pool 5d23h root root-admin-control-plane 13dConsulta le risorse di
NodePool:k get nodepool -AL'output è simile al seguente:
NAMESPACE NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN operations admin-control-plane-node-pool 3 0 0 0 0 root root-admin-control-plane 3 0 0 0 0Controlla i cluster bare metal:
k get baremetalclusters -AL'output è simile al seguente:
NAMESPACE NAME CLUSTER READY operations operations-admin operations-admin true root root-admin root-admin trueControlla le macchine bare metal:
k get baremetalmachines -AL'output è simile al seguente:
NAMESPACE NAME CLUSTER READY INSTANCEID MACHINE operations 10.251.82.28 operations-admin true baremetal://10.251.82.28 10.251.82.28 operations 10.251.82.29 operations-admin true baremetal://10.251.82.29 10.251.82.29 operations 10.251.82.30 operations-admin true baremetal://10.251.82.30 10.251.82.30 root 10.251.80.2 root-admin true baremetal://10.251.80.2 10.251.80.2 root 10.251.80.3 root-admin true baremetal://10.251.80.3 10.251.80.3 root 10.251.80.4 root-admin true baremetal://10.251.80.4 10.251.80.4Controlla i server. Si trovano nello stato
provisioned:k get servers -n gpc-system | grep provisionedL'output è simile al seguente:
kb-aa-bm01 13d o1-highmem1-40-gdc-metal 10.251.252.61 10.251.80.2 10.251.252.62 provisioned true kb-aa-bm02 13d o1-standard1-64-gdc-metal 10.251.252.63 10.251.82.28 10.251.252.64 provisioned true kb-aa-bm03 13d o1-standard1-64-gdc-metal 10.251.252.65 10.251.82.29 10.251.252.66 provisioned true kb-aa-bm04 13d o1-standard1-64-gdc-metal 10.251.252.67 10.251.82.30 10.251.252.68 provisioned true kb-aa-bm08 13d o1-highmem1-96-gdc-metal 10.251.252.75 10.0.35.2 10.251.252.76 provisioned true kb-aa-bm10 13d o1-highmem1-96-gdc-metal 10.251.252.79 10.0.35.4 10.251.252.80 provisioned true kb-aa-bm14 13d o1-highgpu1-48-gdc-metal 10.251.252.87 10.0.35.9 10.251.252.88 provisioned true kb-aa-bm15 13d o1-highgpu1-48-gdc-metal 10.251.252.89 10.0.35.10 10.251.252.90 provisioned true kb-aa-bm16 13d o1-highgpu1-48-gdc-metal 10.251.252.91 10.0.35.11 10.251.252.92 provisioned true kb-ab-bm01 13d o1-highmem1-40-gdc-metal 10.251.253.61 10.251.80.3 10.251.253.62 provisioned true kb-ac-bm01 13d o1-highmem1-40-gdc-metal 10.251.254.61 10.251.80.4 10.251.254.62 provisioned trueControlla il cluster Kubernetes:
k get cluster -AL'output è simile al seguente:
NAMESPACE NAME AGE operations operations-admin 5d23h root root-admin 13dControlla i secret per kubeconfig:
k get secrets -A | grep kubeconfigL'output è simile al seguente:
operations operations-admin-kubeconfig Opaque 1 5d22h root root-admin-kubeconfig Opaque 1 13d
1.17.3. Conferma tutte le risorse di cui è stato eseguito il deployment nei cluster dell'organizzazione v1
Completa i seguenti passaggi per verificare che tutte le risorse nel cluster di amministrazione dell'organizzazione e nel cluster di sistema di un'organizzazione v1 siano integre e presenti. Se hai un'organizzazione v2, vai alla sezione successiva.
1.17.3.1. Conferma tutte le risorse di cui è stato eseguito il deployment in un cluster di amministrazione dell'organizzazione
Ottieni la configurazione kubeconfig richiesta per il cluster di amministrazione root seguendo le istruzioni riportate in IAM-R0004. Assicurati di impostare le seguenti variabili di ambiente e l'alias per queste istruzioni di verifica:
export ORG="ORG_NAME" export KUBECONFIG=ROOT_ADMIN_KUBECONFIG k get secrets -n ${ORG} ${ORG}-admin-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-admin-kubeconfig export ORG_ADMIN_KUBECONFIG=/tmp/${ORG}-admin-kubeconfig alias ka="kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG}"Verifica che le risorse della macchina e del nodo siano disponibili:
Controlla i cluster bare metal:
ka get baremetalclusters -AL'output è simile al seguente:
NAMESPACE NAME CLUSTER READY operations-system-cluster operations-system operations-system trueControlla le macchine bare metal:
ka get baremetalmachines -AL'output è simile al seguente:
NAMESPACE NAME CLUSTER READY INSTANCEID MACHINE operations-system-cluster 10.0.35.10 operations-system true baremetal://10.0.35.10 10.0.35.10 operations-system-cluster 10.0.35.11 operations-system true baremetal://10.0.35.11 10.0.35.11 operations-system-cluster 10.0.35.2 operations-system true baremetal://10.0.35.2 10.0.35.2 operations-system-cluster 10.0.35.3 operations-system true baremetal://10.0.35.3 10.0.35.3 operations-system-cluster 10.0.35.4 operations-system true baremetal://10.0.35.4 10.0.35.4 operations-system-cluster 10.0.35.9 operations-system true baremetal://10.0.35.9 10.0.35.9 operations-system-cluster 10.251.82.205 operations-system true baremetal://10.251.82.205 10.251.82.205 operations-system-cluster 10.251.82.206 operations-system true baremetal://10.251.82.206 10.251.82.206 operations-system-cluster 10.251.82.207 operations-system true baremetal://10.251.82.207 10.251.82.207 operations-system-cluster 10.251.82.232 operations-system true baremetal://10.251.82.232 10.251.82.232Controlla le macchine:
ka get machines -AL'output è simile al seguente:
NAMESPACE NAME NODEPOOL operations-system-cluster 10.0.35.10 worker-node-pool-o1-highgpu1-48-gdc-metal operations-system-cluster 10.0.35.11 worker-node-pool-o1-highgpu1-48-gdc-metal operations-system-cluster 10.0.35.2 worker-node-pool-o1-highmem1-96-gdc-metal operations-system-cluster 10.0.35.3 worker-node-pool-o1-highmem1-96-gdc-metal operations-system-cluster 10.0.35.4 worker-node-pool-o1-highmem1-96-gdc-metal operations-system-cluster 10.0.35.9 worker-node-pool-o1-highgpu1-48-gdc-metal operations-system-cluster 10.251.82.205 control-plane-node-pool operations-system-cluster 10.251.82.206 control-plane-node-pool operations-system-cluster 10.251.82.207 control-plane-node-pool operations-system-cluster 10.251.82.232 control-plane-node-poolConsulta le risorse di
VirtualmachinesInstance:ka get virtualmachineinstances -AL'output è simile al seguente:
NAMESPACE NAME AGE PHASE IP NODENAME READY operations-system-cluster vm-19753801 2d16h Running 10.251.82.207 kb-aa-bm02 True operations-system-cluster vm-3661f750 4d19h Running 10.251.82.232 kb-aa-bm03 True operations-system-cluster vm-3c77c480 5d20h Running 10.251.82.206 kb-aa-bm04 TrueConsulta le risorse di
NodePool:ka get nodepools -AL'output è simile al seguente:
NAMESPACE NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN operations-system-cluster control-plane-node-pool 3 0 0 0 0 operations-system-cluster worker-node-pool-o1-highgpu1-48-gdc-metal 3 0 0 0 0 operations-system-cluster worker-node-pool-o1-highmem1-96-gdc-metal 2 0 0 0 0Controlla i cluster Kubernetes:
ka get clusters -AL'output è simile al seguente:
NAMESPACE NAME AGE operations-system-cluster operations-system 5d20hControlla i nodi:
ka get nodes -AL'output è simile al seguente:
NAME STATUS ROLES AGE VERSION kb-aa-bm02 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm03 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm04 Ready control-plane,master 5d23h v1.23.5-gke.1505Controlla i secret per kubeconfig:
ka get secret -n ${ORG}-system-cluster ${ORG}-system-kubeconfigL'output è simile al seguente:
NAME TYPE DATA AGE operations-system-kubeconfig Opaque 1 5d20h
1.17.3.2. Conferma tutte le risorse di cui è stato eseguito il deployment nel cluster utente di sistema
Completa i seguenti passaggi per verificare che tutte le risorse nel cluster di sistema siano integre e presenti:
Ottieni la configurazione kubeconfig richiesta per il cluster di amministrazione root seguendo le istruzioni riportate in IAM-R0004. Assicurati di impostare le seguenti variabili di ambiente e l'alias per queste istruzioni di verifica:
export ORG="ORG_NAME" export KUBECONFIG=ROOT_ADMIN_KUBECONFIG k get secrets -n ${ORG} ${ORG}-admin-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-admin-kubeconfig export ORG_ADMIN_KUBECONFIG=/tmp/${ORG}-admin-kubeconfig alias ka="kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG}" ka get secret -n ${ORG}-system-cluster ${ORG}-system-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-system-kubeconfig export SYSTEM_KUBECONFIG=/tmp/${ORG}-system-kubeconfig alias ku="kubectl --kubeconfig ${SYSTEM_KUBECONFIG}"Verifica che le risorse della macchina e del nodo siano disponibili:
Consulta la risorsa
VirtualmachineInstance:ku get vmi -AL'output è simile al seguente (se è stato creato un cluster utente):
NAMESPACE NAME AGE PHASE IP NODENAME READY gdc-vm-infra vm-61aa554d 3d21h Running 10.0.35.6 kb-aa-bm10 True gdc-vm-infra vm-b627da1f 3d21h Running 10.0.35.5 kb-aa-bm08 TrueControlla i nodi:
ku get nodesL'output è simile al seguente:
NAME STATUS ROLES AGE VERSION kb-aa-bm10 Ready worker 5d20h v1.23.5-gke.1505 kb-aa-bm14 Ready worker 38h v1.23.5-gke.1505 kb-aa-bm15 Ready worker 38h v1.23.5-gke.1505 kb-aa-bm16 Ready worker 38h v1.23.5-gke.1505 vm-19753801 Ready control-plane,master 5d21h v1.23.5-gke.1505 vm-3661f750 Ready control-plane,master 4d20h v1.23.5-gke.1505 vm-3c77c480 Ready control-plane,master 5d20h v1.23.5-gke.1505Controlla le allocazioni delle GPU:
ku get gpuallocations -AL'output è simile al seguente:
NAMESPACE NAME ALLOCATED DEVICEMODEL vm-system kb-aa-bm14 true A100 PCIe 40GB vm-system kb-aa-bm15 true A100 PCIe 40GB vm-system kb-aa-bm16
1.17.4. Conferma tutte le risorse di cui è stato eseguito il deployment nei cluster dell'organizzazione v2
Completa i seguenti passaggi per verificare che tutte le risorse nel cluster dell'infrastruttura dell'organizzazione in un'organizzazione v2 siano integre e presenti. Se hai un'organizzazione v1, salta questa sezione.
Ottieni la configurazione kubeconfig richiesta per il cluster di amministrazione root seguendo le istruzioni riportate in IAM-R0004. Assicurati di impostare le seguenti variabili di ambiente e l'alias per queste istruzioni di verifica:
export ORG="ORG_NAME" export KUBECONFIG=ROOT_ADMIN_KUBECONFIG k get secrets -n ${ORG} ${ORG}-admin-kubeconfig -o jsonpath='{.data.value}' \ | base64 -d > /tmp/${ORG}-admin-kubeconfig export ORG_ADMIN_KUBECONFIG=/tmp/${ORG}-admin-kubeconfig alias ka="kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG}"Verifica che i nodi e i server API siano integri:
Controlla i nodi:
ka get nodes -AL'output è simile al seguente:
NAME STATUS ROLES AGE VERSION kb-aa-bm02 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm03 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm04 Ready control-plane,master 5d23h v1.23.5-gke.1505 kb-aa-bm05 Ready worker 5d23h v1.23.5-gke.1505 kb-aa-bm06 Ready worker 5d23h v1.23.5-gke.1505 kb-aa-bm07 Ready worker 5d23h v1.23.5-gke.1505Controlla i secret per kubeconfig:
ka get secret -n management-kube-system kube-admin-remote-kubeconfigL'output è simile al seguente:
NAME TYPE DATA AGE kube-admin-remote-kubeconfig Opaque 1 5d20h
Se applicabile, controlla le allocazioni GPU per verificare che le risorse GPU siano pronte:
ka get gpuallocations -AL'output è simile al seguente:
NAMESPACE NAME ALLOCATED DEVICEMODEL vm-system kb-aa-bm14 true A100 PCIe 40GB vm-system kb-aa-bm15 true A100 PCIe 40GB vm-system kb-aa-bm16
1.17.5. Conferma che tutte le risorse dell'organizzazione siano state riconciliate
Completa i seguenti passaggi per verificare che tutte le risorse correlate all'organizzazione nel cluster di amministrazione radice globale e zonale siano integre e presenti,
supponendo che l'obiettivo sia creare un'organizzazione operations con due zone: zone-1 e zone-2.
Segui la procedura descritta in Accedere all'API Admin root globale per accedere al server API globale e utilizza il seguente alias per kubectl dell'API Admin root globale.
alias kga='kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG export ORG="ORG_NAME"Verifica che le risorse dell'organizzazione globale siano disponibili:
Consulta le risorse globali di
Organization:kga get organization -AL'output è simile al seguente:
NAMESPACE NAME READY gpc-system operations gpc-system rootConsulta le risorse globali di
OrganizationReplica:kga get organizationreplica -AL'output è simile al seguente:
NAMESPACE NAME AGE gpc-system operations-zone1 3d16h gpc-system operations-zone2 3d16h gpc-system root-zone1 3d17h gpc-system root-zone2 3d16hConsulta le risorse globali di
OrganizationZonalConfig:kga get organizationzonalconfig -AL'output è simile al seguente:
NAMESPACE NAME AGE gpc-system operations-zone1-config 3d16h gpc-system operations-zone2-config 3d16hConsulta le risorse globali di
OrganizationZonalConfigReplica:kga get organizationzonalconfigreplica -AL'output è simile al seguente:
NAMESPACE NAME AGE gpc-system operations-zone1-config-zone1 3d16h gpc-system operations-zone1-config-zone2 3d16h gpc-system operations-zone2-config-zone1 3d16h gpc-system operations-zone2-config-zone2 3d16h
Imposta l'alias di configurazione kubeconfig del cluster di amministrazione principale zonale:
alias ka='kubectl --kubeconfig /root/GDC_VERSION/root-admin/root-admin-kubeconfig'Verifica che le risorse dell'organizzazione a livello di zona siano disponibili:
Consulta le risorse di
Organization:ka get organization -AL'output è simile al seguente:
NAMESPACE NAME READY gpc-system operations True gpc-system root TrueConsulta le risorse di
OrganizationReplica:ka get organizationreplica -AL'output è simile al seguente:
NAMESPACE NAME AGE gpc-system operations 3d16h gpc-system root 3d17hConsulta le risorse di
OrganizationZonalConfigReplica:ka get organizationzonalconfigreplica -AL'output è simile al seguente:
NAMESPACE NAME AGE gpc-system operations-zone1-config 3d16h gpc-system operations-zone2-config 3d16h
Segui la procedura descritta in Consenti a qualsiasi indirizzo di accedere a un'organizzazione per consentire il traffico DCI nei cluster di amministrazione dell'organizzazione dal sito di origine al sito di backup.