El controlador de Ingress de GKE Enterprise gestiona los recursos de Compute Engine. Los recursos MultiClusterIngress
y MultiClusterService
se asignan a diferentes recursos de Compute Engine, por lo que entender la relación entre estos recursos te ayudará a solucionar problemas. Por ejemplo, consulta el siguiente recurso 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
Asignaciones de recursos de Compute Engine a recursos de Multi Cluster Ingress
En la tabla siguiente se muestra la asignación de recursos de la flota a los recursos creados en los clústeres de Kubernetes y Google Cloud:
Recurso de Kubernetes | Google Cloud recurso | Descripción |
---|---|---|
MultiClusterIngress | Regla de reenvío | VIP del balanceador de carga HTTP(S). |
Proxy de destino | Ajustes de terminación de HTTP/S tomados de las anotaciones y del bloque TLS. | |
Mapa de URLs | Mapeo de rutas de host virtual de la sección de reglas. | |
Servicio de varios clústeres | Servicio de Kubernetes | Recurso derivado de una plantilla. |
Servicio de backend | Se crea un servicio de backend para cada par (Service, ServicePort). | |
Grupos de puntos finales de red | Conjunto de pods de backend que participan en el servicio. |
Inspeccionar recursos de balanceadores de carga de Compute Engine
Después de crear un balanceador de carga, el estado de Multi Cluster Ingress contendrá los nombres de todos los recursos de Compute Engine que se hayan creado para construir el balanceador de carga. Por ejemplo:
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 no creado
Si no ves ningún VIP, es posible que se haya producido un error durante su creación. Para comprobar si se ha producido un error, ejecuta el siguiente comando:
kubectl describe mci shopping-service
La salida puede ser similar a la siguiente:
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
En este ejemplo, el error se debe a que el usuario no ha creado un recurso MultiClusterService
al que hace referencia un MultiClusterIngress
.
Respuesta 502
Si tu balanceador de carga ha adquirido una dirección IP virtual, pero siempre devuelve una respuesta 502, es posible que las comprobaciones del estado del balanceador de carga estén fallando. Las comprobaciones del estado pueden fallar por dos motivos:
- Los pods de la aplicación no están en buen estado (consulta la sección de depuración de la consola de Cloud, por ejemplo).
- Un cortafuegos mal configurado impide que los comprobadores de estado de Google realicen comprobaciones del estado.
En el caso del punto 1, asegúrate de que tu aplicación esté sirviendo una respuesta 200 en la ruta "/".
En el caso del paso 2, asegúrate de que haya un cortafuegos llamado "mci-default-l7" en tu VPC. El controlador de entrada crea el cortafuegos en tu VPC para asegurarse de que los comprobadores de estado de Google puedan acceder a tus back-ends. Si el cortafuegos no existe, asegúrate de que no haya ninguna automatización externa que lo elimine al crearse.
Tráfico no añadido ni eliminado del clúster
Cuando se añade una nueva pertenencia, el tráfico debe llegar a los back-ends del clúster subyacente, si procede. Del mismo modo, si se elimina un Membership, no debería llegar tráfico a los back-ends del clúster subyacente. Si no observas este comportamiento, comprueba si hay errores en los recursos MultiClusterIngress
y MultiClusterService
.
Este error se produce en casos habituales, como cuando se añade un nuevo Membership a un clúster de GKE que no está en modo nativo de VPC o cuando se añade un nuevo Membership, pero no se implementa una aplicación en el clúster de GKE.
Describe el
MultiClusterService
:kubectl describe mcs zone-svc
Describe el
MultiClusterIngress
:kubectl describe mci zone-mci
Configurar la migración de clústeres
Para obtener más información sobre los casos prácticos de la migración, consulta el artículo Concepto de diseño de clúster de configuración.
La migración de clústeres de configuración puede ser una operación disruptiva si no se gestiona correctamente. Sigue estas directrices al realizar una migración de clúster de configuración:
- Asegúrate de usar la
anotación static-ip
en tus recursos
MultiClusterIngress
. Si no lo haces, el tráfico se interrumpirá durante la migración. Las IPs efímeras se volverán a crear al migrar clústeres de configuración. - Los recursos
MultiClusterIngress
yMultiClusterService
deben desplegarse de forma idéntica en el clúster de configuración antiguo y en el nuevo. Las diferencias entre ellos darán lugar a la conciliación de los recursosMultiClusterService
yMultiClusterIngress
que sean diferentes en el nuevo clúster de configuración. - Solo puede haber un clúster de configuración activo a la vez. Hasta que se cambie el clúster de configuración, los recursos
MultiClusterIngress
yMultiClusterService
del nuevo clúster de configuración no afectarán a los recursos del balanceador de carga.
Para migrar el clúster de configuración, ejecuta el siguiente comando:
gcloud container fleet ingress update \
--config-membership=projects/project_id/locations/global/memberships/new_config_cluster
Para comprobar que el comando ha funcionado, asegúrate de que no haya errores visibles en el estado de la función:
gcloud container fleet ingress describe
Depuración de la consola
En la mayoría de los casos, comprobar el estado exacto del balanceador de carga es útil para depurar un problema. Para encontrar el balanceador de carga, ve a Balanceo de carga en la Google Cloud consola.
Códigos de error o advertencia
Multi Cluster Ingress emite códigos de error y de advertencia en los recursos MultiClusterIngress
y MultiClusterService
, así como en el campo multiclusteringress
Description de gcloud para los problemas conocidos. Estos mensajes tienen códigos de error y de advertencia documentados para que sea más fácil entender qué significa cuando algo no funciona como debería. Cada código consta de un ID de error con el formato
AVMBR123
, donde 123
es un número único que corresponde a un error o una advertencia, y sugerencias sobre cómo solucionarlo.
AVMBR101: Annotation [NAME] not recognized
Este error se muestra cuando se especifica una anotación en un manifiesto MultiClusterIngress
o MultiClusterService
que no se reconoce. Hay un par de motivos por los que es posible que no se reconozca la anotación:
La anotación no se admite en Multi Cluster Ingress. Esto puede ocurrir si se anotan recursos que no se espera que utilice el controlador de Ingress de GKE Enterprise.
La anotación se admite, pero tiene un error ortográfico y, por lo tanto, no se reconoce.
En ambos casos, consulta la documentación para saber qué anotaciones se admiten y cómo se especifican.
AVMBR102: [RESOURCE_NAME] not found
Este error se muestra cuando se especifica un recurso complementario en un elemento MultiClusterIngress
, pero no se encuentra en la pertenencia a la configuración. Por ejemplo, este error se produce cuando un MultiClusterIngress
hace referencia a un MultiClusterService
que no se encuentra o cuando un MultiClusterService
hace referencia a un BackendConfig que no se encuentra. Hay varios motivos por los que no se ha podido encontrar un recurso:
- No está en el espacio de nombres adecuado. Asegúrate de que todos los recursos que se referencian entre sí estén en el mismo espacio de nombres.
- El nombre del recurso está mal escrito.
- El recurso no existe con el espacio de nombres y el nombre adecuados. En este caso, créala.
AVMBR103: [CLUSTER_SELECTOR] is invalid
Este error se muestra cuando un selector de clúster especificado en un MultiClusterService
no es válido. Este selector puede no ser válido por varios motivos:
- La cadena proporcionada contiene un error tipográfico.
- La cadena proporcionada hace referencia a una pertenencia a un clúster que ya no existe en la flota.
AVMBR104: Cannot find NEGs for Service Port [SERVICE_PORT]
Este error se produce cuando no se encuentran los grupos de puntos finales de red (NEGs) de un par de MultiClusterService
y puerto de servicio determinado. Los NEGs son los recursos que contienen los endpoints de los pods de cada uno de tus clústeres de backend. El motivo principal por el que es posible que no existan los NEGs es que se haya producido un error al crear o actualizar los servicios derivados en los clústeres de backend. Consulta los eventos de tu recurso MultiClusterService
para obtener más información.
AVMBR105: Missing GKE Enterprise license.
Este error se muestra en Estado de la función e indica que la API de GKE Enterprise (anthos.googleapis.com) no está habilitada.
AVMBR106: Derived service is invalid: [REASON].
Este error se muestra en los eventos del recurso MultiClusterService
. Una de las razones más habituales de este error es que el recurso Service derivado de MultiClusterService
tiene una especificación no válida.
Por ejemplo, este MultiClusterService
no tiene ningún ServicePort
definido
en su especificación.
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.
Este error se muestra en Estado de la función y se produce porque no hay ningún clúster de GKE subyacente al recurso Membership. Para comprobarlo, ejecuta el siguiente comando:
gcloud container fleet memberships describe membership-name
y asegúrate de que no haya ningún enlace de recurso de clúster de GKE en el campo del endpoint.
AVMBR108: GKE cluster [NAME] not found.
Este error se muestra en Estado de la función y se produce si no existe el clúster de GKE subyacente de la pertenencia.
AVMBR109: [NAME] is not a VPC-native GKE cluster.
Este error se muestra en Estado de la función. Este error se produce si el clúster de GKE especificado es un clúster basado en rutas. El controlador de entrada multi-clúster crea un balanceador de carga nativo de contenedores mediante NEGs. Los clústeres deben ser nativos de VPC para usar un balanceador de carga nativo de contenedores.
Para obtener más información, consulta el artículo Crear un clúster nativo de VPC.
AVMBR110: [IAM_PERMISSION] permission missing for GKE cluster [NAME].
Este error se muestra en Estado de la función. Este error puede deberse a varios motivos:
- El clúster de GKE subyacente de la suscripción se encuentra en un proyecto diferente al de la propia suscripción.
- Se ha quitado el permiso de gestión de identidades y accesos especificado del agente de servicio
MultiClusterIngress
.
AVMBR111: Failed to get Config Membership: [REASON].
Este error se muestra en Estado de la función. El motivo principal por el que se produce este error es que se ha eliminado la pertenencia a la configuración mientras la función estaba habilitada.
Nunca deberías tener que eliminar la pertenencia a la configuración. Si quieres cambiarlo, sigue los pasos para migrar el clúster de configuración.
AVMBR112: HTTPLoadBalancing Addon is disabled in GKE Cluster [NAME].
Este error se muestra en Estado de la función y se produce cuando el complemento HTTPLoadBalancing
está inhabilitado en un clúster de GKE. Puedes actualizar tu clúster de GKE para habilitar el complemento HTTPLoadBalancing
:
gcloud container clusters update name --update-addons=HttpLoadBalancing=ENABLED
AVMBR113: This resource is orphaned.
En algunos casos, la utilidad de un recurso depende de que otro recurso haga referencia a él. Este error se produce cuando se crea un recurso de Kubernetes, pero no se hace referencia a él en otro recurso. Por ejemplo, verás este error si creas un recurso BackendConfig
al que no hace referencia un MultiClusterService
.