使用 Kubernetes Ingress 访问 Neo4j
Helm chart neo4j/neo4j-reverse-proxy 允许您使用 Kubernetes Ingress 通过端口 :80
或 :443
访问 Neo4j。有关 Kubernetes Ingress 的更多信息,请参阅Kubernetes 官方文档 → Ingress。
该 Helm chart 创建一个反向代理,该代理配置为使用 serviceName
、namespace
和 domain
值将流量路由到 Neo4j 服务 URL。例如,如果 serviceName
为 standalone-admin,namespace
为 default,并且 domain
为 cluster.local,则 Neo4j 服务 URL 为 standalone-admin.default.svc.cluster.local。
对于 Neo4j 集群,Neo4j 无头服务可用于将流量路由到集群实例。有关如何安装 neo4j/neo4j-cluster-headless-service Helm chart 的更多信息和详细示例,请参阅使用无头服务访问 Neo4j 集群。
反向代理 Helm chart 创建一个 HTTP 服务器,该服务器根据请求头将请求路由到 Bolt 反向代理或 HTTP 反向代理。收到响应后,Bolt 反向代理会更新响应,将 Bolt 端口替换为 :80
或 :443
。
反向代理 Helm chart 支持为容器定义权限和访问控制设置。请确保不要以 root 用户身份运行 Neo4j。
配置选项
要查看所有可配置选项,请运行以下命令
helm show values neo4j/neo4j-reverse-proxy
# Default values for neo4j reverse proxy helm chart
## @param nameOverride String to partially override common.names.fullname
nameOverride: ""
## @param fullnameOverride String to fully override common.names.fullname
fullnameOverride: ""
# Parameters for reverse proxy
reverseProxy:
image: "neo4j/helm-charts-reverse-proxy:5.26.0"
# Name of the kubernetes service. This service should have the ports 7474 and 7687 open.
# This could be the admin service ex: "standalone-admin" or the loadbalancer service ex: "standalone" created via the neo4j helm chart
# serviceName , namespace , domain together will form the complete k8s service url. Ex: standalone-admin.default.svc.cluster.local
# When used against a cluster ensure the service being used is pointing to all the cluster instances.
# This could be the loadbalancer from neo4j helm chart or the headless service installed via neo4j-headless-service helm chart
serviceName: ""
# default is set to cluster.local
domain: "cluster.local"
# securityContext defines privilege and access control settings for a Container. Making sure that we dont run Neo4j as root user.
containerSecurityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 7474
runAsGroup: 7474
capabilities:
drop: [ "ALL" ]
podSecurityContext:
runAsNonRoot: true
runAsUser: 7474
runAsGroup: 7474
fsGroup: 7474
fsGroupChangePolicy: "Always"
# This assumes ingress-nginx controller or haproxy-ingress-controller is already installed in your kubernetes cluster.
# You can install ingress-nginx by following instructions on this link https://github.com/kubernetes/ingress-nginx/blob/main/docs/deploy/index.md#quick-start
# You can install haproxy-ingress by following instructions on this link https://haproxy-ingress.github.io/docs/getting-started/
ingress:
enabled: true
#default value is nginx. It can be either nginx or haproxy
className: nginx
annotations: {}
# "demo": "value"
# "demo2": "value2"
host: ""
tls:
enabled: false
config: []
# - secretName: "demo2"
# hosts:
# - localhost
以下步骤假设您已有一个正在运行的 Kubernetes 集群,并且已安装独立的 Neo4j Helm chart。独立的 Neo4j 有一个名为 standalone-admin 的 Neo4j 服务,并且已打开 :7474
和 :7687
端口。要验证这一点,请运行
kubectl get all, pvc, pv, configmaps, secrets
您还需要一个 Ingress 控制器才能使 Kubernetes Ingress 工作。以下步骤使用 Nginx Ingress Controller。有关更多信息,请参阅Ingress-Nginx Controller 官方文档。
如果您没有,可以使用以下命令安装它
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace --set controller.service.externalTrafficPolicy=Local
配置 Kubernetes Ingress
配置将用于安装反向代理 Helm chart 的 ingress-values.yaml 文件。
配置 ingress-values.yaml 文件以通过端口 :443
访问 Neo4j
以下示例展示了如何配置 ingress-values.yaml 文件以通过端口 :443
访问 Neo4j
-
创建包含 Ingress 自签名证书的 Kubernetes secret,然后创建 ingress-values.yaml 文件。
-
为 Ingress 自签名证书创建目录
mkdir certs cd certs
-
创建 Ingress 自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ingress.key -out ingress.cert -subj "/CN=localhost/O=neo4j" -addext "subjectAltName = DNS:localhost"
-
使用 Ingress 自签名证书创建 Kubernetes secret
kubectl create secret tls ingress-cert --key /path/to/your/certs/ingress.key --cert /path/to/your/certs/ingress.cert
-
-
使用
serviceName
和secretName
的正确值配置 ingress-values.yaml 文件。确保secretName
与上一步中创建的相同。通过将tls.enabled
设置为true
来启用 TLS。reverseProxy: image: neo4j/helm-charts-reverse-proxy:5.26.0 serviceName: "standalone-admin" ingress: enabled: true tls: enabled: true config: - secretName: ingress-cert hosts: - localhost
配置 ingress-values.yaml 文件以通过端口 :80
访问 Neo4j
或者,如果您想通过端口 :80
访问 Neo4j,请将 tls.enabled
保持其默认值 false
,并创建包含以下内容的 ingress-values.yaml 文件
reverseProxy:
#Use image only when need a specific version or using your internal artifactory.
#Otherwise let it default to what is in the values.yaml
#image: neo4j/helm-charts-reverse-proxy:5.26.0
serviceName: "standalone-admin"
ingress:
enabled: true
tls:
enabled: false
安装反向代理 Helm chart
使用您已创建的 ingress-values.yaml 文件安装反向代理 Helm chart
helm install rp neo4j/neo4j-reverse-proxy -f /path/to/your/ingress-values.yaml
通过 Neo4j Browser 访问您的数据
-
获取 Ingress LoadBalancer IP
kubectl get ingress/rp-reverseproxy-ingress -n default -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
-
在 https://INGRESS_IP:443 或 http://INGRESS_IP:80 上打开 Neo4j Browser 并使用您的凭据登录。
通过 Cypher Shell 访问您的数据
或者,如果您只想通过 Nginx Ingress Controller 使用 Cypher Shell 访问数据,则需要创建一个 configmap
,因为 Cypher Shell 预期是 TCP 连接而 Ingress 是 HTTP 连接。有关公开 TCP/UDP 服务的更多信息,请参阅Ingress-Nginx Controller 官方文档 → 公开 TCP 和 UDP 服务。
-
创建包含以下内容的
configmap
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx data: 9000: "default/standalone-admin:7687"
-
应用
configmap
kubectl apply -f /path/to/your/nginx-tcp.yaml
-
更新 Ingress 控制器 LoadBalancer 服务以使用端口 :9000
-
获取 Ingress 控制器的 IP 地址
kubectl get svc -n ingress-nginx
-
打开 Ingress 控制器服务进行编辑
kubectl edit svc ingress-nginx-controller -n ingress-nginx -o yaml
-
将以下行添加到
spec.ports
部分- name: proxied-tcp-9000 port: 9000 protocol: TCP targetPort: 9000
-
保存更改并退出编辑器。
-
-
更新 Ingress 控制器部署以使用
configmap
-
打开 Ingress 控制器部署进行编辑
kubectl edit deployment ingress-nginx-controller -n ingress-nginx
-
将以下行添加到
spec.template.spec.containers.args
部分- --tcp-services-configmap=ingress-nginx/tcp-services
-
保存更改并退出编辑器。
-
通过运行
kubectl get all -n ingress-nginx
验证更改是否已应用。您应该在 Ingress 控制器部署中看到新的端口 :9000。
-
-
获取 Ingress 控制器的 IP 地址
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE rp-reverseproxy-igress nginx * 34.89.91.112 80 2m
-
使用 Cypher Shell 连接到 Neo4j 数据库
cypher-shell -a neo4j://34.89.91.112:9000 -u neo4j -p <password>