访问 Neo4j
运行在 Kubernetes 上的 Neo4j 可通过 Kubernetes 服务访问。Neo4j 拥有多种不同的接口,用于不同的应用程序和操作目的。欲了解更多详情,请参见 Neo4j 端口。
支持的 Kubernetes 服务
Neo4j 支持以下 Kubernetes 服务
-
默认服务 (Default Service) — 一个 ClusterIP 服务,用于从 Kubernetes 集群内部连接到 Neo4j 数据库的应用程序
neo4j
/bolt
和http(s)
连接。 -
管理服务 (Admin Service) — 一个“无头”(仅 DNS)服务,包含所有 Neo4j 端口,用于 Kubernetes 内部对 Neo4j 的管理连接。它仅在 Kubernetes 集群内部可用,并且应对其访问进行保护。管理服务可用于 Neo4j DBMS 管理、执行备份和收集指标。
-
内部服务 (Internal Service) — 一个“无头”(仅 DNS)内部服务,包含 Neo4j 集群所需的所有 Neo4j 端口。
-
Neo4j — 一个 LoadBalancer 服务,用于从 Kubernetes 集群外部连接的应用程序
neo4j
/bolt
和http(s)
连接。
以下是每种 Neo4j 接口和部署类型的默认 Kubernetes 服务列表
Neo4j 接口 | 默认端口 | 默认服务 | 管理服务 | Neo4j 服务 |
---|---|---|---|---|
Bolt ( |
|
是 |
是* |
是 |
Neo4j Browser HTTP |
|
是 |
是* |
是 |
Neo4j Browser HTTPS |
|
是 |
是* |
是 |
Neo4j Cypher HTTP API |
|
是 |
是* |
是 |
Neo4j Cypher HTTPS API |
|
是 |
是* |
是 |
Neo4j 备份 |
|
否 |
是 |
否,但可配置 |
Graphite 监控 |
|
否 |
是 |
否 |
Prometheus 指标 |
|
否 |
是 |
否 |
Java 管理扩展 (JMX) |
|
否 |
否,但可配置 |
否 |
Neo4j 接口 | 默认端口 | 默认服务 | 管理服务 | 内部服务 | Neo4j 服务 |
---|---|---|---|---|---|
Bolt ( |
|
是 |
是* |
是 |
是 |
Neo4j Browser HTTP |
|
是 |
是* |
是 |
是 |
Neo4j Browser HTTPS |
|
是 |
是* |
是 |
是 |
Neo4j Cypher HTTP API |
|
是 |
是* |
是 |
是 |
Neo4j Cypher HTTPS API |
|
是 |
是* |
是 |
是 |
Neo4j 备份 |
|
否 |
是 |
是 |
否 |
Graphite 监控 |
|
否 |
否,但可配置 |
否,但可配置 |
否 |
Prometheus 指标 |
|
否 |
否,但可配置 |
否,但可配置 |
否 |
Java 管理扩展 (JMX) |
|
否 |
否,但可配置 |
否,但可配置 |
否 |
集群发现管理 |
|
否 |
否 |
是 |
否 |
集群事务 |
|
否 |
否 |
是 |
否 |
集群 RAFT |
|
否 |
否 |
是 |
否 |
集群路由连接器 |
|
否 |
否 |
是 |
否 |
*管理服务绕过健康检查。这使得它可以在数据库处于不健康状态时用于管理目的连接。但是,您不得将其用于需要数据库处于健康状态的应用程序连接。
从 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 端口 7687
、7474
、7473
和 6362
(备份)。
可以使用 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 |
|
|
向服务添加注解 |
|
|
|
无头 (DNS) 服务的注解对象。 |
|
|
|
自定义 | values.yaml 字段 | 类型 |
---|---|---|
为 Neo4j Pod 设置 pod securityContext |
|
|
向服务添加注解 |
|
|
|
无头 (DNS) 服务的注解对象。 |
|
|
内部服务的注解对象。 |
|
向负载均衡器服务添加注解 |
|
|
访问 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)。