Problemas conocidos del modo privado de Anthos

En esta página, se enumeran los problemas conocidos de Anthos en modo privado, junto con las formas en que puedes evitarlos o solucionarlos.

La creación de clústeres de administrador permanece en waiting for node update jobs

La creación de un clúster de administrador suele tardar unos 30 minutos. Si el clúster se atasca en la fase de “esperando trabajos de actualización de nodos” durante mucho tiempo, puedes finalizar el proceso con Ctrl + C. Esta fase es el último paso de la instalación. Finalizar este proceso no afecta la instalación.

La creación de clústeres de usuarios está atascada

Por lo general, la creación de un clúster de usuario tarda entre 10 y 30 minutos. Si el clúster aparece bloqueado en curso, puedes usar los comandos a continuación para verificar el progreso de la creación del clúster.

kubectl get pods -n cluster-USER_CLUSTER --kubeconfig=ADMIN_KUBECONFIG
kubectl get Cluster -n cluster-USER_CLUSTER -o yaml --kubeconfig=ADMIN_KUBECONFIG

La actualización del clúster de administrador con múltiples nodos del plano de control está atascada

La actualización del clúster de administrador puede detenerse en la actualización de los nodos del plano de control. El comando de actualización permanece en Waiting for upgrade to complete... Upgrading <control plane node IP>.

El problema solo afecta al clúster de administrador si está configurado con todas las condiciones siguientes:

  • El registro privado configurado usa un certificado firmado por una autoridad certificadora privada.

  • El clúster de administrador está configurado con múltiples nodos del plano de control. Por ejemplo, si se configura para alta disponibilidad.

  • Los nodos del plano de control tienen docker instalado.

El problema se debe a una configuración incorrecta en la que se intenta obtener el archivo de autoridad certificadora del registro en una ubicación incorrecta. Para solucionar el problema, debes distribuir de forma manual el archivo de autoridad certificadora en cada nodo. Por ejemplo, ejecuta la siguiente secuencia de comandos desde la estación de trabajo de administrador:

#!/bin/bash

# Docker login to generate the $HOME/.docker/config.json file
docker login REGISTRY_HOST

# List the IP addresses for all the control plane nodes, separated by whitespace.
IPs=( NODE_IPS_SEPARATED_BY_SPACE )

for ip in "${IPs[@]}"; do
  # Copy the docker config over to the nodes.
  scp $HOME/.docker/config.json USER_NAME@${ip}:docker-config.json

  # Fix the image pull credentials issue
  ssh USER_NAME@${ip} "sudo mkdir -p /root/.docker && sudo cp docker-config.json /root/.docker/config.json"

  # Fix the cert issue, only needed for private registry with self-signed certs.
  ssh USER_NAME@${ip} "sudo mkdir -p /etc/docker/certs.d && sudo cp -r /etc/containerd/certs.d/REGISTRY_HOST /etc/docker/certs.d/"
done

Reemplaza USER_NAME y REGISTRY_HOST por los valores configurados en la configuración del clúster de administrador.

Error de autorización 400 para el acceso a la IP privada

Después de configurar la autenticación de Open ID Connect (OIDC), si todavía usas una dirección IP para acceder al centro de administración, se te redireccionará a la página de autenticación y verás un error relacionado con la autorización del acceso a la IP privada. Por ejemplo:

Mensaje de error: Comunícate con el administrador para obtener más información.

Usa el nombre de dominio configurado en lugar de la IP a fin de acceder a la plataforma, ejecuta actl platform management-center describe para recuperar la dirección completa. El dominio es obligatorio para la devolución de llamada de redireccionamiento. Tu dominio puede apuntar a la dirección privada.

Respuesta de error HTTP 500 cuando se crea un administrador de plataforma inicial

Cuando aplicas un perfil de OIDC a clústeres, es posible que recibas una respuesta de error HTTP 500 después de hacer clic en Enviar si el nombre de usuario o el prefijo de grupo de tu perfil contienen el carácter “/”.

Para resolver este problema, borra el perfil y crea uno nuevo sin el carácter “/” en el nombre de usuario y el prefijo de grupo. Luego, intenta aplicar el perfil nuevo a los clústeres.

RBAC: Acceso denegado

Si ves un mensaje RBAC: access denied después de acceder con una cuenta de administrador de la plataforma, es posible que haya un error en la configuración de OIDC. Consulta Restablecer la configuración de autenticación.

Usa imágenes del registro privado cuando se usa la configuración de duplicación de registros

Si el clúster se configura con la configuración de duplicación de registros, toma nota de la ruta de acceso de la imagen cuando uses una imagen directamente desde el registro privado.

Por ejemplo, si el clúster de administrador se crea con la configuración de duplicación:

registryMirrors:
- endpoint: https://10.200.0.2/v2/library

docker push 10.200.0.2/library/test-image:test-tag sube una imagen al registro privado. Cuando creas un Deployment o Pod, la imagen 10.200.0.2/library/test-image:test-tag no se puede usar tal como está. Esto se debe a que la configuración containerd del nodo (/etc/containerd/config.toml) se estableció para duplicar todas las extracciones de imágenes desde 10.200.0.2/library. Luego, containerd intenta extraer la imagen desde 10.200.0.2/library/library/test-image:test-tag. Para solucionar este problema, prueba uno de los siguientes pasos:

  • Envía la imagen al extremo docker push 10.200.0.2/library/library/test-image:test-tag.
  • Usa la ruta de acceso de la imagen 10.200.0.2/test-image:test-tag

No se puede actualizar el centro de administración de 0.8 a 0.9 cuando se configura OIDC.

La actualización del centro de administración de 0.8 a 0.9 cuando se configura OIDC falla con el siguiente mensaje de error:

level=fatal msg="Unable to initialize options: unable to resolve management center cluster: The given \"management center\" cluster \"admin-admin@admin\" does not appear to be a valid management center cluster.  Did you choose the right cluster?\nunable to list DomainIDPMapping objects: the server could not find the requested resource"

Para solucionar este problema, crea un archivo con la CRD de DomainIDPMapping.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.4.0
  creationTimestamp: null
  name: domainidpmappings.managementcenter.anthos.cloud.google.com
spec:
  group: managementcenter.anthos.cloud.google.com
  names:
    kind: DomainIDPMapping
    listKind: DomainIDPMappingList
    plural: domainidpmappings
    singular: domainidpmapping
  scope: Cluster
  versions:
  - name: v1alpha1
    schema:
      openAPIV3Schema:
        description: DomainIDPMapping is the Schema for the domainidpmappings API
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: DomainIDPMappingSpec is the struct that contains the mapping
              from the domain to the authentication method name specified in the AIS
              ClientConfig.
            properties:
              authMethodName:
                description: AuthMethodName is the name of the authentication method
                  configured in the AIS ClientConfig.
                type: string
              domainName:
                description: DomainName is the domain used to serve the Anthos web
                  endpoints. The domain should not include the protocol such as http
                  or https. Wild cards are not supported in the domain name.
                type: string
            required:
            - authMethodName
            - domainName
            type: object
        type: object
    served: true
    storage: true
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []

Aplica la CRD.

kubectl --kubeconfig=ADMIN_KUBECONFIG apply -f domainIDPMappingCRD.yaml

Borra el espacio de nombres de oauth2-proxy y EnvoyFilter.

kubectl --kubeconfig=ADMIN_KUBECONFIG delete envoyfilter istio-ingressgateway -n istio-system
kubectl --kubeconfig=ADMIN_KUBECONFIG delete namespace oauth2-proxy

Se produjo un error cuando se extraía la imagen de los pods con el prefijo anthos-log-forwarder.

Si --private-registry se habilita cuando se instala el clúster, la ruta de imagen que usó initContainer en la ruta de anthos-log-forwarder no se reemplazará por la ruta de acceso especificada en --private-registry. Esto solo ocurrirá en el clúster de administrador.

Por ejemplo, si observas el siguiente error en el clúster de administrador:

kubectl -n kube-system get pods --selector=app=anthos-log-forwarder
anthos-log-forwarder-2n96b                           0/1     Init:ErrImagePull       0          16s
anthos-log-forwarder-8fxm8                           0/1     Init:ErrImagePull       0          16s
anthos-log-forwarder-bh7rb                           0/1     Init:ImagePullBackOff   0          16s

Solo el clúster de administrador con --private-registry configurado se verá afectado por este problema, que se corregirá en la próxima actualización.

Fallas de conectividad del Pod y filtrado de la ruta de acceso inversa

El modo privado de Anthos configura el filtrado de ruta de acceso inversa en los nodos para inhabilitar la validación de origen (net.ipv4.conf.all.rp_filter=0). Si la configuración rp_filter se cambia a 1 o 2, los pods fallarán debido a que se agotaron los tiempos de espera de la comunicación fuera de los nodos.

El filtrado de ruta de acceso inversa se establece con los archivos rp_filter en la carpeta de configuración de IPv4 (net/ipv4/conf/all). También es posible que sysctl anule este valor, que almacena la configuración del filtrado de la ruta de acceso inversa en un archivo de configuración de seguridad de red, como /etc/sysctl.d/60-gce-network-security.conf.

Para restablecer la conectividad del Pod, vuelve a establecer net.ipv4.conf.all.rp_filter en 0 de forma manual o reinicia el Pod anetd para volver a configurar net.ipv4.conf.all.rp_filter en 0. A fin de reiniciar el Pod anetd, usa los siguientes comandos para ubicar y borrar el pod anetd, y se iniciará un nuevo Pod anetd en su lugar:

kubectl get pods -n kube-system
kubectl delete pods -n kube-system ANETD_XYZ

Reemplaza ANETD_XYZ con el nombre del pod anetd.

En la página de máquinas, no aparece ninguna máquina después de la actualización.

Reinicia el Pod anthos-cluster-operator.

kubectl --kubeconfig ADMIN_KUBECONFIG delete pods -l control-plane=anthos-cluster-operator -n kube-system

No se pueden editar los clústeres de usuario después de la actualización

Reinicia el Pod anthos-cluster-operator.

kubectl --kubeconfig ADMIN_KUBECONFIG delete pods -l control-plane=anthos-cluster-operator -n kube-system

¿Qué sigue?