Accedi ai cluster privati di Google Kubernetes Engine con i pool privati di Cloud Build


Questo tutorial descrive come accedere a un cluster privato Google Kubernetes Engine (GKE) utilizzando i pool privati di Cloud Build. Questo accesso ti consente di utilizzare Cloud Build per eseguire il deployment della tua applicazione in un cluster GKE privato. Questo tutorial è destinato a amministratori di rete ed è applicabile a tutte le situazioni I pool privati di Cloud Build devono comunicare con i servizi in esecuzione in una rete Virtual Private Cloud (VPC) in peering. Ad esempio, i worker del pool privato potrebbero comunicare seguenti servizi:

  • Cluster GKE privato
  • Database Cloud SQL
  • Istanza di Memorystore
  • Istanza Compute Engine in esecuzione in un VPC diverso rispetto a quella in peering con il pool privato di Cloud Build

nei pool privati di Cloud Build Piani di controllo dei cluster GKE entrambi vengono eseguiti in reti VPC di proprietà di Google. Queste reti VPC sono connesse in peering al tuo VPC su Google Cloud. Tuttavia, il peering di rete VPC non supporta il peering transitivo, il che può essere una limitazione quando si utilizzano i pool privati di Cloud Build. Questo tutorial presenta una soluzione che utilizza Cloud VPN per consentire ai worker in un pool privato di Cloud Build per accedere al piano di controllo in un cluster GKE privato.

Questo tutorial presuppone la conoscenza di Google Kubernetes Engine, Cloud Build, il comando gcloud, il peering di rete VPC o Cloud VPN.

Panoramica dell'architettura

Quando crei un cluster GKE privato senza client all'endpoint pubblico, i client possono accedere solo Piano di controllo del cluster GKE utilizzando i suoi indirizzo IP privato. I client come kubectl possono comunicare solo con il piano di controllo se vengono eseguite su un'istanza che ha accesso alla rete VPC e si trova rete autorizzata.

Se vuoi utilizzare Cloud Build per il deployment su questo cluster GKE privato, utilizzare i pool privati di Cloud Build per accedere cluster GKE. I pool privati sono un insieme di istanze worker eseguite in un progetto Google Cloud di proprietà di Google e connesse in peering una rete VPC tramite una connessione di peering di rete VPC. In questo le istanze worker possono comunicare con l'IP privato del piano di controllo del cluster GKE.

Tuttavia, il piano di controllo del cluster GKE viene eseguito progetto di proprietà di Google connesso in peering alla tua rete VPC tramite o una connessione in peering. Il peering di rete VPC non supporta il peering transitivo, quindi non è possibile instradare i pacchetti direttamente tra Cloud Build il pool privato e il piano di controllo del cluster GKE.

Per consentire alle istanze worker di Cloud Build di accedere dal piano di controllo del cluster GKE, puoi eseguire il peering del pool privato e il piano di controllo del cluster GKE alle reti VPC di tua proprietà e poi connettile tramite Cloud VPN. Questo tipo di peering consente a ciascun lato del tunnel VPC di pubblicizzare pool privato e cluster GKE dalle reti del piano di controllo, completando così il percorso.

Il seguente diagramma dell'architettura mostra le risorse utilizzate in questo tutorial:

Tunnel VPN che completa la route tra il pool privato di Cloud Build e il piano di controllo del cluster GKE.

Ti consigliamo di creare nella stessa risorsa tutte le risorse utilizzate in questo tutorial Regione Google Cloud per bassa latenza. Il tunnel VPN può attraversare due diversi regioni se questa comunicazione tra regioni è necessaria per la tua implementazione. Le due reti VPC di tua proprietà possono e appartengono a progetti diversi.

Obiettivi

  • Creare un cluster GKE privato.
  • Configurare un pool privato di Cloud Build.
  • Crea una VPN ad alta disponibilità connessione tra due reti VPC.
  • Abilita il routing dei pacchetti tra due peering di rete VPC e un una connessione VPC.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Abilita le API Cloud Build, Google Kubernetes Engine, and Service Networking.

    Abilita le API

  4. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

Creazione di due reti VPC nel tuo progetto

In questa sezione, creerai due reti VPC e una subnet per nei nodi dei cluster GKE.

  1. In Cloud Shell, crea la prima rete VPC (denominata "Rete VPC peering di pool privati" nel nel diagramma precedente). Non è necessario creare subnet in questa rete.

    gcloud compute networks create PRIVATE_POOL_PEERING_VPC_NAME \
        --subnet-mode=CUSTOM
    

    Sostituisci PRIVATE_POOL_PEERING_VPC_NAME con il nome della tua rete VPC per essere connesso in peering Rete di pool privato di Cloud Build.

  2. Crea la seconda rete VPC (denominata "Rete VPC di peering GKE" nel diagramma precedente):

    gcloud compute networks create GKE_PEERING_VPC_NAME \
        --subnet-mode=CUSTOM
    

    Sostituisci GKE_PEERING_VPC_NAME con il nome del tuo dalla rete VPC per eseguire il peering dal piano di controllo del cluster GKE.

  3. Crea una subnet per i nodi del cluster GKE:

    gcloud compute networks subnets create GKE_SUBNET_NAME \
        --network=GKE_PEERING_VPC_NAME \
        --range=GKE_SUBNET_RANGE \
        --region=REGION
    

    Sostituisci quanto segue:

    • GKE_SUBNET_NAME: il nome della subnet destinato a ospitare i nodi del cluster GKE.
    • GKE_PEERING_VPC_NAME: il nome del tuo dalla rete VPC per eseguire il peering dal piano di controllo del cluster GKE.
    • GKE_SUBNET_RANGE: l'intervallo di indirizzi IP di GKE_SUBNET_NAME. In questo tutorial, puoi: usa 10.244.252.0/22.
    • REGION: la regione Google Cloud che ospita per il cluster GKE. In questo tutorial, puoi: usa us-central1.

A questo punto hai configurato due reti VPC nel tuo progetto e sono pronti per il peering con altri servizi.

Creazione di un cluster GKE privato

In questa sezione creerai il cluster GKE privato.

  1. In Cloud Shell, crea un cluster GKE nessun accesso client all'endpoint pubblico del piano di controllo.

    gcloud container clusters create PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --enable-master-authorized-networks \
        --network=GKE_PEERING_VPC_NAME \
        --subnetwork=GKE_SUBNET_NAME \
        --enable-private-nodes \
        --enable-private-endpoint \
        --enable-ip-alias \
        --master-ipv4-cidr=CLUSTER_CONTROL_PLANE_CIDR
    

    Sostituisci quanto segue:

    • PRIVATE_CLUSTER_NAME: il nome del in un cluster GKE privato.
    • REGION: la regione per cluster GKE. In questo tutorial, utilizza us-central1 per la regione, la stessa che hai utilizzato per reti VPC.
    • GKE_PEERING_VPC_NAME: il nome del tuo dalla rete VPC per eseguire il peering dal piano di controllo del cluster GKE.
    • GKE_SUBNET_RANGE: l'intervallo di indirizzi IP di GKE_SUBNET_NAME. In questo tutorial, puoi: usa 10.244.252.0/22.
    • CLUSTER_CONTROL_PLANE_CIDR: l'indirizzo IP del piano di controllo del cluster GKE. it deve avere un prefisso /28. Per questo tutorial, utilizza 172.16.0.32/28.

    Hai creato un cluster GKE privato, in peering con la rete VPC nel tuo progetto.

  2. Recupera il nome del cluster GKE peering di rete VPC. Questo peering di rete VPC è stato al momento della creazione del cluster GKE.

    export GKE_PEERING_NAME=$(gcloud container clusters describe PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --format='value(privateClusterConfig.peeringName)')
    

    Sostituisci quanto segue:

    • PRIVATE_CLUSTER_NAME: il nome del in un cluster GKE privato.
    • REGION: la regione per cluster GKE. In questo tutorial, utilizza us-central1 per la regione, la stessa che hai utilizzato per reti VPC.
  3. Abilita l'esportazione di route personalizzate per pubblicizzare il pool privato al piano di controllo del cluster GKE:

    gcloud compute networks peerings update $GKE_PEERING_NAME \
        --network=GKE_PEERING_VPC_NAME \
        --export-custom-routes \
        --no-export-subnet-routes-with-public-ip
    

    Sostituisci GKE_PEERING_VPC_NAME con il nome del tuo Rete VPC per il peering con il cluster GKE dal piano di controllo.

    Per ulteriori informazioni sulle route personalizzate, puoi leggere Importazione ed esportazione di route personalizzate.

Creazione di un pool privato di Cloud Build

In questa sezione devi creare il pool privato di Cloud Build.

  1. In Cloud Shell, alloca un intervallo di indirizzi IP denominato PRIVATE_POOL_PEERING_VPC_NAME rete VPC per il pool privato di Cloud Build:

    gcloud compute addresses create RESERVED_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --addresses=PRIVATE_POOL_NETWORK \
        --prefix-length=PRIVATE_POOL_PREFIX \
        --network=PRIVATE_POOL_PEERING_VPC_NAME
    

    Sostituisci quanto segue:

    • RESERVED_RANGE_NAME: il nome del privato Intervallo di indirizzi IP che ospita il pool privato di Cloud Build.
    • PRIVATE_POOL_NETWORK: il primo indirizzo IP di RESERVED_RANGE_NAME. In questo tutorial, puoi: usa 192.168.0.0.
    • PRIVATE_POOL_PREFIX: il prefisso di RESERVED_RANGE_NAME. Ogni pool privato creato utilizzerà /24 di questo intervallo. Per questo tutorial, puoi usare 20; Ciò consente di creare fino a sedici pool.
    • PRIVATE_POOL_PEERING_VPC_NAME: il nome del tuo Rete VPC per il peering con Cloud Build privata di pool.
    • L'intervallo IP è global perché quando --purpose è VPC_PEERING il l'intervallo di indirizzi IP denominato deve essere global.
  2. Creare una connessione privata tra la rete VPC contiene il pool privato di Cloud Build PRIVATE_POOL_PEERING_VPC_NAME:

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=RESERVED_RANGE_NAME \
        --network=PRIVATE_POOL_PEERING_VPC_NAME
    

    Sostituisci quanto segue:

    • RESERVED_RANGE_NAME: il nome del privato Intervallo di indirizzi IP che ospita il pool privato di Cloud Build.
    • PRIVATE_POOL_PEERING_VPC_NAME: il nome del tuo Rete VPC per il peering con Cloud Build privata di pool.
  3. Attiva l'esportazione di route personalizzate per pubblicizzare il Rete del piano di controllo del cluster GKE al pool privato:

    gcloud compute networks peerings update servicenetworking-googleapis-com \
        --network=PRIVATE_POOL_PEERING_VPC_NAME \
        --export-custom-routes \
        --no-export-subnet-routes-with-public-ip
    

    Sostituisci PRIVATE_POOL_PEERING_VPC_NAME con il nome di della tua rete VPC per essere connesso in peering con Cloud Build privata di pool.

  4. Crea un pool privato di Cloud Build in peering con PRIVATE_POOL_PEERING_VPC_NAME:

    gcloud builds worker-pools create PRIVATE_POOL_NAME \
       --region=REGION \
       --peered-network=projects/$GOOGLE_CLOUD_PROJECT/global/networks/PRIVATE_POOL_PEERING_VPC_NAME
    

    Sostituisci quanto segue:

    • PRIVATE_POOL_NAME: il nome del Pool privato di Cloud Build.
    • REGION: la regione per cluster GKE. In questo tutorial, utilizza us-central1 per la regione, la stessa che hai utilizzato per reti VPC.

Hai creato un pool privato di Cloud Build ed è stato eseguito il peering con la rete VPC del tuo progetto.

Creazione di una connessione Cloud VPN tra le due reti VPC

Nel tuo progetto, ora è presente una rete VPC in peering il pool privato di Cloud Build e un secondo VPC in peering con il cluster GKE privato.

In questa sezione creerai una connessione Cloud VPN tra a due reti VPC nel tuo progetto. Questa connessione è stata completata della route e consente ai pool privati di Cloud Build per accedere al cluster GKE.

  1. In Cloud Shell, crea due gateway VPN ad alta disponibilità che si connettono e l'altro. Per creare questi gateway, segui le istruzioni in Creazione di due gateway VPN ad alta disponibilità completamente configurati che si connettono tra loro. La configurazione è completa dopo aver creato le sessioni BGP. Mentre seguendo queste istruzioni, utilizza i seguenti valori:

    • PRIVATE_POOL_PEERING_VPC_NAME per NETWORK_1
    • GKE_PEERING_VPC_NAME per NETWORK_2
    • REGION per REGION_1 e REGION_2
  2. Configura ciascuna delle quattro sessioni BGP che hai creato per pubblicizzare alla rete VPC del pool privato e Rete VPC del piano di controllo del cluster GKE:

    gcloud compute routers update-bgp-peer ROUTER_NAME_1 \
        --peer-name=PEER_NAME_GW1_IF0 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
    
    gcloud compute routers update-bgp-peer ROUTER_NAME_1 \
        --peer-name=PEER_NAME_GW1_IF1 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
    
    gcloud compute routers update-bgp-peer ROUTER_NAME_2 \
        --peer-name=PEER_NAME_GW2_IF0 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR
    
    gcloud compute routers update-bgp-peer ROUTER_NAME_2 \
        --peer-name=PEER_NAME_GW2_IF1 \
        --region=REGION \
        --advertisement-mode=CUSTOM \
        --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR
    

    Dove i seguenti valori sono gli stessi nomi che hai utilizzato quando hai e creato i due gateway VPN ad alta disponibilità:

    • ROUTER_NAME_1
    • PEER_NAME_GW1_IF0
    • PEER_NAME_GW1_IF1
    • ROUTER_NAME_2
    • PEER_NAME_GW2_IF0
    • PEER_NAME_GW2_IF1

Abilitazione dell'accesso di Cloud Build al piano di controllo del cluster GKE

Ora che hai una connessione VPN tra i due VPC reti del tuo progetto, abilita l'accesso a Cloud Build dal piano di controllo del cluster GKE.

  1. In Cloud Shell, aggiungi l'intervallo di rete del pool privato al piano di controllo autorizzato in GKE:

    gcloud container clusters update PRIVATE_CLUSTER_NAME \
        --enable-master-authorized-networks \
        --region=REGION \
        --master-authorized-networks=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
    

    Sostituisci quanto segue:

    • PRIVATE_CLUSTER_NAME: il nome del in un cluster GKE privato.
    • REGION: la regione per cluster GKE. In questo tutorial, utilizza us-central1 per la regione, la stessa che hai utilizzato per reti VPC.
    • PRIVATE_POOL_NETWORK: il primo indirizzo IP di RESERVED_RANGE_NAME. In questo tutorial, possono usare 192.168.0.0.
    • PRIVATE_POOL_PREFIX: il prefisso di RESERVED_RANGE_NAME. Ogni pool privato creato utilizzerà /24 di questo intervallo. Per questo tutorial, puoi usare 20; Ciò consente di creare fino a sedici pool.
  2. Consenti all'account di servizio che stai utilizzando per la build di accedere a Piano di controllo del cluster GKE:

    export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format 'value(projectNumber)')
    
    gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
        --member=serviceAccount:SERVICE_ACCOUNT \
        --role=roles/container.developer
    

I pool privati di Cloud Build ora possono accedere dal piano di controllo del cluster GKE.

Verifica della soluzione in corso...

In questa sezione, verificherai che la soluzione funzioni eseguendo il comando il comando kubectl get nodes in un passaggio di build in esecuzione nell'istanza privata piscina.

  1. In Cloud Shell, crea una cartella temporanea Il file di configurazione di Cloud Build che esegue il comando kubectl get nodes:

    mkdir private-pool-test && cd private-pool-test
    
    cat > cloudbuild.yaml <<EOF
    steps:
    - name: "gcr.io/cloud-builders/kubectl"
      args: ['get', 'nodes']
      env:
      - 'CLOUDSDK_COMPUTE_REGION=REGION'
      - 'CLOUDSDK_CONTAINER_CLUSTER=PRIVATE_CLUSTER_NAME'
    options:
      workerPool:
        'projects/$GOOGLE_CLOUD_PROJECT/locations/REGION/workerPools/PRIVATE_POOL_NAME'
    EOF
    

    Sostituisci quanto segue:

    • REGION: la regione per cluster GKE. In questo tutorial, utilizza us-central1 per la regione, la stessa che hai utilizzato per reti VPC.
    • PRIVATE_CLUSTER_NAME: il nome del in un cluster GKE privato.
    • PRIVATE_POOL_NAME: il nome del Pool privato di Cloud Build.
  2. Avvia il job di creazione:

    gcloud builds submit --config=cloudbuild.yaml
    
  3. Verifica che l'output corrisponda all'elenco di nodi in GKE in un cluster Kubernetes. Il log di build visualizzato nella console include una tabella simile a questa:

    NAME                                     STATUS   ROLES    AGE   VERSION
    gke-private-default-pool-3ec34262-7lq9   Ready    <none>   9d    v1.19.9-gke.1900
    gke-private-default-pool-4c517758-zfqt   Ready    <none>   9d    v1.19.9-gke.1900
    gke-private-default-pool-d1a885ae-4s9c   Ready    <none>   9d    v1.19.9-gke.1900
    

Hai verificato che i worker del pool privato possono accedere cluster GKE. Questo accesso ti consente di utilizzare Cloud Build per il deployment su questo cluster GKE privato.

Risoluzione dei problemi

Se riscontri problemi con questo tutorial, consulta i seguenti documenti:

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina le singole risorse

  1. In Cloud Shell, elimina il cluster GKE:

    gcloud container clusters delete PRIVATE_CLUSTER_NAME \
        --region=REGION \
        --async
    

    Quando esegui questo comando, il peering di rete VPC eliminati automaticamente.

  2. Elimina il pool privato di Cloud Build:

    gcloud builds worker-pools delete PRIVATE_POOL_NAME \
        --region=REGION
    
  3. Elimina la connessione privata tra il producer di servizi Rete VPC e PRIVATE_POOL_PEERING_VPC_NAME:

    gcloud services vpc-peerings delete \
       --network=PRIVATE_POOL_PEERING_VPC_NAME \
       --async
    
  4. Elimina l'intervallo di indirizzi IP denominato utilizzato per il pool privato:

    gcloud compute addresses delete RESERVED_RANGE_NAME \
        --global
    
  5. Elimina i quattro tunnel VPN. Utilizza gli stessi nomi che hai specificato in Crea tunnel VPN.

    gcloud compute vpn-tunnels delete \
        TUNNEL_NAME_GW1_IF0 \
        TUNNEL_NAME_GW1_IF1 \
        TUNNEL_NAME_GW2_IF0 \
        TUNNEL_NAME_GW2_IF1 \
        --region=REGION
    
  6. Elimina i due router Cloud. Utilizza gli stessi nomi che hai specificato in Creare router Cloud.

    gcloud compute routers delete \
        ROUTER_NAME_1 \
        ROUTER_NAME_2 \
        --region=REGION
    
  7. Elimina i due gateway VPN. Utilizza gli stessi nomi che hai specificato Crea i gateway VPN ad alta disponibilità.

    gcloud compute vpn-gateways delete \
        GW_NAME_1 \
        GW_NAME_2 \
        --region=REGION
    
  8. Elimina GKE_SUBNET_NAME, ovvero la subnet che ospita i nodi del cluster GKE:

    gcloud compute networks subnets delete GKE_SUBNET_NAME \
        --region=REGION
    
  9. Elimina le due reti VPC PRIVATE_POOL_PEERING_VPC_NAME e GKE_PEERING_VPC_NAME:

    gcloud compute networks delete \
        PRIVATE_POOL_PEERING_VPC_NAME \
        GKE_PEERING_VPC_NAME
    

Passaggi successivi