在开始提问之前,这里简要介绍一下我要实现的目标:
我们有1000多个Neo4J databases
。最终用户可以要求特定的数据库实例。因此,我们将特定的Neo4J实例作为docker容器运行,并将其提供给用户。
问题:
对于处理Neo4J数据库的按需运行实例,
我们设置了kubernetes cluster
,并为那个Neo4J数据库动态创建了deployment
,service
和ingress
对象。
作为输出用户,您将收到两个URL:一个用于http
,一个用于bolt
。
我们在nginx
集群中将Ingress Controller
设置为Kubernetes
。 Nginx
允许http
和websocket
流量。 Bolt protocol应该在websocket
上工作
问题是,我们无法使用bolt
连接到Neo4J数据库,因为ingress
无法将请求从bolt url
重定向到Pod运行中。
让我知道这是否是正确的方法。
这里是入口,服务和部署对象的yaml:
Ingress.yaml
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: neo-sandbox
annotations:
kubernetes.io/ingress.class: private
nginx.ingress.kubernetes.io/rewrite-target: "/"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.org/websocket-services: "neo-sandbox-bolt"
spec:
rules:
- host: sandbox.neo.com
http:
paths:
- path: "/22220"
backend:
serviceName: neo-sandbox-http
servicePort: 22220
- path: "/22221"
backend:
serviceName: neo-sandbox-bolt
servicePort: 22221
Http_Service.yaml
:
apiVersion: v1
kind: Service
metadata:
labels:
app: neo-sandbox-http
name: neo-sandbox-http
spec:
type: NodePort
selector:
app: neo-sandbox
ports:
- name: frontend-http-port
port: 22220
protocol: TCP
targetPort: 22220
Bolt_Service.yaml
:
apiVersion: v1
kind: Service
metadata:
labels:
app: neo-sandbox-bolt
name: neo-sandbox-bolt
spec:
type: NodePort
selector:
app: neo-sandbox
ports:
- name: frontend-bolt-port
port: 22221
protocol: TCP
targetPort: 22221
Deployment.yaml
:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: neo-sandbox
version: latest
name: neo-sandbox
spec:
replicas: 1
selector:
matchLabels:
app: neo-sandbox
version: latest
template:
metadata:
labels:
app: neo-sandbox
version: latest
spec:
containers:
- env:
- name: NEO4J_dbms_memory_pagecache_size
value: 1G
- name: NEO4J_dbms_memory_heap_maxSize
value: 3G
image: <neo4j-docker-image>
imagePullPolicy: IfNotPresent
name: neodb
ports:
- containerPort: 7474
protocol: TCP
- containerPort: 7687
protocol: TCP
resources:
limits:
cpu: "2"
memory: 5Gi
requests:
cpu: 200m
memory: 1Gi
- env:
- name: FRONTEND_HTTP_PORT
value: "22220"
- name: FRONTEND_BOLT_PORT
value: "22221"
image: <ha-proxy-docker-image>
name: proxy
ports:
- containerPort: 22220
protocol: TCP
- containerPort: 22221
protocol: TCP
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 50m
memory: 1Gi
请注意:
1)kubernetes pod
运行两个容器。一个容器运行Neo4j的标准docker映像,一个容器运行执行端口重定向的HA proxy
映像(将流量从22220
重定向到7474
,将22221
重定向到7687
)
2)我可以访问集群中的bolt service
。因此问题出在ingress
级别。
以下是用户收到的URL:
用于HTTP-> sandbox.neo.com/22220
for螺栓-> sandbox.neo.com/22221
3)可以浏览Nginx配置选项here
4)Nginx Websocket示例为here