Изменить корневой путь для Spark Web UI? - PullRequest
0 голосов
/ 30 мая 2019

Я работаю над настройкой серверов ноутбуков Jupyter в Kubernetes, которые могут запускать pyspark. Каждый пользователь может иметь несколько серверов, работающих одновременно, и может получить доступ к каждому из них, перейдя к соответствующему хосту в сочетании с путем к полному имени сервера. Например: http://<hostname>/<username>/<notebook server name>.

У меня определена функция верхнего уровня, которая позволяет пользователю создать SparkSession, который указывает на главный URL-адрес Kubernetes и устанавливает его модуль в качестве драйвера Spark.

Это все хорошо, но я бы хотел, чтобы конечные пользователи имели доступ к URL-адресу для Spark Web UI, чтобы они могли отслеживать свои работы. Документация Spark on Kubernetes содержит переадресацию портов в качестве рекомендуемой схемы для достижения этой цели. Похоже, что для любой организации, ориентированной на безопасность, позволить произвольному пользователю настроить переадресацию портов таким способом было бы неприемлемо.

Я хотел бы использовать определение Ingress Kubernetes, чтобы разрешить внешний доступ к веб-интерфейсу Spark драйвера. Я настроил что-то вроде следующего:

# Service
apiVersion: v1
kind: Service
metadata:
  namespace: <notebook namespae>
  name: <username>-<notebook server name>-svc
spec:
  type: ClusterIP
  sessionAffinity: None
  selector:
    app: <username>-<notebook server name>-notebook
  ports:
  - name: app-svc-port
    protocol: TCP
    port: 8888
    targetPort: 8888
  - name: spark-ui-port
    protocol: TCP
    port: 4040
    targetPort: 4040

# Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: workspace
  name: <username>-<notebook server name>-ing
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: <hostname>
    http:
      paths:
      - path: /<username>/<notebook server name>
        backend:
          serviceName: <username>-<notebook server name>-svc
          servicePort: app-svc-port
      - path: /<username>/<notebook server name>/spark-ui
        backend:
          serviceName: <username>-<notebook server name>-svc
          servicePort: spark-ui-port

Однако при этой настройке при переходе к http://<hostname>/<username>/<notebook server name>/spark-ui/ меня перенаправляют на http://<hostname>/jobs. Это связано с тем, что /jobs является точкой входа по умолчанию для веб-интерфейса Spark. Однако у меня нет входного правила для этого пути, и я не могу установить такое правило, так как веб-интерфейс каждого пользователя будет сталкиваться друг с другом в балансировщике нагрузки (если у меня нет недопонимания, что вполне возможно).

В настройках Spark UI , кажется, нет способа установить корневой путь для сеанса Spark. Вы можете изменить порт, на котором он работает, но то, что я хотел бы сделать, заставляет интерфейс работать примерно так: http://<hostname>/<username>/<notebook server name>/spark-ui/<jobs, stages, etc>. Неужели нет способа изменить то, что следует за именем хоста URL-адреса и перед последней частью?

...