Apache Spark на Kubernetes (Docker для Ma c) не может разрешить мои VPN-хосты - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь отправить работу через Kubernetes. Прошли через https://spark.apache.org/docs/latest/running-on-kubernetes.html и успешно отправили работу с помощью следующей команды:

$ bin/spark-submit \
--master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=<spark-image> \
local:///path/to/examples.jar

Теперь я пытаюсь отправить свою работу, которая включает в себя Kafka и PostgreSQL доступ к которому доступен через VPN.

Задание работает на моем локальном компьютере через IntelliJ, но при попытке отправить его в Kubernetes такое же задание не выполняется.

Исключение составляет

Caused by: java.net.UnknownHostException: db-host-name

Как можно Я разрешаю DNS-имя через VPN?

enter image description here IP is xx

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Одним из решений является создание службы, которая будет получать ответ DNS и направлять вас к внешней конечной точке, являющейся вашей базой данных.

Шаги:

  • Создание службы без селектора
  • Создание конечной точки вручную
  • Проверка ее

Создать сервис без селектора

Создать сервис без селектора, выполнив следующие действия: ссылка .

apiVersion: v1
kind: Service
metadata:
  name: DB_NAME
spec:
  ports:
    - protocol: TCP
      port: DB_PORT
      targetPort: DB_PORT

Замените DB_NAME и DB_PORT на соответствующие вашему делу.

Примените его, выполнив следующую команду:

$ kubectl apply -f FILE_NAME.yaml

Создание конечной точки

У ранее созданной службы не будет конечной точки для прямого трафика c к.

Оконечная точка ниже будет использоваться при вызове имени службы.

apiVersion: v1
kind: Endpoints
metadata:
  name: DB_NAME
subsets:
  - addresses:
      - ip: DB_IP_ADDRESS
    ports:
      - port: DB_PORT

Убедитесь, что name конечной точки совпадает с тем, что используется в вышеприведенной услуге.

subsets:
  - addresses:
      - ip: DB_IP_ADDRESS
    ports:
      - port: DB_PORT

Возьмите конкретный c взгляд на вышеуказанную часть и замените DB_IP_ADDRESS и DB_PORT.

Примените его, выполнив следующую команду:

$ kubectl apply -f FILE_NAME.yaml

Проверьте это

Запустите пример pod с установленной curl и проверьте, отвечает ли созданная служба на ваши запросы:

$ curl DB_NAME:DB_PORT

Альтернативы

Ознакомьтесь с дополнительными ресурсами, объясняющими другие пути:

0 голосов
/ 27 января 2020

Если вы можете попытаться настроить параметры DNS для docker изображения. Любой из этих двух вариантов работал для проблем DNS / VPN, с которыми я сталкивался в прошлом:

  • --dns=<IP_ADDRESS>
  • --dns-search=<DOMAIN>

Вот более подробные документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...