Il controller Ingress di GKE Enterprise gestisce le risorse Compute Engine. Le risorse MultiClusterIngress
e MultiClusterService
vengono mappate a diverse risorse Compute Engine, pertanto comprendere la relazione tra queste risorse ti aiuta a risolvere i problemi. Ad esempio, esamina la seguente risorsa MultiClusterIngress
:
apiVersion: extensions/v1beta1
kind: MultiClusterIngress
metadata:
name: foo-ingress
spec:
template:
spec:
rules:
- host: store.foo.com
http:
paths:
- backend:
serviceName: store-foo
servicePort: 80
- host: search.foo.com
http:
paths:
- backend:
serviceName: search-foo
servicePort: 80
Mappature delle risorse di Compute Engine a Ingress multi-cluster
La tabella seguente mostra la mappatura delle risorse del parco risorse alle risorse create nei cluster Kubernetes e Google Cloud:
Risorsa Kubernetes | Google Cloud risorsa | Descrizione |
---|---|---|
MultiClusterIngress | Regola di forwarding | VIP del bilanciatore del carico HTTP(S). |
Proxy di destinazione | Impostazioni di terminazione HTTP/S tratte dalle annotazioni e dal blocco TLS. | |
Mappa URL | Mappatura del percorso dell'host virtuale dalla sezione delle regole. | |
MultiClusterService | Servizio Kubernetes | Risorsa derivata dal modello. |
Servizio di backend | Viene creato un servizio di backend per ogni coppia (Service, ServicePort). | |
Gruppi di endpoint di rete | Set di pod di backend che partecipano al servizio. |
Ispezione delle risorse del bilanciatore del carico Compute Engine
Dopo aver creato un bilanciatore del carico, lo stato di Ingress multi-cluster conterrà i nomi di tutte le risorse Compute Engine create per costruire il bilanciatore del carico. Ad esempio:
Name: shopping-service
Namespace: prod
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: MultiClusterIngress
Metadata:
Creation Timestamp: 2019-07-16T17:23:14Z
Finalizers:
mci.finalizer.networking.gke.io
Spec:
Template:
Spec:
Backend:
Service Name: shopping-service
Service Port: 80
Status:
VIP: 34.102.212.68
CloudResources:
Firewalls: "mci-l7"
ForwardingRules: "mci-abcdef-myforwardingrule"
TargetProxies: "mci-abcdef-mytargetproxy"
UrlMap: "mci-abcdef-myurlmap"
HealthChecks: "mci-abcdef-80-myhealthcheck"
BackendServices: "mci-abcdef-80-mybackendservice"
NetworkEndpointGroups: "k8s1-neg1", "k8s1-neg2", "k8s1-neg3"
VIP non creato
Se non vedi un VIP, è possibile che si sia verificato un errore durante la sua creazione. Per verificare se si è verificato un errore, esegui il seguente comando:
kubectl describe mci shopping-service
L'output potrebbe essere simile al seguente:
Name: shopping-service
Namespace: prod
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: MultiClusterIngress
Metadata:
Creation Timestamp: 2019-07-16T17:23:14Z
Finalizers:
mci.finalizer.networking.gke.io
Spec:
Template:
Spec:
Backend:
Service Name: shopping-service
Service Port: 80
Status:
VIP: 34.102.212.68
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning SYNC 29s multi-cluster-ingress-controller error translating MCI prod/shopping-service: exceeded 4 retries with final error: error translating MCI prod/shopping-service: multiclusterservice prod/shopping-service does not exist
In questo esempio, l'errore è stato che l'utente non ha creato una risorsa MultiClusterService
a cui è stato fatto riferimento da un MultiClusterIngress
.
Risposta 502
Se il bilanciatore del carico ha acquisito un VIP, ma restituisce costantemente una risposta 502, è possibile che i controlli di integrità del bilanciatore del carico non funzionino. I controlli di integrità potrebbero non riuscire per due motivi:
- I pod di applicazioni non sono in stato attivo (ad esempio, consulta il debug nella console Cloud).
- Un firewall configurato in modo errato impedisce ai controlli di integrità di Google di eseguire i controlli di integrità.
Nel caso 1, assicurati che la tua applicazione stia effettivamente inviando una risposta 200 sul percorso "/".
Nel caso 2, assicurati che nella VPC esista un firewall denominato "mci-default-l7". Il controller Ingress crea il firewall nella tua VPC per assicurarsi che i controllori di integrità di Google possano raggiungere i tuoi backend. Se il firewall non esiste, assicurati che non sia presente un'automazione esterna che lo elimini al momento della creazione.
Traffico non aggiunto o rimosso dal cluster
Quando aggiungi un nuovo abbonamento, il traffico deve raggiungere i backend nel
cluster sottostante, se applicabile. Analogamente, se un abbonamento viene rimosso, nessun
traffico dovrebbe raggiungere i backend nel cluster sottostante. Se non osservi questo comportamento, controlla se sono presenti errori nella risorsa MultiClusterIngress
e MultiClusterService
.
I casi comuni in cui si verifica questo errore includono l'aggiunta di un nuovo abbonamento su un cluster GKE non in modalità nativa VPC o l'aggiunta di un nuovo abbonamento, ma non il deployment di un'applicazione nel cluster GKE.
Descrivi
MultiClusterService
:kubectl describe mcs zone-svc
Descrivi
MultiClusterIngress
:kubectl describe mci zone-mci
Migrazione del cluster di configurazione
Per saperne di più sui casi d'uso per la migrazione, consulta il concetto di progettazione del cluster Config.
La migrazione del cluster di configurazione può essere un'operazione che causa interruzioni se non gestita correttamente. Segui queste linee guida quando esegui una migrazione del cluster di configurazione:
- Assicurati di utilizzare l'annotazione static-ip nelle risorse
MultiClusterIngress
. In caso contrario, il traffico verrà interrotto durante la migrazione. Gli IP effimeri verranno ricreati durante la migrazione dei cluster di configurazione. - Le risorse
MultiClusterIngress
eMultiClusterService
devono essere messe in produzione in modo identico nel cluster di configurazione esistente e nel nuovo. Le differenze tra i due cluster comporteranno la riconciliazione delle risorseMultiClusterService
eMultiClusterIngress
diverse nel nuovo cluster di configurazione. - In qualsiasi momento è attivo un solo cluster di configurazione. Finché il cluster di configurazione non viene modificato, le risorse
MultiClusterIngress
eMultiClusterService
nel nuovo cluster di configurazione non influiscono sulle risorse del bilanciatore del carico.
Per eseguire la migrazione del cluster di configurazione, esegui il seguente comando:
gcloud container fleet ingress update \
--config-membership=projects/project_id/locations/global/memberships/new_config_cluster
Verifica che il comando abbia funzionato assicurandoti che non siano presenti errori visibili nello stato della funzionalità:
gcloud container fleet ingress describe
Debug della console
Nella maggior parte dei casi, è utile controllare lo stato esatto del bilanciatore del carico per eseguire il debugging di un problema. Puoi trovare il bilanciatore del carico in Bilanciamento del carico nella console Google Cloud.
Codici di errore/avviso
Ingress multi-cluster emette codici di errore e avviso per le risorse MultiClusterIngress
e
MultiClusterService
, nonché nel campo Descrizione di gcloud multiclusteringress
per i problemi noti. Questi messaggi sono dotati di codici di errore e di avviso documentati per aiutarti a capire più facilmente cosa significa quando qualcosa non funziona come previsto. Ogni codice è costituito da un ID errore nel formato
AVMBR123
, dove 123
è un numero univoco che corrisponde a un errore o
un avviso e suggerimenti su come risolverlo.
AVMBR101: Annotation [NAME] not recognized
Questo errore viene visualizzato quando viene specificata un'annotazione in un manifest MultiClusterIngress
o MultiClusterService
non riconosciuto. Esistono diversi motivi per cui l'annotazione potrebbe non essere riconosciuta:
L'annotazione non è supportata in Ingress multi-cluster. Questo può essere previsto se annoti risorse che non dovrebbero essere utilizzate dal controller Ingress di GKE Enterprise.
L'annotazione è supportata, ma è scritta male e quindi non è riconosciuta.
In entrambi i casi, consulta la documentazione per conoscere le annotazioni supportate e come vengono specificate.
AVMBR102: [RESOURCE_NAME] not found
Questo errore viene visualizzato quando una risorsa supplementare è specificata in un
MultiClusterIngress
, ma non è presente in Config Membership. Ad esempio, questo errore viene generato quando un MultiClusterIngress
fa riferimento a un MultiClusterService
che non può essere trovato o un MultiClusterService
fa riferimento a un BackendConfig che non può essere trovato. Esistono diversi motivi per cui una risorsa non è stata trovata:
- Non si trova nello spazio dei nomi corretto. Assicurati che le risorse che fanno riferimento tra loro si trovino tutte nello stesso spazio dei nomi.
- Il nome della risorsa non è scritto correttamente.
- La risorsa non esiste con lo spazio dei nomi e il nome appropriati. In questo caso, crealo.
AVMBR103: [CLUSTER_SELECTOR] is invalid
Questo errore viene visualizzato quando un selettore di cluster specificato in un MultiClusterService
non è valido. Questo selettore potrebbe non essere valido per due motivi:
- La stringa fornita contiene un errore ortografico.
- La stringa fornita fa riferimento a un'appartenenza a un cluster che non esiste più nel parco risorse.
AVMBR104: Cannot find NEGs for Service Port [SERVICE_PORT]
Questo errore viene generato quando non è possibile trovare i gruppi di endpoint di rete (NEG) per una determinata coppia di MultiClusterService
e porta di servizio. I NEG sono le risorse che contengono gli endpoint dei pod in ciascuno dei tuoi cluster di backend. Il motivo principale per cui i NEG potrebbero non esistere è che si è verificato un errore durante la creazione o l'aggiornamento dei servizi derivati nei cluster di backend. Per ulteriori informazioni, consulta la sezione Eventi nella risorsa MultiClusterService
.
AVMBR105: Missing GKE Enterprise license.
Questo errore viene visualizzato in Stato funzionalità e indica che l'API GKE Enterprise (anthos.googleapis.com) non è abilitata.
AVMBR106: Derived service is invalid: [REASON].
Questo errore viene visualizzato sotto gli eventi della risorsa MultiClusterService
. Uno
motivo comune per questo errore è che la risorsa Service derivata da
MultiClusterService
ha una specifica non valida.
Ad esempio, questo MultiClusterService
non ha ServicePort
definito
nella specifica.
apiVersion: networking.gke.io/v1
kind: MultiClusterService
metadata:
name: zone-mcs
namespace: whereami
spec:
clusters:
- link: "us-central1-a/gke-us"
- link: "europe-west1-c/gke-eu"
AVMBR107: Missing GKE cluster resource link in Membership.
Questo errore viene visualizzato in Stato della funzionalità e si verifica perché non esiste un cluster GKE alla base della risorsa Abbonamento. Puoi verificarlo eseguendo il seguente comando:
gcloud container fleet memberships describe membership-name
e assicurati che non sia presente un link alla risorsa del cluster GKE nel campo endpoint.
AVMBR108: GKE cluster [NAME] not found.
Questo errore viene visualizzato in Stato funzionalità e viene generato se il cluster GKE sottostante per l'abbonamento non esiste.
AVMBR109: [NAME] is not a VPC-native GKE cluster.
Questo errore viene visualizzato in Stato elemento. Questo errore viene generato se il cluster GKE specificato è un cluster basato su route. Il controller Ingress multi-cluster crea un bilanciatore del carico nativo del container utilizzando i NEG. I cluster devono essere nativamente VPC per utilizzare un bilanciatore del carico nativo del container.
Per ulteriori informazioni, consulta la sezione Creare un cluster nativo di VPC.
AVMBR110: [IAM_PERMISSION] permission missing for GKE cluster [NAME].
Questo errore viene visualizzato in Stato elemento. Questo errore può verificarsi per diversi motivi:
- Il cluster GKE sottostante per l'abbonamento si trova in un progetto diverso dall'abbonamento stesso.
- L'autorizzazione IAM specificata è stata rimossa dall'agente di servizio
MultiClusterIngress
.
AVMBR111: Failed to get Config Membership: [REASON].
Questo errore viene visualizzato in Stato elemento. Il motivo principale per cui si verifica questo errore è perché l'appartenenza alla configurazione è stata eliminata mentre la funzionalità è attivata.
Non dovresti mai dover eliminare l'appartenenza alla configurazione. Se vuoi modificarlo, segui i passaggi per la migrazione del cluster di configurazione.
AVMBR112: HTTPLoadBalancing Addon is disabled in GKE Cluster [NAME].
Questo errore viene visualizzato in Stato funzionalità e si verifica quando il plug-in HTTPLoadBalancing
è disattivato in un cluster GKE. Puoi aggiornare il
cluster GKE per attivare il componente aggiuntivo HTTPLoadBalancing
:
gcloud container clusters update name --update-addons=HttpLoadBalancing=ENABLED
AVMBR113: This resource is orphaned.
In alcuni casi, l'utilità di una risorsa dipende dal fatto che sia richiamata da un'altra risorsa. Questo errore viene generato quando viene creata una risorsa Kubernetes, ma non viene fatta riferimento da un'altra risorsa. Ad esempio, questo errore viene visualizzato se crei una risorsa BackendConfig
a cui non viene fatto riferimento da un MultiClusterService
.