Problemas conhecidos do modo particular do Anthos

Nesta página, você encontrará uma lista dos problemas conhecidos do modo privado do Anthos, além de maneiras de evitá-los e corrigi-los.

A criação do cluster de administrador permanece em waiting for node update jobs

A criação de um cluster de administrador geralmente leva cerca de 30 minutos. Se o cluster ficar parado na fase "aguardar jobs de atualização do nó" por muito tempo, será possível encerrar o processo com Ctrl + C. Essa fase é a última etapa da instalação. O encerramento desse processo não afeta a instalação.

A criação do cluster de usuário está paralisada

A criação de um cluster de usuário geralmente leva de 10 a 30 minutos. Se o cluster parecer travado, use os comandos abaixo para verificar o andamento da criação dele.

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

O upgrade do cluster de administrador com vários nós do plano de controle está travado

O upgrade do cluster de administrador pode ficar travado no upgrade dos nós do plano de controle. O comando de upgrade permanece em Waiting for upgrade to complete... Upgrading <control plane node IP>.

O problema afetará o cluster de administrador apenas se ele estiver configurado com todas as condições a seguir:

  • O registro particular configurado usa um certificado assinado por uma autoridade de certificação particular.

  • O cluster de administrador está configurado com vários nós do plano de controle. Por exemplo, se ele estiver configurado para alta disponibilidade.

  • Os nós do plano de controle têm docker instalado.

O problema é causado por uma configuração incorreta em que o sistema busca o arquivo da autoridade de certificação do registro em um local errado. Para contornar o problema, você precisa distribuir manualmente o arquivo da autoridade de certificação em cada nó. Por exemplo, execute o script a seguir a partir da estação de trabalho do 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

Substitua USER_NAME e REGISTRY_HOST pelos valores configurados na configuração do cluster de administrador.

400 Erro de autorização para acesso de IP privado

Depois de configurar a autenticação do Open ID Connect (OIDC), se você ainda estiver usando um endereço IP para acessar o Centro de gerenciamento, você será redirecionado para a página de autenticação e verá um erro relacionado à autorização para acesso particular de IP. Exemplo:

Mensagem do erro: entre em contato com o administrador para mais informações.

Usando o nome de domínio configurado em vez do IP para acessar a plataforma, execute actl platform management-center describe para recuperar o endereço inteiro. O domínio é obrigatório para callback de redirecionamento. Seu domínio pode apontar para o endereço privado.

Resposta de falha HTTP 500 ao criar o administrador da plataforma inicial

Ao aplicar um perfil OIDC aos clusters, é possível que você receba uma resposta de falha HTTP 500 depois de clicar em Enviar, se o nome de usuário ou o prefixo do grupo do seu perfil contiver o caractere "/".

Para resolver esse problema, exclua e crie um novo perfil sem o caractere "/" no nome de usuário e no prefixo do grupo e tente aplicar o novo perfil aos clusters.

RBAC: acesso negado

Se você vir uma mensagem RBAC: access denied após fazer login com uma conta de administrador da plataforma, talvez exista um erro nas configurações do OIDC. Veja Redefinir configuração de autenticação.

Como usar imagens do registro particular quando a configuração de espelhamento do registro é usada

Se o cluster estiver configurado usando a configuração de espelhamento de registro, anote o caminho da imagem ao usar uma imagem do registro particular diretamente.

Por exemplo, se o cluster de administrador for criado usando a configuração de espelhamento:

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

Uma imagem é enviada para o registro particular por docker push 10.200.0.2/library/test-image:test-tag. Ao criar uma implantação ou um pod, a imagem 10.200.0.2/library/test-image:test-tag não pode ser usada diretamente no estado em que se encontra. Isso ocorre porque a configuração containerd do nó (/etc/containerd/config.toml) está configurada para espelhar todos os pulls de imagem de 10.200.0.2/library. Em seguida, o containerd tenta extrair a imagem de 10.200.0.2/library/library/test-image:test-tag. Para contornar esse problema, siga uma das seguintes etapas:

  • Envie a imagem para o endpoint docker push 10.200.0.2/library/library/test-image:test-tag.
  • Use o caminho da imagem 10.200.0.2/test-image:test-tag

Não é possível fazer upgrade do centro de gerenciamento de 0.8 para 0.9 quando o OIDC está definido

O upgrade do centro de gerenciamento de 0.8 para 0.9 quando o OIDC está definido falha com a seguinte mensagem de erro:

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 contornar esse problema, crie um arquivo com o CRD 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: []

Aplique o CRD.

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

Exclua o namespace EnvoyFilter e oauth2-proxy.

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

Erro ao extrair a imagem dos pods com o prefixo anthos-log-forwarder

Se o --private-registry estiver ativado ao instalar o cluster, o caminho da imagem usado pelo initContainer no caminho anthos-log-forwarder não será substituído pelo caminho especificado em --private-registry. Isso só acontecerá no cluster de administrador.

Por exemplo, se você observar o seguinte erro no cluster 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

Apenas o cluster de administrador com --private-registry definido será afetado por esse problema e isso será corrigido na próxima versão.

Falhas de conectividade dos pods e filtragem de caminho reverso

O modo particular do Anthos configura a filtragem de caminho reverso em nós para desativar a validação de origem (net.ipv4.conf.all.rp_filter=0). Se a configuração rp_filter for alterada para 1 ou 2, os pods falharão devido aos tempos limite de comunicação fora do nó.

A filtragem de caminho reverso é definida com arquivos rp_filter na pasta de configuração IPv4 (net/ipv4/conf/all). Este valor também pode ser modificado por sysctl, que armazena as configurações de filtragem de caminho reverso em um arquivo de configuração de segurança de rede, como /etc/sysctl.d/60-gce-network-security.conf.

Para restaurar a conectividade do pod, defina net.ipv4.conf.all.rp_filter de volta para 0 manualmente ou reinicie o pod de anetd para definir net.ipv4.conf.all.rp_filter novamente para 0. Para reiniciar o pod anetd, use os seguintes comandos para localizar e excluir o pod anetd, e um novo pod anetd será iniciado no lugar:

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

Substitua ANETD_XYZ pelo nome do pod anetd.

A página máquinas não lista máquinas após o upgrade

Reinicie o pod anthos-cluster-operator.

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

Não é possível editar clusters de usuário após o upgrade

Reinicie o pod anthos-cluster-operator.

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

A seguir