Resolver problemas de gestão de tráfego na malha de serviço na nuvem
Esta secção explica os problemas comuns do Cloud Service Mesh e como os resolver. Se precisar de assistência adicional, consulte a secção Receber apoio técnico.
Erros de ligação ao servidor da API nos registos de istiod
O Istiod não consegue contactar o apiserver se vir erros semelhantes aos seguintes:
error k8s.io/client-go@v0.18.0/tools/cache/reflector.go:125: Failed to watch *crd.IstioSomeCustomResource`…dial tcp 10.43.240.1:443: connect: connection refused
Pode usar a string de expressão regular /error.*cannot list resource/ para
encontrar este erro nos registos.
Normalmente, este erro é temporário e, se acedeu aos registos do proxy através de
kubectl, o problema já pode estar resolvido. Normalmente, este erro é causado por eventos que tornam o servidor da API temporariamente indisponível, como quando um servidor da API que não está numa configuração de alta disponibilidade é reiniciado para uma atualização ou uma alteração da escalabilidade automática.
O contentor istio-init falha
Este problema pode ocorrer quando as regras iptables do pod não são aplicadas ao espaço de nomes de rede do pod. Isto pode dever-se a:
- Uma instalação do istio-cni incompleta
- Autorizações de pod de carga de trabalho insuficientes (autorização
CAP_NET_ADMINem falta)
Se usar o plug-in CNI do Istio, verifique se seguiu as instruções na íntegra. Verifique se o contentor istio-cni-node está pronto e consulte os registos. Se o problema persistir, estabeleça uma shell segura (SSH) no nó anfitrião e pesquise os registos do nó para comandos nsenter e verifique se existem erros.
Se não usar o plugin CNI do Istio, verifique se o pod de carga de trabalho tem autorização CAP_NET_ADMIN, que é definida automaticamente pelo injetor de sidecar.
Ligação recusada após o início do pod
Quando um pod é iniciado e connection refusedtenta estabelecer ligação a um
ponto final, o problema pode ser que o contentor da aplicação tenha sido iniciado antes do
contentor isto-proxy. Neste caso, o contentor da aplicação envia o pedido para istio-proxy, mas a ligação é recusada porque istio-proxy ainda não está a ouvir na porta.
Neste caso, pode:
Modifique o código de arranque da sua aplicação para fazer pedidos contínuos ao ponto final de verificação de estado
istio-proxyaté que a aplicação receba um código 200. O ponto final de funcionamentoistio-proxyé:http://localhost:15020/healthz/readyAdicione um mecanismo de pedido de repetição à carga de trabalho da aplicação.
A listagem de gateways devolve um resultado vazio
Sintoma: quando lista gateways através de kubectl get gateway --all-namespaces
depois de criar com êxito um gateway de malha de serviços na nuvem, o comando devolve
No resources found.
Este problema pode ocorrer no GKE 1.20 e posterior porque o controlador do GKE Gateway instala automaticamente o recurso Gateway.networking.x-k8s.io/v1alpha1 do GKE nos clusters. Para contornar o problema:
Verifique se existem vários recursos personalizados de gateway no cluster:
kubectl api-resources | grep gatewayExemplo de saída:
gateways gw networking.istio.io/v1beta1 true Gateway gatewayclasses gc networking.x-k8s.io/v1alpha1 false GatewayClass gateways gtw networking.x-k8s.io/v1alpha1 true Gateway
Se a lista apresentar entradas que não sejam gateways com o
apiVersionnetworking.istio.io/v1beta1, use o nome completo do recurso ou os nomes abreviados distinguíveis no comandokubectl. Por exemplo, executekubectl get gwoukubectl get gateways.networking.istio.ioem vez dekubectl get gatewaypara se certificar de que os gateways do Istio são apresentados.
Para mais informações sobre este problema, consulte o artigo Kubernetes Gateways e Istio Gateways.