In questa pagina viene spiegato come creare un'etichetta bilanciatore del carico di rete passthrough interno attivo Google Kubernetes Engine (GKE) nelle reti VPC. Prima di leggere questa pagina, dovresti essere familiarità con i seguenti concetti:
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Attiva l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine .
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
initialize
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
Crea un bilanciatore del carico interno con Private Service Connect
In qualità di producer di servizi, puoi utilizzare i collegamenti ai servizi per
disponibili per i consumer di servizi in altre reti VPC
Private Service Connect. Puoi
crea, gestisci ed elimina i collegamenti ai servizi utilizzando un ServiceAttachment
risorsa personalizzata.
Requisiti e limitazioni
- Limitazioni per Private Service Connect .
- Puoi creare un collegamento a un servizio nelle versioni GKE 1.21.4-gke.300 e versioni successive.
- Non puoi utilizzare la stessa subnet in più configurazioni di collegamenti ai servizi.
- Devi creare un servizio GKE che utilizzi un bilanciatore del carico di rete passthrough interno.
- Non puoi specificare una subnet in un progetto diverso (VPC condiviso) per Versioni di GKE precedenti alla 1.22.4-gke.100. Per il VPC condiviso, assicurati che tutti requisiti per il VPC condiviso sono soddisfatti.
Crea un ServiceAttachment
Creare una subnet.
Devi creare un'istanza nuova subnet per ogni
ServiceAttachment
.gcloud beta compute networks subnets create SUBNET_NAME \ --project PROJECT_ID \ --network NETWORK_NAME \ --region REGION \ --range SUBNET_RANGE \ --purpose PRIVATE_SERVICE_CONNECT
Sostituisci quanto segue:
SUBNET_NAME
: il nome della nuova subnet. Nel GKE 1.22.4-gke.100 e versioni successive, puoi specificare una subnet in un progetto diverso utilizzando URL per questo campo. Puoi ottenere l'URL completo della risorsa utilizzando il comandogcloud compute networks subnets describe
.PROJECT_ID
: l'ID del tuo account Google Cloud progetto.NETWORK_NAME
: il nome del VPC per la subnet.REGION
: la regione per la nuova subnet. Devi utilizzare della stessa regione del servizio che hai creato.SUBNET_RANGE
: l'intervallo di indirizzi IP da utilizzare per una subnet.
Eseguire il deployment di un carico di lavoro.
Il manifest seguente descrive un deployment che esegue un web di esempio l'immagine container dell'applicazione. Salva il manifest come
my-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: psc-ilb spec: replicas: 3 selector: matchLabels: app: psc-ilb template: metadata: labels: app: psc-ilb spec: containers: - name: whereami image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1.2.19 ports: - name: http containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 5 timeoutSeconds: 1
Applica il manifest al cluster:
kubectl apply -f my-deployment.yaml
Creare un servizio. Il manifest seguente descrive un servizio che crea un bilanciatore del carico di rete passthrough interno sulla porta TCP 8080. Salva il manifest come
my-service.yaml
:apiVersion: v1 kind: Service metadata: name: SERVICE_NAME annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer selector: app: psc-ilb ports: - port: 80 targetPort: 8080 protocol: TCP
Sostituisci quanto segue:
SERVICE_NAME
: il nome del nuovo servizio.
Applica il manifest al cluster:
kubectl apply -f my-service.yaml
Crea
ServiceAttachment
.Il seguente manifest descrive un
ServiceAttachment
che espone le che hai creato per i consumer di servizi. Salva il manifest comemy-psc.yaml
:apiVersion: networking.gke.io/v1 kind: ServiceAttachment metadata: name: SERVICE_ATTACHMENT_NAME namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - SUBNET_NAME proxyProtocol: false resourceRef: kind: Service name: SERVICE_NAME
Sostituisci quanto segue:
SERVICE_ATTACHMENT_NAME
: il nome del nuovo servizio allegato.SUBNET_NAME
: il nome della nuova subnet. Nel GKE 1.22.4-gke.100 e versioni successive, puoi specificare una subnet in un progetto diverso utilizzando URL per questo campo. Puoi ottenere l'URL completo della risorsa utilizzando il comandogcloud compute networks subnets describe
. Per una configurazione del VPC condiviso, utilizza il formato seguente:projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME
.
Per saperne di più sui campi manifest, consulta la pagina relativa ai campi dei collegamenti ai servizi.
Applica il manifest al cluster:
kubectl apply -f my-psc.yaml
Verifica che il controller Private Service Connect abbia creato collegamento del servizio:
gcloud beta compute service-attachments list
L'output mostra un collegamento a un servizio con un nome generato automaticamente:
NAME REGION PRODUCER_FORWARDING_RULE CONNECTION_PREFERENCE k8s1-sa-... REGION_NAME a3fea439c870148bdba5e59c9ea9451a ACCEPT_AUTOMATIC
Visualizza un ServiceAttachment
Puoi visualizzare i dettagli di un ServiceAttachment
utilizzando il seguente comando:
kubectl describe serviceattachment SERVICE_ATTACHMENT_NAME
L'output è simile al seguente:
kubectl describe serviceattachment foo-sa
Name: <sa-name>
Namespace: default
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: ServiceAttachment
Metadata:
...
Status:
Forwarding Rule URL: https://www.googleapis.com/compute/beta/projects/<project>/regions/<region>/forwardingRules/<fr-name>
Last Modified Timestamp: 2021-07-08T01:32:39Z
Service Attachment URL: https://www.googleapis.com/compute/beta/projects/<projects>/regions/<region>/serviceAttachments/<gce-service-attachment-name>
Events: <none>
Consuma ServiceAttachment
Per utilizzare il servizio da un altro progetto, segui questi passaggi:
Ottieni l'URL di
ServiceAttachment
:kubectl get serviceattachment SERVICE_ATTACHMENT_NAME -o=jsonpath="{.status.serviceAttachmentURL}"
L'output è simile al seguente:
serviceAttachmentURL: https://www.googleapis.com/compute/alpha/projects/<project>/region/<region>/serviceAttachments/k8s1-...my-sa
Crea un endpoint Private Service Connect utilizzando l'URL di
ServiceAttachment
.Verifica di poterti connettere al servizio di cui hai eseguito il deployment nel producer utilizzando un comando
curl
da una VM nel progetto consumer:curl PSC_IP_ADDRESS
Sostituisci
PSC_IP_ADDRESS
con l'indirizzo IP del di una regola di forwarding nel progetto consumer.L'output è simile al seguente:
{ "cluster_name":"cluster", "host_header":"10.128.15.200", "node_name":"gke-psc-default-pool-be9b6e0e-dvxg.c.gke_project.internal", "pod_name":"foo-7bf648dcfd-l5jf8", "pod_name_emoji":"👚", "project_id":"gke_project", "timestamp":"2021-06-29T21:32:03", "zone":"ZONE_NAME" }
Aggiorna un ServiceAttachment
Per aggiornare un ServiceAttachment
:
Modifica il manifest
ServiceAttachment
inmy-psc.yaml
:apiVersion: networking.gke.io/v1 kind: ServiceAttachment metadata: name: my-sa namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - my-nat-subnet proxyProtocol: false resourceRef: kind: Service name: ilb-service
Applica il manifest al cluster:
kubectl apply -f my-psc.yaml
Elimina un ServiceAttachment
Non puoi eliminare un bilanciatore del carico di rete passthrough interno connesso a un servizio allegato. Devi eliminare il collegamento al servizio e GKE servizio separatamente.
Elimina il collegamento al servizio:
kubectl delete serviceattachment SERVICE_ATTACHMENT_NAME --wait=false
Questo comando contrassegna il collegamento al servizio per l'eliminazione, ma la risorsa continua a esistere. Puoi anche attendere il completamento dell'eliminazione omettendo il flag
--wait
.Elimina il servizio:
kubectl delete svc SERVICE_NAME
Elimina la subnet:
gcloud compute networks subnets delete SUBNET_NAME
ServiceAttachment
campi
ServiceAttachment
contiene i seguenti campi:
connectionPreference
: la preferenza di connessione che determina il modo in cui i clienti si connettono al servizio. Puoi usare le opzioni di progetto l'approvazione utilizzandoACCEPT_AUTOMATIC
o l'approvazione esplicita del progetto tramiteACCEPT_MANUAL
. Per ulteriori informazioni, vedi Pubblicazione di servizi tramite Private Service Connect.natSubnets
: un elenco di nomi di risorse della subnet da utilizzare per il servizio allegato.proxyProtocol
: se impostato su true, l'IP origine consumatore e L'ID connessione Private Service Connect è disponibile nelle richieste. Questo campo è facoltativo e il valore predefinito è false se non viene specificato.consumerAllowList
: l'elenco di progetti consumer a cui è consentito si collega alServiceAttachment
. Questo campo può essere utilizzato solo seconnectionPreference
èACCEPT_MANUAL
. Per ulteriori informazioni al riguardo, consulta Pubblicazione di servizi tramite Private Service Connect.project
: l'ID o il numero del progetto consumer.connectionLimit
: il limite di connessioni per il progetto consumer. Questo è facoltativo.forceSendFields
: nomi dei campi da inviare da includere nelle richieste API. Questo campo è facoltativo.nullFields
: i nomi dei campi da includere nelle richieste API con un valore null valore. Questo campo è facoltativo.
consumerRejectList
: l'elenco di ID o numeri dei progetti consumer che sono non possono connettersi alServiceAttachment
. Questo campo può essere utilizzato solo utilizzato quandoconnectionPreference
èACCEPT_MANUAL
. Per ulteriori informazioni informazioni su questo campo, vedi Pubblicazione di servizi tramite Private Service Connect.resourceRef
: un riferimento alla risorsa Kubernetes.kind
: il tipo di risorsa Kubernetes. Devi usareService
.name
: il nome della risorsa Kubernetes che deve trovarsi nello stesso come bilanciatore del carico di rete passthrough interno.
Risoluzione dei problemi
Puoi visualizzare i messaggi di errore utilizzando il seguente comando:
kubectl get events -n NAMESPACE
Sostituisci NAMESPACE
con lo spazio dei nomi del
il bilanciatore del carico di rete passthrough interno.
Se provi a eliminare un'istanza, viene visualizzato un messaggio di errore simile al seguente
bilanciatore del carico di rete passthrough interno utilizzato da un collegamento a un servizio. Devi eliminare
ServiceAttachment
prima di poter eliminare il bilanciatore del carico di rete passthrough interno.
Error syncing load balancer: failed to ensure load balancer: googleapi:
Error 400: The forwarding_rule resource '<fwd-rule-URL>' is already being used
by '<svc-attachment-URL>', resourceInUseByAnotherResource.
Passaggi successivi
- Leggi la panoramica della rete GKE.
- Scopri di più sui bilanciatori del carico di Compute Engine.
- Scopri come creare un cluster nativo di VPC.
- Scopri di più sulla configurazione delle reti autorizzate.