O controlador de entrada do GKE Enterprise gerencia os recursos do
Compute Engine. Os recursos MultiClusterIngress
e MultiClusterService
são mapeados para
diferentes recursos do Compute Engine. Portanto, entender a relação
entre esses recursos ajuda a resolver problemas. Por exemplo, examine o
recurso MultiClusterIngress
a seguir:
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
Mapeamentos de recursos do Compute Engine para entrada de vários clusters
Na tabela a seguir, mostramos o mapeamento de recursos de frota para recursos criados nos clusters do Kubernetes e no Google Cloud:
Recurso do Kubernetes | Recurso do Google Cloud | Descrição |
---|---|---|
MultiClusterIngress | Regra de encaminhamento | VIP do balanceador de carga HTTP(S). |
Proxy de destino | Configurações de terminações HTTP/S conseguidas pelas anotações e do bloco TLS. | |
Mapa de URL | Mapeamento de caminho do host virtual na seção de regras. | |
MultiClusterService | Serviço do Kubernetes | Recurso derivado do modelo. |
Serviço de back-end | Um serviço de back-end é criado para cada par (Service, ServicePort). | |
Grupos de endpoint de rede | Conjunto de pods de back-end que participam do serviço. |
Como inspecionar recursos do balanceador de carga do Compute Engine
Depois de criar um balanceador de carga, o status da Entrada conterá os nomes de cada recurso do Compute Engine criado para construir o balanceador de carga. Por exemplo:
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 não criado
Se você não vir um VIP, talvez tenha ocorrido um erro durante a criação. Para ver se ocorreu um erro, execute o comando a seguir:
kubectl describe mci shopping-service
A saída pode ser semelhante a:
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
Neste exemplo, o erro foi que o usuário não criou um recurso MultiClusterService
que foi referenciado por um MultiClusterIngress
.
Resposta 502
Se o balanceador de carga tiver recebido um VIP, mas exibir consistentemente uma resposta 502, as verificações de integridade do balanceador de carga poderão falhar. As verificações de integridade podem falhar por dois motivos:
- Os pods de aplicativos não são íntegros. Consulte a depuração do Console do Cloud, por exemplo.
- Um firewall configurado incorretamente está impedindo que os verificadores de integridade do Google realizem verificações de integridade.
No primeiro caso, certifique-se de que seu aplicativo esteja realmente exibindo uma resposta 200 no caminho "/".
No segundo caso, verifique se existe um firewall chamado “mci-default-l7” na sua VPC. O controlador de entrada cria o firewall na sua VPC para garantir que os verificadores de integridade do Google alcancem seus back-ends. Se o firewall não existir, certifique-se de que não haja automação externa que exclua esse firewall após sua criação.
Tráfego não adicionado ou removido do cluster
Ao adicionar uma nova associação, o tráfego precisa alcançar os back-ends no cluster original quando aplicável. Da mesma forma, se uma associação for removida, nenhum tráfego deverá alcançar os back-ends no cluster original. Se você não estiver observando esse comportamento, verifique se há erros nos recursos MultiClusterIngress
e MultiClusterService
.
Casos comuns em que esse erro ocorreria incluem adicionar uma nova assinatura a um cluster do GKE que não está no modo nativo de VPC ou adicionar uma nova assinatura, mas não implantar um aplicativo no cluster do GKE.
Descreva o
MultiClusterService
:kubectl describe mcs zone-svc
Descreva o
MultiClusterIngress
:kubectl describe mci zone-mci
Migração do cluster de configuração
Para entender mais sobre os casos de uso da migração, consulte o conceito de design do cluster de configuração.
A migração do cluster de configuração pode ser uma operação de interrupção se não for processada corretamente. Siga estas diretrizes ao realizar uma migração de cluster de configuração:
- Use a
anotação static-ip
nos recursos
MultiClusterIngress
. Se isso não for feito, o tráfego será interrompido durante a migração. Os IPs temporários serão recriados ao migrar clusters de configuração. - Os recursos
MultiClusterIngress
eMultiClusterService
precisam ser implantados de maneira idêntica nos clusters de configuração novo e atual. As diferenças entre eles resultarão na reconciliação de recursosMultiClusterService
eMultiClusterIngress
que são diferentes no novo cluster de configuração. - Apenas um cluster de configuração fica ativo por vez. Até que o cluster de configuração
seja alterado, os recursos
MultiClusterIngress
eMultiClusterService
no novo cluster de configuração não afetarão os recursos do balanceador de carga.
Para migrar o cluster de configuração, execute o comando a seguir:
gcloud container fleet ingress update \
--config-membership=projects/project_id/locations/global/memberships/new_config_cluster
Verifique se o comando funcionou, garantindo que não haja erros visíveis no estado do recurso:
gcloud container fleet ingress describe
Depuração do console
Na maioria dos casos, é útil verificar o estado exato do balanceador de carga ao depurar um problema. Para encontrar o balanceador de carga, acesse Balanceamento de carga no Console do Google Cloud.
Códigos de erro/aviso
A entrada de vários clusters emite códigos de erro e aviso em recursos MultiClusterIngress
e MultiClusterService
, além
do campo de descrição
multiclusteringress
da gcloud para problemas conhecidos. Essas mensagens têm códigos de erro e
alerta documentados para facilitar a compreensão do que significa quando algo não
está funcionando como esperado. Cada código consiste em um código de erro no formato
AVMBR123
, em que 123
é um número exclusivo que corresponde a um erro ou
alerta e sugestões sobre como resolvê-lo.
AVMBR101: Annotation [NAME] not recognized
Esse erro é exibido quando uma anotação é especificada em um manifesto MultiClusterIngress
ou MultiClusterService
que não é reconhecido. Há alguns
motivos para a anotação não ser reconhecida:
A anotação não é compatível com a entrada de vários clusters. Isso pode ser esperado se você anota recursos que não se espera que sejam usados pelo controlador de entrada do GKE Enterprise.
A anotação é compatível, mas está incorreta e, portanto, não é reconhecida.
Nos dois casos, consulte a documentação para noções básicas das anotações compatíveis e como elas são especificadas.
AVMBR102: [RESOURCE_NAME] not found
Esse erro é exibido quando um recurso complementar é especificado em uma
MultiClusterIngress
, mas não pode ser encontrado na associação de configuração. Por exemplo,
esse erro é gerado quando um MultiClusterIngress
se refere a um MultiClusterService
que não pode ser encontrado ou um MultiClusterService
se refere a um BackendConfig que
não pode ser encontrado. Há alguns motivos pelos quais um recurso não foi encontrado:
- Ele não está no namespace adequado. Verifique se os recursos que fazem referência entre si, estão no mesmo namespace.
- O nome do recurso está incorreto.
- O recurso realmente não existe com o namespace + nome adequado. Nesse caso, crie-o.
AVMBR103: [CLUSTER_SELECTOR] is invalid
Esse erro é exibido quando um seletor de cluster especificado em um MultiClusterService
é inválido. Há alguns motivos para esse seletor ser inválido:
- A string fornecida contém um erro de digitação.
- A string fornecida refere-se a uma assinatura de cluster que não existe mais na frota.
AVMBR104: Cannot find NEGs for Service Port [SERVICE_PORT]
Esse erro é gerado quando os NetworkEndpointGroups (NEGs, na sigla em inglês) de um determinado
MultiClusterService
e par de porta de serviço não podem ser encontrados. Os NEGs são os
recursos que contêm os endpoints do pod em cada um dos clusters de back-end. O
principal motivo para os NEGs não existirem é porque ocorreu um erro ao criar
ou atualizar os serviços derivados nos clusters de back-end. Verifique os eventos no
recurso MultiClusterService
para ver mais informações.
AVMBR105: Missing GKE Enterprise license.
Este erro é exibido no estado de recurso e indica que a API do GKE Enterprise (anthos.googleapis.com) não está ativada.
AVMBR106: Derived service is invalid: [REASON].
Esse erro é exibido abaixo dos eventos do recurso MultiClusterService
. Um
motivo comum para esse erro é que o recurso de serviço derivado de
MultiClusterService
tem uma especificação inválida.
Por exemplo, este MultiClusterService
não tem nenhum ServicePort
definido
na respectiva especificação.
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 erro é exibido abaixo do estado do recurso e ocorre porque não há nenhum cluster do GKE subjacente ao recurso de assinatura. Para confirmar, execute o seguinte comando:
gcloud container fleet memberships describe membership-name
e garanta que não haja nenhum link de recurso do cluster do GKE no campo de endpoint.
AVMBR108: GKE cluster [NAME] not found.
Esse erro será exibido em Estado do recurso e será gerado se o cluster do GKE subjacente à assinatura não existir.
AVMBR109: [NAME] is not a VPC-native GKE cluster.
Esse erro é exibido em "Estado do recurso". Esse erro será gerado se o cluster do GKE especificado for baseado em rota. O controlador da entrada de vários clusters cria um balanceador de carga nativo de contêiner usando NEGs. Os clusters precisam ser nativos de VPC para usar um balanceador de carga nativo de contêiner.
Para mais informações, consulte Como criar um cluster nativo de VPC.
AVMBR110: [IAM_PERMISSION] permission missing for GKE cluster [NAME].
Esse erro é exibido em "Estado do recurso". Há alguns motivos para esse erro:
- O cluster do GKE subjacente para a assinatura está localizado em um projeto diferente da própria assinatura.
- A permissão de IAM especificada foi removida do agente de serviço
MultiClusterIngress
.
AVMBR111: Failed to get Config Membership: [REASON].
Esse erro é exibido em "Estado do recurso". O principal motivo desse erro é que a assinatura de configuração foi excluída enquanto o recurso estava ativado.
Não é necessário excluir a assinatura de configuração. Se quiser alterá-la, siga as etapas de migração do cluster de configuração.
AVMBR112: HTTPLoadBalancing Addon is disabled in GKE Cluster [NAME].
Esse erro é exibido em "Estado do recurso" e ocorre quando o complemento
HTTPLoadBalancing
está desativado em um cluster do GKE. Você pode atualizar o
cluster do GKE para ativar o complemento HTTPLoadBalancing
.
gcloud container clusters update name --update-addons=HttpLoadBalancing=ENABLED
AVMBR113: This resource is orphaned.
Em alguns casos, a utilidade de um recurso depende da referência dele por
outro recurso. Esse erro ocorre quando um recurso do Kubernetes é criado, mas
não é referenciado por outro recurso. Por exemplo, você verá esse erro se
criar um recurso BackendConfig
que não esteja sendo referenciado por um
MultiClusterService
.