从 Kubernetes 外部访问 Neo4j 集群

默认情况下,从 Kubernetes 外部访问 Neo4j 集群时使用服务器端路由。

使用负载均衡器和 Cypher Shell 访问 Neo4j 集群

创建 LoadBalancer 服务以从 Kubernetes 外部访问 Neo4j 集群。

  1. 使用安装时所用的 neo4j.name 检查 LoadBalancer 服务是否可用

    export NEO4J_NAME=my-cluster
    kubectl get service ${NEO4J_NAME}-lb-neo4j
    NAME                  TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                                        AGE
    my-cluster-lb-neo4j   LoadBalancer   10.28.12.119   82.21.42.42      7474:32169/TCP,7473:32145/TCP,7687:32624/TCP   2m1s
  2. 使用 kubectl describe service 查看服务详情

    kubectl describe service ${NEO4J_NAME}-lb-neo4j
    Name:                     my-cluster-lb-neo4j
    Namespace:                neo4j
    Labels:                   app=my-cluster
                              app.kubernetes.io/managed-by=Helm
                              helm.neo4j.com/neo4j.name=my-cluster
                              helm.neo4j.com/service=neo4j
    Annotations:              cloud.google.com/neg: {"ingress":true}
                              meta.helm.sh/release-name: server-1
                              meta.helm.sh/release-namespace: neo4j
    Selector:                 app=my-cluster,helm.neo4j.com/clustering=true,helm.neo4j.com/neo4j.loadbalancer=include
    Type:                     LoadBalancer
    IP Family Policy:         SingleStack
    IP Families:              IPv4
    IP:                       10.28.12.119
    IPs:                      10.28.12.119
    LoadBalancer Ingress:     82.21.42.42
    Port:                     http  7474/TCP
    TargetPort:               7474/TCP
    NodePort:                 http  32169/TCP
    Endpoints:                10.24.0.131:7474,10.24.1.3:7474,10.24.1.67:7474
    Port:                     https  7473/TCP
    TargetPort:               7473/TCP
    NodePort:                 https  32145/TCP
    Endpoints:                10.24.0.131:7473,10.24.1.3:7473,10.24.1.67:7473
    Port:                     tcp-bolt  7687/TCP
    TargetPort:               7687/TCP
    NodePort:                 tcp-bolt  32624/TCP
    Endpoints:                10.24.0.131:7687,10.24.1.3:7687,10.24.1.67:7687
    Session Affinity:         None
    External Traffic Policy:  Local
    HealthCheck NodePort:     30621
    Events:
      Type    Reason                Age    From                Message
      ----    ------                ----   ----                -------
      Normal  EnsuringLoadBalancer  3m11s  service-controller  Ensuring load balancer
      Normal  EnsuredLoadBalancer   2m36s  service-controller  Ensured load balancer

    负载均衡器服务可以将请求发送到集群中的所有服务器。

  3. 从本地机器运行 cypher-shell 并连接到 LoadBalancer Ingress 地址(示例中为 82.21.42.42

    ./cypher-shell -a neo4j://82.21.42.42 -u neo4j -p my-password
    If you don't see a command prompt, try pressing enter.
    Connected to Neo4j using Bolt protocol version 2026.03 at neo4j://82.21.42.42:7687 as user neo4j.
    Type :help for a list of available commands or :exit to exit the shell.
    Note that Cypher queries must end with a semicolon.
  4. 运行 Cypher 命令 SHOW DATABASES 以验证所有集群成员均已上线

    SHOW DATABASES;
    +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | name     | type       | aliases | access       | address                                 | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
    +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | "neo4j"  | "standard" | []      | "read-write" | "server-3.neo4j.svc.cluster.local:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "neo4j"  | "standard" | []      | "read-write" | "server-2.neo4j.svc.cluster.local:7687" | "primary" | FALSE  | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "neo4j"  | "standard" | []      | "read-write" | "server-1.neo4j.svc.cluster.local:7687" | "primary" | FALSE  | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "system" | "system"   | []      | "read-write" | "server-3.neo4j.svc.cluster.local:7687" | "primary" | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    | "system" | "system"   | []      | "read-write" | "server-2.neo4j.svc.cluster.local:7687" | "primary" | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    | "system" | "system"   | []      | "read-write" | "server-1.neo4j.svc.cluster.local:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    
    6 rows
    ready to start consuming query after 110 ms, results consumed after another 109 ms
  5. 运行 Cypher 命令 SHOW SERVERS 以验证所有集群成员均已启用

    SHOW SERVERS;
    +----------------------------------------------------------------------------------------------------------------------------------+
    | name                                   | address                                 | state     | health      | hosting             |
    +----------------------------------------------------------------------------------------------------------------------------------+
    | "ad5c3cf1-541a-44f8-a19b-28bc36030914" | "server-3.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "cbdebc59-64c2-4542-a041-24a1f051e64f" | "server-1.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "f37e98a7-15ec-4dc4-a6bf-df9e418a7488" | "server-2.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    +----------------------------------------------------------------------------------------------------------------------------------+
    
    3 rows
    ready to start consuming query after 27 ms, results consumed after another 363 ms

    您可以看到节点正在通告其内部地址,但由于您在连接时未使用内部地址,因此您使用的是服务器端路由。

使用负载均衡器和 Neo4j Browser 访问 Neo4j 集群

  1. 打开 Web 浏览器并访问 LoadBalancer Ingress 地址和端口 7474,在此示例中为 http://82.21.42.42:7474/browser

  2. 连接后,在 Browser 编辑器中使用 :sysinfo 验证所有数据库是否已启动并运行

    :sysinfo

    helm sysinfo