Разоблачение болта Neo4j с помощью Kubernetes Ingress - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь создать инструмент обучения Neo4j для некоторых наших тренингов.Я хочу использовать Kubernetes, чтобы раскрутить Neo4j Pod для каждого участника.В настоящее время я изо всех сил пытаюсь разоблачить конечную точку болта, используя Ingress, и я не знаю почему.Вот мои настройки развертывания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: neo4j
  namespace: learn
  labels:
    app: neo-manager
    type: database
spec:
  replicas: 1
  selector:
    matchLabels:
      app: neo-manager
      type: database
  template:
    metadata:
      labels:
        app: neo-manager
        type: database
    spec:
      containers:
        - name: neo4j
          imagePullPolicy: IfNotPresent
          image: neo4j:3.5.6
          ports:
            - containerPort: 7474
            - containerPort: 7687
              protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
  name: neo4j-service
  namespace: learn
  labels:
    app: neo-manager
    type: database
spec:
  selector:
    app: neo-manager
    type: database
  ports:
    - port: 7687
      targetPort: 7687
      name: bolt
      protocol: TCP
    - port: 7474
      targetPort: 7474
      name: client
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: neo4j-ingress
  namespace: learn
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: learn.neo4j.com
      http:
        paths:
          - path: /
            backend:
              serviceName: neo4j-service
              servicePort: 7474
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: tcp-services
  namespace: learn
data:
  7687: "learn/neo4j-service:7687"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  namespace: learn
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
    spec:
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.9.0-beta.16
          args:
            - /nginx-ingress-controller
            - --tcp-services-configmap=${POD_NAMESPACE}/tcp-services
          env:
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace

Клиент хорошо раскрывается и становится доступным под learn.neo4j.com, но я не знаю, куда его указать, чтобы подключиться к БД с помощью болта.Что бы я ни пытался, оно не говорит ServiceUnavailable: Websocket Connection failure (WebSocket network error: The operation couldn’t be completed. Connection refused в консоли).Чего мне не хватает?

Ответы [ 3 ]

3 голосов
/ 17 июня 2019

nginx-ingress-controller по умолчанию создает только прокси http (s).

В вашем случае вы пытаетесь использовать другой протокол (болт), поэтому вам необходимо настроить входной контроллер для негодля создания TCP-прокси.

Для этого вам необходимо создать конфигурационную карту (в пространстве имен nginx-ingress-controller), аналогичную следующей:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  7687: "<your neo4j namespace>/neo4j-service:7687"

Затем,убедитесь, что ваш входной контроллер имеет следующий флаг в своей команде:

--tcp-services-configmap tcp-services

Это заставит ваш nginx-входной контроллер прослушивать порт 7687 с TCP-прокси.

Вы можете удалить neo4j-bolt-ingress Вход, это не будет использоваться.

Конечно, вы должны убедиться, что входной контроллер правильно выставляет порт 7687 так же, как и с портами 80 и 443, и, возможно, вам придетсянастройте параметры любого брандмауэра и балансировщика нагрузки, которые у вас могут быть.

Источник: https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

1 голос
/ 17 июня 2019

По умолчанию он автоматически пытается подключиться к порту 7687 - если вы введете URL-адрес соединения http://learn.neo4j.bolt.com:80 (или https), он будет работать.

0 голосов
/ 17 июня 2019

Я ранее не использовал вход kubernetes в этом контексте, но я думаю, что когда вы используете HTTP или HTTPS для подключения к Neo4J, вам все еще требуется внешняя доступность для подключения к порту болта (7687).Ваша настройка позволяет это сделать?

...