configuração do kuberntes:
serviço mailpit + implantação (o ingresso funciona, posso me conectar à UI)
---
apiVersion: v1
kind: Service
metadata:
name: desideria-crm-mailpit
namespace: desideria-crm
labels:
app: desideria-crm-mailpit
spec:
ports:
- port: 8025
name: http-sv
targetPort: http
protocol: TCP
- port: 1025
name: smtp-sv-tcp
targetPort: smtp-tcp
protocol: TCP
selector:
app: desideria-crm-mailpit
clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: desideria-crm-mailpit
namespace: desideria-crm
labels:
app: desideria-crm-mailpit
spec:
replicas: 1
selector:
matchLabels:
app: desideria-crm-mailpit
strategy:
type: Recreate
template:
metadata:
labels:
app: desideria-crm-mailpit
spec:
containers:
- image: axllent/mailpit:v1.9.8
name: desideria-crm-mailpit
env:
- name: MP_VERBOSE
value: "true"
ports:
- containerPort: 8025
name: http
protocol: TCP
- containerPort: 1025
name: smtp-tcp
protocol: TCP
Criou um arquivo email.txt no pod:
From: [email protected]
To: [email protected]
Subject: Email Subject
This is the body of the email.
It can contain multiple lines of text.
Então, do shell no pod mailpit:
TESTE #1 contra localhost do pod mailpit
sendmail -v -w 5 -t -oLogLevel=1 -S localhost:1025 < email.txt
O resultado está ok, o e-mail aparece na interface do mailpit
sendmail: recv:'220 desideria-crm-mailpit-7cfbdb55d7-krdcw Mailpit ESMTP Service ready'
sendmail: send:'EHLO desideria-crm-mailpit-7cfbdb55d7-krdcw'
sendmail: recv:'250-desideria-crm-mailpit-7cfbdb55d7-krdcw greets desideria-crm-mailpit-7cfbdb55d7-krdcw'
sendmail: recv:'250-SIZE 0'
sendmail: recv:'250 ENHANCEDSTATUSCODES'
sendmail: send:'MAIL FROM:<root@desideria-crm-mailpit-7cfbdb55d7-krdcw>'
sendmail: recv:'250 2.1.0 Ok'
sendmail: send:'RCPT TO:<[email protected]>'
sendmail: recv:'250 2.1.5 Ok'
sendmail: send:'DATA'
sendmail: recv:'354 Start mail input; end with <CR><LF>.<CR><LF>'
sendmail: send:'From: [email protected]'
sendmail: send:'To: [email protected]'
sendmail: send:'Subject: Email Subject'
sendmail: send:''
sendmail: send:'This is the body of the email.'
sendmail: send:'It can contain multiple lines of text.'
sendmail: send:'.'
sendmail: recv:'250 2.0.0 Ok: queued'
sendmail: send:'QUIT'
sendmail: recv:'221 2.0.0 desideria-crm-mailpit-7cfbdb55d7-krdcw Mailpit ESMTP Service closing transmission channel'
TESTE #2 desideria-crm-mailpit (desta vez de outro pod dentro do mesmo namespace kubernetes)
sendmail -v -w 5 -t -oLogLevel=1 -S desideria-crm-mailpit:1025 < email.txt
Tempo limite após 5 segundos, tempo limite superior também não funciona.
Alarm clock
TESTE #3 desideria-crm-mailpit (usando um aplicativo java de outro pod no mesmo namespace)
notas laterais:
- isso funciona ao testar no PC local em um host local executando o contêiner mailpit docker/sem kubernetes)
- o aplicativo também funciona com uma autenticação de servidor SMTP real, etc.
DEBUG: Jakarta Mail version 2.1.1
DEBUG: URL jar:file:/var/lib/jar/desideriacare-crm-api.jar!/BOOT-INF/lib/jakarta.mail-1.1.0.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/var/lib/jar/desideriacare-crm-api.jar!/BOOT-INF/lib/jakarta.mail-1.1.0.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPTransport=jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.pop3.POP3Store=jakarta.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], com.sun.mail.imap.IMAPSSLStore=jakarta.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.smtp.SMTPSSLTransport=jakarta.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.pop3.POP3SSLStore=jakarta.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=jakarta.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle]}
DEBUG: Providers Listed By Protocol: {imap=jakarta.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtp=jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], pop3=jakarta.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], imaps=jakarta.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], smtps=jakarta.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3s=jakarta.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: URL jar:file:/var/lib/jar/desideriacare-crm-api.jar!/BOOT-INF/lib/jakarta.mail-1.1.0.jar!/META-INF/javamail.address.map
DEBUG: successfully loaded resource: jar:file:/var/lib/jar/desideriacare-crm-api.jar!/BOOT-INF/lib/jakarta.mail-1.1.0.jar!/META-INF/javamail.address.map
DEBUG: getProvider() returning jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "desideria-crm-mailpit", port 1025, isSSL false
DEBUG SMTP: exception reading response, THROW:
java.net.SocketTimeoutException: Read timed out
at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:280)
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:306)
..... shortened
TESTE #4 desideria-crm-mailpit (usando telnet do MESMO pod do TESTE #2)
telnet desideria-crm-mailpit 1025
O resultado funciona - mas por quê?
Connected to desideria-crm-mailpit
EHLO testingstuff
220 desideria-crm-mailpit-7cfbdb55d7-krdcw Mailpit ESMTP Service ready
250-desideria-crm-mailpit-7cfbdb55d7-krdcw greets testingstuff
250-SIZE 0
250 ENHANCEDSTATUSCODES
MAIL FROM:<[email protected]>
250 2.1.0 Ok
RCPT TO:<[email protected]>
250 2.1.5 Ok
DATA
354 Start mail input; end with <CR><LF>.<CR><LF>
From: [email protected]
To: [email protected]
Subject: Email Subject
r1
r2
last row
.
250 2.0.0 Ok: queued
Resumo
- sendmail do mailpit pod funciona sozinho
- sendmail do testpod A não funciona
- aplicativo java do testpod B não funciona
- telnet do testpod A funciona !!
- ping
desideria-crm-mailpit
/IP funciona em QUALQUER pod. - nslookup recupera o IP correto do pod
- Também tentei mailhog pod em vez de mailpit. Mesmo resultado.
O que o aplicativo sendmail/java pode estar fazendo de diferente em comparação ao telnet?
Usando o IP dos pods/serviço em vez do nome do serviço, desideria-crm-mailpit
obtenho os mesmos resultados.
Estou realmente confuso, pois serviços de banco de dados como mariadb/mongodb, que são configurados da mesma maneira, além das portas, podem ser acessados a partir do aplicativo Java e funcionam perfeitamente bem.
Acontece que o istio causa o problema. Assim que os sidecars não forem mais injetados. Tudo funciona conforme o esperado.
Com o istio sidecar o seguinte ajuste teve que ser feito no meu caso:
Adicionar à porta smtp do serviço:
ou
Manifesto de serviço final