Как получить доступ к внешнему SMTP-серверу из кластера Kubernetes с помощью Istio Service Mesh - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть кластер kubernetes, в котором есть приложения, работающие в сетке службы Istio.В одном приложении я пытаюсь отправить письмо по SMTP.Как настроить правила Istio, чтобы мои приложения могли использовать мой внешний SMTP-сервер?

Изначально я получал исключение "Не удалось подключиться к узлу SMTP: in-v3.mailjet.com, порт: 587,ответ: -1. "как подробно здесь .После посещения этого сайта я понял, что мне нужно предоставить правила выхода, которые я сделал, как указано ниже

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mailjet
spec:
  hosts:
  - "in-v3.mailjet.com"
  location: MESH_EXTERNAL
  ports:
  - number: 587
    name: tls
    protocol: TLS
  resolution: DNS
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mailjet
spec:
  hosts:
  - "*.mailjet.com"
  tls:
  - match:
    - port: 587
      sni_hosts:
      - "*.mailjet.com"
    route:
    - destination:
        host: "*.mailjet.com"
        port:
          number: 587
      weight: 100

. Я больше не получаю исключение «Не удалось подключиться к SMTP-хосту», но я получаю исключение SocketTieoutException

[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at java.lang.Thread.run(Thread.java:748)
[0m[31m06:56:39,048 ERROR [stderr] (default task-55) Caused by: javax.mail.MessagingException: Exception reading response;
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)   nested exception is:
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  java.net.SocketTimeoutException: Read timed out
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2460)
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2187)
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
[0m[31m06:56:39,048 ERROR [stderr] (default task-55)  at javax.mail.Service.connect(Service.java:366)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at javax.mail.Service.connect(Service.java:246)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at javax.mail.Service.connect(Service.java:267)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at org.keycloak.email.DefaultEmailSenderProvider.send(DefaultEmailSenderProvider.java:138)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  ... 73 more
[0m[31m06:56:39,049 ERROR [stderr] (default task-55) Caused by: java.net.SocketTimeoutException: Read timed out
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at java.net.SocketInputStream.socketRead0(Native Method)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at java.net.SocketInputStream.read(SocketInputStream.java:171)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at java.net.SocketInputStream.read(SocketInputStream.java:141)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:126)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:106)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2440)
[0m[31m06:56:39,049 ERROR [stderr] (default task-55)  ... 79 more
[0m[31m06:56:39,049 ERROR [org.keycloak.services.resources.admin.RealmAdminResource] (default task-55) Failed to send email
 javax.mail.MessagingException: Exception reading response;
  nested exception is:
        java.net.SocketTimeoutException: Read timed out

Что мне нужно сделать, чтобы успешно отправить электронное письмо в кластер Kubernetes с сеткой сервиса Istio?

1 Ответ

3 голосов
/ 11 апреля 2019

После сравнения с [Mesh-external service entry для внешнего экземпляра MySQL] (https://istio.io/blog/2018/egress-tcp/#mesh-external-service-entry-for-an-external-mysql-instance) мне удалось заставить это работать с использованием TCP, как показано ниже. Я попробовал TLS с IP-адресом, но это не сработало.Было бы хорошо, однако, если бы мне не пришлось указывать IP-адрес

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mailjet
spec:
  hosts:
  - in-v3.mailjet.com
  addresses:
  - 104.199.96.85/32
  ports:
  - name: tls
    number: 587
    protocol: tcp
  location: MESH_EXTERNAL
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mailjet
spec:
  hosts:
  - in-v3.mailjet.com
  tcp:
  - match:
    - port: 587
    route:
    - destination:
        host: in-v3.mailjet.com
        port:
          number: 587 
---          
...