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_ADMIN
em 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 refused
tenta 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-proxy
até que a aplicação receba um código 200. O ponto final de funcionamentoistio-proxy
é:http://localhost:15020/healthz/ready
Adicione 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 gateway
Exemplo 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
apiVersion
networking.istio.io/v1beta1
, use o nome completo do recurso ou os nomes abreviados distinguíveis no comandokubectl
. Por exemplo, executekubectl get gw
oukubectl get gateways.networking.istio.io
em vez dekubectl get gateway
para 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.