1
resposta

Problema de comunicação com o banco

Olá, quando cheguei na aula de liveness probe, percebi que a aplicação começou a falhar. Quando verifiquei os logs do pod, recebi o erro abaixo:

6:07:01 PM - Found 0 errors. Watching for file changes. server running on port undefined Error: Access denied for user ''@'10.244.0.141' (using password: YES) at Packet.asError (/app/node_modules/mysql2/lib/packets/packet.js:728:17) at ClientHandshake.execute (/app/node_modules/mysql2/lib/commands/command.js:29:26) at PoolConnection.handlePacket (/app/node_modules/mysql2/lib/connection.js:456:32) at PacketParser.onPacket (/app/node_modules/mysql2/lib/connection.js:85:12) at PacketParser.executeStart (/app/node_modules/mysql2/lib/packet_parser.js:75:16) at Socket. (/app/node_modules/mysql2/lib/connection.js:92:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Readable.push (node:internal/streams/readable:234:10) { code: 'ER_ACCESS_DENIED_ERROR', errno: 1045, sqlState: '28000', sqlMessage: "Access denied for user ''@'10.244.0.141' (using password: YES)", sql: undefined }

Os testes que eu realizei foram os abaixo:

Conectando em um dos pods da aplicação e tentando acessar o banco (inclusive usando as variaveis de ambiente do container para verificar se o valor havia sido passado corretamente): Funciona
Conectando diretamente no banco: Funciona

Obs.: Como estou usando um cluster ARM, baixei o repo da aula inicial (https://github.com/alura-cursos/kubernetes-3/blob/Projeto_inicial/k8s/secrets.yaml) e criei minha propria imagem, sem alterar absolutamente nada.
1 resposta

Olá, Wfirmino.

Tudo bem?

Pelo erro que você descreveu, parece que há um problema com as credenciais de acesso ao banco de dados que não estão sendo corretamente aplicadas no seu ambiente Kubernetes. O erro "Access denied for user ''@'10.244.0.141' (using password: YES)" indica que o usuário para conexão ao banco de dados não está sendo passado, resultando em uma tentativa de login com um usuário vazio.

Como você mencionou que ao conectar diretamente no banco ou através de um dos pods a conexão funciona, isso sugere que as credenciais estão corretas, mas não estão sendo corretamente aplicadas ou lidas pela aplicação quando ela é iniciada pelo Kubernetes.

Aqui estão algumas sugestões para você investigar e tentar resolver o problema:

  1. Verificar Secret e Environment Variables: Verifique se o Kubernetes Secret está correto e se as variáveis de ambiente estão sendo definidas no seu deployment.yaml. Certifique-se de que os nomes das variáveis de ambiente que sua aplicação espera (como DB_USER, DB_PASSWORD) correspondem aos que estão definidos no deployment.

  2. Configuração do Liveness Probe: Como o problema começou a ocorrer após a configuração do liveness probe, verifique se há algo na configuração do probe que possa estar interferindo com a inicialização correta da aplicação. Certifique-se de que o probe não está sendo disparado antes de a aplicação estar completamente pronta para aceitar conexões.

  3. Logs e Debugging: Como você já está fazendo, continue verificando os logs para qualquer mensagem de erro adicional que possa dar mais pistas. Além disso, você pode aumentar o nível de log da sua aplicação para obter mais detalhes sobre o que está acontecendo durante a inicialização.

  4. Revisar Configurações do Dockerfile e Kubernetes: Como você criou sua própria imagem, certifique-se de que todas as configurações necessárias para a conexão com o banco de dados estão sendo corretamente incluídas e que o Dockerfile não omitiu nenhuma etapa essencial que possa afetar a configuração do ambiente.

  5. Testar Conexão com Ferramentas Externas: Utilize ferramentas como kubectl exec para acessar o container e tentar manualmente as conexões ou verificar as variáveis de ambiente dentro do pod para confirmar se tudo está sendo passado como esperado.

Espero que essas sugestões ajudem a identificar e resolver o problema. Qualquer coisa manda aqui. Bons estudos!