访问 Neo4j

运行在 Kubernetes 上的 Neo4j 可通过 Kubernetes 服务访问。Neo4j 拥有多种不同的接口,用于不同的应用程序和操作目的。欲了解更多详情,请参见 Neo4j 端口

支持的 Kubernetes 服务

Neo4j 支持以下 Kubernetes 服务

  • 默认服务 (Default Service) — 一个 ClusterIP 服务,用于从 Kubernetes 集群内部连接到 Neo4j 数据库的应用程序 neo4j/bolthttp(s) 连接。

  • 管理服务 (Admin Service) — 一个“无头”(仅 DNS)服务,包含所有 Neo4j 端口,用于 Kubernetes 内部对 Neo4j 的管理连接。它仅在 Kubernetes 集群内部可用,并且应对其访问进行保护。管理服务可用于 Neo4j DBMS 管理、执行备份和收集指标。

  • 内部服务 (Internal Service) — 一个“无头”(仅 DNS)内部服务,包含 Neo4j 集群所需的所有 Neo4j 端口。

  • Neo4j — 一个 LoadBalancer 服务,用于从 Kubernetes 集群外部连接的应用程序 neo4j/bolthttp(s) 连接。

以下是每种 Neo4j 接口和部署类型的默认 Kubernetes 服务列表

Neo4j 接口 默认端口 默认服务 管理服务 Neo4j 服务

Bolt (neo4j://bolt:// 协议)

7687

*

Neo4j Browser HTTP

7474

*

Neo4j Browser HTTPS

7473

*

Neo4j Cypher HTTP API

7474

*

Neo4j Cypher HTTPS API

7473

*

Neo4j 备份

6362

,但可配置

Graphite 监控

2003

Prometheus 指标

2004

Java 管理扩展 (JMX)

3637

,但可配置

Neo4j 接口 默认端口 默认服务 管理服务 内部服务 Neo4j 服务

Bolt (neo4j://bolt:// 协议)

7687

*

Neo4j Browser HTTP

7474

*

Neo4j Browser HTTPS

7473

*

Neo4j Cypher HTTP API

7474

*

Neo4j Cypher HTTPS API

7473

*

Neo4j 备份

6362

Graphite 监控

2003

,但可配置

,但可配置

Prometheus 指标

2004

,但可配置

,但可配置

Java 管理扩展 (JMX)

3637

,但可配置

,但可配置

集群发现管理

5000

集群事务

6000

集群 RAFT

7000

集群路由连接器

7688

*管理服务绕过健康检查。这使得它可以在数据库处于不健康状态时用于管理目的连接。但是,您不得将其用于需要数据库处于健康状态的应用程序连接。

从 Kubernetes 内部访问 Neo4j 的应用程序

使用 DNS 访问 Neo4j

要从同一 Kubernetes 集群中的应用程序访问 Neo4j,请使用 Neo4j 服务 DNS 地址 <release-name>.<namespace>.svc.<cluster domain>

默认集群域是 cluster.local,默认命名空间是 default。通常,Neo4j 服务 DNS 地址是 <release-name>.default.svc.cluster.local

例如,如果在 default 命名空间中使用发布名称 my-release,则集群的 DNS 地址将是 my-release.default.svc.cluster.local,用于 Neo4j 驱动程序的 bolt 地址将是 neo4j://my-release.default.svc.cluster.local:7687

为了允许在 Kubernetes 内部运行的应用程序访问 Neo4j 集群,您还可以使用通过 neo4j/neo4j-cluster-headless-service Helm chart 安装的 Neo4j 无头服务。有关更多信息和详细示例,请参见 使用无头服务访问 Neo4j 集群

使用 K8s 标签选择器访问 Neo4j

或者,可以使用 Kubernetes 服务发现通过标签选择器来定位 Kubernetes 中的 Neo4j 服务(默认)

helm.neo4j.com/service=default/admin/internals,helm.neo4j.com/instance=<release-name>

例如

# install neo4j
helm install "my-release" …
# lookup installed service
kubectl get service -l helm.neo4j.com/service=default,helm.neo4j.com/instance=my-release
helm.neo4j.com/service=neo4j,helm.neo4j.com/instance=<release-name>

以下是如何查找已安装服务的示例

# Neo4j service:

kubectl get service -l helm.neo4j.com/service=default,helm.neo4j.com/instance=my-release

# Admin service:

kubectl get service -l helm.neo4j.com/service=admin,helm.neo4j.com/instance=my-release

# internals service:

kubectl get service -l helm.neo4j.com/service=internals,helm.neo4j.com/instance=my-release

从 Kubernetes 外部访问 Neo4j 的应用程序

要从 Kubernetes 集群外部的应用程序访问 Neo4j,您可以使用 LoadBalancer 服务或 Ingress 控制器。

使用 LoadBalancer 访问 Neo4j

Neo4j Helm chart 提供了一个 LoadBalancer 服务,用于从 Kubernetes 集群外部访问 Neo4j。LoadBalancer 服务在安装 Neo4j Helm chart 时默认创建。LoadBalancer 服务默认配置为公开 Neo4j 端口 7687747474736362(备份)。

可以使用 kubectl 找到 LoadBalancer 的外部 IP 地址

  • 服务名称基于 neo4j.name 的值 — <my-neo4j-name>-lb-neo4j

    kubectl get service `<my-neo4j-name>-lb-neo4j` -ocustom-columns=ip:.status.loadBalancer.ingress[].ip
  • 使用标签选择器

    kubectl get service -l helm.neo4j.com/service=neo4j,helm.neo4j.com/name=<release-name> -ocustom-columns=ip:.status.loadBalancer.ingress[].ip

如果您使用的 Kubernetes LoadBalancer 实现支持设置静态 IP,则可以在 Neo4j Helm 发布中通过设置 externalService.loadBalancerIP 来配置 LoadBalancer 的 IP 地址。如果未显式设置静态 IP 地址,则 Kubernetes 不保证动态分配的 IP 地址不会更改。

在互联网上公开 Neo4j 数据库时,建议使用静态 IP 并在公开的服务上配置 SSL。有关更多信息,请参见 配置 SSL

如果您有静态 IP,可以将其与 DNS 关联并获取受信任的证书。

可以在 Helm 发布中通过更改 services.neo4j 对象来配置外部服务上公开的端口。默认值是

services:
  neo4j:
     annotations: { }
     loadBalancerIP: NULL
     ports:
       http:
         enabled: true
         # uncomment to publish http on port 80 (neo4j default is 7474)
         # port: 80
         # targetPort: 7474
         # name: http
       https:
         enabled: true
        # uncomment to publish http on port 443 (neo4j default is 7473)
        # port: 443
        # targetPort: 7473
        # name: https
       bolt:
         enabled: true
        # Uncomment to explicitly specify the port to publish Neo4j Bolt (7687 is the default)
        # port: 7687
        # targetPort: 7687
        # name: tcp-bolt
       backup:
         enabled: false
        # Uncomment to explicitly specify the port to publish Neo4j Backup (6362 is the default)
        # port: 6362
        # targetPort: 6362
        # name: tcp-backup

禁用/启用 services.neo4j 对象上的端口会将其从负载均衡器中移除,但不会影响其在 Neo4j 中是否禁用/启用。

除非在 Neo4j 配置中强制执行 SSL-with-client-auth,否则备份是不安全的。

有关详细示例,请参见 从 Kubernetes 外部访问 Neo4j 集群

自定义 Kubernetes 资源

Neo4j Helm chart 创建各种 Kubernetes 资源。其中一些可以通过向 helm 部署值文件添加额外配置来定制。

以下是支持的 K8s 资源自定义列表

自定义 values.yaml 字段 类型

为 Neo4j Pod 设置 pod securityContext

securityContext

PodSecurityContext

向服务添加注解

services.default.annotations

ClusterIP 服务的注解对象。

services.admin.annotations

无头 (DNS) 服务的注解对象。

services.neo4j.annotations

LoadBalancer 服务的注解对象。

自定义 values.yaml 字段 类型

为 Neo4j Pod 设置 pod securityContext

securityContext

PodSecurityContext

向服务添加注解

services.default.annotations

ClusterIP 服务的注解对象。

services.admin.annotations

无头 (DNS) 服务的注解对象。

services.internal.annotations

内部服务的注解对象。

向负载均衡器服务添加注解

services.neo4j.annotations

LoadBalancer 服务的注解对象。

访问 Neo4j 以进行 DBMS 管理和监控

Neo4j Helm chart 创建管理服务,用于 Neo4j 管理。管理服务在 Kubernetes 中是一个“无头”服务,不依赖于 Neo4j 健康检查。因此,即使 Neo4j 不健康,它也允许连接到 Neo4j。通常,这对于应用程序来说不是理想的,但对于管理和调试可能很有用。

使用 DNS 访问 Neo4j

要在 Kubernetes 内部访问管理服务,请使用 DNS 地址 <release-name>-admin.<namespace>.svc.<cluster domain>

例如,如果在 default 命名空间中使用发布名称 my-release,则集群的 DNS 地址将是 my-release-admin.default.svc.cluster.local

管理服务可用于访问一系列 Neo4j 接口

  • 用于通过 Cypher 命令进行 Neo4j 管理的 Neo4j Bolt。

  • 用于进行数据库备份的 Neo4j Backup。

  • 用于收集指标的 Graphite。

  • 用于收集指标的 Prometheus。

  • 用于收集指标和 JVM 管理的 Java 管理扩展 (JMX)。

使用 kubectl 访问 Neo4j 进行故障排除

要获取交互式 cypher-shell 控制台进行故障排除,请使用此命令

kubectl run -it --rm --image neo4j:2025.05.0 cypher-shell -- cypher-shell -a bolt://my-release-admin.default.svc.cluster.local

通常,neo4j:// 协议用于连接 Neo4j。但对于故障排除,使用直接的 bolt:// 协议,因为它允许在某些 neo4j:// 连接无法成功的情况下建立连接。

© . All rights reserved.