Saiba como diagnosticar e resolver problemas em Services do tipo LoadBalancer em clusters ACS.
Informações básicas
Ao criar um Service com Type=LoadBalancer, o ACS Cloud Controller Manager (CCM) cria e configura automaticamente os recursos do SLB, incluindo a instância, os listeners e os grupos de servidores de backend. As políticas de atualização automática do SLB estão detalhadas em Considerações para configurar um Service LoadBalancer.
Procedimento
Verifique se a versão do CCM é 1.9.3.276-g372aa98-aliyun ou posterior. Atualize o CCM. Notas de versão do CCM: Cloud Controller Manager.

-
Execute o comando abaixo para localizar o Service associado à instância SLB:
kubectl get svc -A |grep -i LoadBalancer|grep ${XXX.XXX.XXX.XXX} #XXX.XXX.XXX.XXX is the IP address of the SLB instance. -
Execute o comando a seguir para verificar eventos de erro no Service:
kubectl -n {your-namespace} describe svc {your-svc-name}ImportanteCaso não apareçam eventos de erro, confirme que a versão do CCM é 1.9.3.276-g372aa98-aliyun ou superior. Atualize o CCM.
Se houver eventos de erro, consulte Erros e soluções de Service.
Na ausência de eventos de erro, siga as etapas de Solução de problemas.
Se o problema persistir, entre em contato com o grupo de suporte do ACS no DingTalk.
Erros e soluções de Service
A tabela a seguir lista erros comuns de Service e suas respectivas soluções.
|
Mensagem de erro |
Descrição e solução |
|
|
Instâncias SLB de recursos compartilhados não suportam servidores de backend do tipo ENI. Solução: Para usar servidores de backend ENI, crie uma instância SLB de alto desempenho adicionando a anotação Importante
Certifique-se de que as anotações correspondam à sua versão do CCM. As anotações suportadas por versão estão listadas em Adicionar anotações ao arquivo YAML de um Service para configurar instâncias CLB. |
|
|
Nenhum servidor de backend está associado à instância SLB. Verifique se existem pods associados ao Service e se estão em execução normal. Soluções:
|
|
O sistema não consegue localizar a instância SLB associada ao Service. Solução: Faça login no console SLB e pesquise a instância SLB na região do Service com base no
|
|
|
Sua conta possui pagamentos pendentes. |
|
|
O saldo da conta é insuficiente. |
|
|
O limitador de taxa da API foi acionado para o SLB. Soluções:
|
|
|
Não é possível excluir o listener associado ao grupo vServer. Soluções:
|
|
|
A instância SLB interna reutilizada e o cluster não estão na mesma VPC. Solução: Garanta que sua instância SLB e o cluster estejam implantados na mesma VPC. |
|
|
O vSwitch não possui endereços IP disponíveis. Solução: Use |
|
|
O campo Solução: Defina o campo |
|
|
Por padrão, versões antigas do CCM criam instâncias SLB de recursos compartilhados, que não estão mais disponíveis para compra. Solução: Atualize o CCM. |
|
|
Não é possível alterar o grupo de recursos de uma instância SLB após sua criação. Solução: Remova a anotação |
|
|
O endereço IP especificado da ENI não foi encontrado na VPC. Solução: Verifique se a anotação |
|
Não é permitido alterar o método de faturamento da instância SLB usada por um Service de pagamento conforme o uso para pagamento por especificação. Soluções:
|
|
|
Uma instância SLB criada pelo CCM está sendo reutilizada. Soluções:
|
|
|
Não é possível alterar o tipo de uma instância SLB após a criação. Solução: Recrie o Service relacionado. |
|
|
Não é possível associar uma instância SLB a um Service que já esteja vinculado a outra instância SLB. Solução: Não é possível reutilizar uma instância SLB existente apenas modificando o valor da anotação |
Solução de problemas
A tabela abaixo lista cenários comuns de solução de problemas e suas soluções.
|
Categoria |
Problema |
Solução |
|
Problemas ao acessar uma instância SLB |
A instância SLB não distribui o tráfego uniformemente. |
|
|
Ocorre o erro 503 ao acessar a instância SLB durante atualizações da aplicação. |
Ocorre o erro 503 ao acessar a instância SLB durante atualizações da aplicação |
|
|
Não é possível acessar a instância SLB de dentro do cluster. |
||
|
Não é possível acessar a instância SLB de fora do cluster. |
||
|
O erro |
||
|
Problemas relacionados às configurações do SLB |
As anotações do Service não surtem efeito. |
O que fazer se as anotações de um Service não surtirem efeito? |
|
A configuração da instância SLB foi modificada. |
||
|
Falha ao reutilizar uma instância SLB existente. |
Por que o sistema falha ao usar uma instância SLB existente para mais de um Service? |
|
|
Nenhum listener é criado ao reutilizar uma instância SLB existente. |
Por que nenhum listener é criado ao reutilizar uma instância SLB existente? |
|
|
O endpoint do Service difere daquele especificado para o servidor de backend da instância SLB. |
O que fazer se os grupos vServer de uma instância SLB não forem atualizados? |
|
|
Problemas relacionados à exclusão do SLB |
A instância SLB foi excluída. |
|
|
A instância SLB não é excluída junto com o Service. |
A instância SLB não distribui o tráfego uniformemente
Causa
O algoritmo de agendamento da instância SLB está inadequado.
Sintoma
O tráfego não é distribuído de forma equilibrada entre os servidores de backend da instância SLB.
Solução
Se o seu Service estabelecer conexões de longa duração, defina o algoritmo de agendamento da instância SLB para Weighted Least Connections (WLC) adicionando a anotação
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler:"wlc".
Ocorre o erro 503 ao acessar a instância SLB durante atualizações da aplicação
Causa
A drenagem de conexões não está configurada para o listener do SLB ou o encerramento graceful não está configurado para o pod.
Sintoma
O erro 503 surge ao acessar a instância SLB enquanto a aplicação está sendo atualizada.
Solução
Adicione a anotação
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drainpara configurar a drenagem de conexões no listener do SLB. Detalhes sobre anotações estão disponíveis em Operações comuns para gerenciar listeners.-
Configure os parâmetros
preStopereadinessProbedo pod conforme o modo de rede usado.O
readinessProbeverifica se o container está pronto para receber tráfego. O pod só é adicionado ao endpoint após passar na sonda de prontidão e, então, vinculado à instância SLB. Defina um intervalo de sondagem, período de atraso e limiar de falha adequados para oreadinessProbe— aplicações com inicialização lenta podem reiniciar repetidamente se os limiares forem muito curtos.Defina o
preStopcom o tempo necessário para o pod processar as requisições restantes. Configure oterminationGracePeriodSecondspara pelo menos 30 segundos a mais que opreStop.
Exemplo de configuração de Pod:
apiVersion: v1 kind: Pod metadata: name: nginx namespace: default spec: containers: - name: nginx image: nginx # Liveness probe livenessProbe: failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 30 successThreshold: 1 tcpSocket: port: 80 timeoutSeconds: 1 # Readiness probe readinessProbe: failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 30 successThreshold: 1 tcpSocket: port: 80 timeoutSeconds: 1 # Graceful shutdown lifecycle: preStop: exec: command: - sleep - "30" terminationGracePeriodSeconds: 60
A instância SLB não pode ser acessada de fora do cluster
Causa
Regras de ACL foram configuradas para a instância SLB ou a instância não está operando corretamente.
Sintoma
Impossibilidade de acessar a instância SLB externamente ao cluster.
Solução
-
Execute o comando abaixo para consultar eventos do Service e identificar erros. Erros e soluções de Service.
kubectl -n {your-namespace} describe svc {your-svc-name} -
Verifique se existem regras de ACL configuradas na instância SLB.
Caso haja regras de ACL, confirme se o endereço IP do cliente está permitido. Detalhes sobre configuração de ACL encontram-se em Controle de acesso.
-
Confirme se a instância SLB está associada a um grupo vServer.
Se não houver grupo vServer associado, verifique se os pods da aplicação estão vinculados ao Service e funcionando normalmente. Caso apresentem falhas, solucione o problema. Solução de problemas de Pod.
-
Verifique se os listeners do SLB detectaram servidores de backend não saudáveis.
Se houver servidores não saudáveis, verifique a integridade dos pods da aplicação. Para detalhes sobre verificações de saúde do SLB, consulte Executar um script de verificação de saúde.
Persistindo os problemas, entre em contato com o grupo de suporte do ACS no DingTalk.
Serviços HTTPS de backend não podem ser acessados
Causa
Após especificar o certificado na instância SLB, ela descriptografa as requisições HTTPS e encaminha requisições HTTP para os pods de backend.
Sintoma
Falha ao acessar serviços HTTPS no backend.
Solução
Defina o targetPort como uma porta HTTP no Service. Por exemplo, se a porta HTTPS for 443 no Service NGINX abaixo, altere o valor de targetPort para 80.
Exemplos:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
name: nginx
namespace: default
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer