访问 Neo4j
在 Kubernetes 上运行的 Neo4j 可通过 Kubernetes 服务访问。Neo4j 具有许多用于不同应用程序和操作目的的不同接口。有关更多详细信息,请参阅 Neo4j 端口。
支持的 Kubernetes 服务
Neo4j 支持以下 Kubernetes 服务
-
默认服务 — 用于应用程序
neo4j
/bolt
和http(s)
连接到 Neo4j 数据库的 ClusterIP 服务,源自 Kubernetes 集群内部。 -
管理员服务 — 包含所有 Neo4j 端口以进行 Kubernetes 内部 Neo4j 管理员连接的“无头”(仅限 DNS)服务。它仅在 Kubernetes 集群内部可用,并且应保护对它的访问。管理员服务可用于 Neo4j DBMS 管理、执行备份和收集指标。
-
内部服务 — 包含 Neo4j 集群所需所有 Neo4j 端口的“无头”(仅限 DNS)内部服务。
-
Neo4j — 用于源自 Kubernetes 集群外部的应用程序
neo4j
/bolt
和http(s)
连接的 LoadBalancer 服务。
以下是每个 Neo4j 接口和部署类型的默认 Kubernetes 服务列表
Neo4j 接口 | 默认端口 | 默认服务 | 管理员服务 | Neo4j 服务 |
---|---|---|---|---|
Bolt( |
|
是 |
是* |
是 |
Neo4j 浏览器 HTTP |
|
是 |
是* |
是 |
Neo4j 浏览器 HTTPS |
|
是 |
是* |
是 |
Neo4j Cypher HTTP API |
|
是 |
是* |
是 |
Neo4j Cypher HTTPS API |
|
是 |
是* |
是 |
Neo4j 备份 |
|
否 |
是 |
否 但可配置 |
石墨监控 |
|
否 |
是 |
否 |
普罗米修斯指标 |
|
否 |
是 |
否 |
Java 管理扩展 (JMX) |
|
否 |
否 但可配置 |
否 |
Neo4j 接口 | 默认端口 | 默认服务 | 管理员服务 | 内部服务 | Neo4j 服务 |
---|---|---|---|---|---|
Bolt( |
|
是 |
是* |
是 |
是 |
Neo4j 浏览器 HTTP |
|
是 |
是* |
是 |
是 |
Neo4j 浏览器 HTTPS |
|
是 |
是* |
是 |
是 |
Neo4j Cypher HTTP API |
|
是 |
是* |
是 |
是 |
Neo4j Cypher HTTPS API |
|
是 |
是* |
是 |
是 |
Neo4j 备份 |
|
否 |
是 |
是 |
否 |
石墨监控 |
|
否 |
否 但可配置 |
否 但可配置 |
否 |
普罗米修斯指标 |
|
否 |
否 但可配置 |
否 但可配置 |
否 |
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 图表安装的 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 图表提供了一个 LoadBalancer
服务,用于从 Kubernetes 集群外部访问 Neo4j。安装 Neo4j Helm 图表时,默认情况下会创建 LoadBalancer
服务。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,则可以通过设置 externalService.loadBalancerIP
在 Neo4j Helm 发行版中配置 LoadBalancer
的 IP 地址。如果未显式设置静态 IP 地址,则 Kubernetes 不保证动态分配的 IP 地址不会更改。
在互联网上公开 Neo4j 数据库时,建议使用静态 IP 并为公开的服务配置 SSL。有关更多信息,请参阅 配置 SSL。
如果具有静态 IP,则可以将 DNS 与其关联并获取受信任的证书。
可以通过更改 services.neo4j
对象在 Helm 发行版中配置在外部服务上公开的端口。默认值为
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 图表创建各种 Kubernetes 资源。其中一些可以通过向 helm 部署值文件添加额外的配置来进行自定义。
以下是支持的 K8s 资源自定义列表
自定义 | values.yaml 字段 | 类型 |
---|---|---|
为 Neo4j Pod 设置 pod 安全上下文 |
|
|
向服务添加注释 |
|
|
|
无头(DNS)服务的注释对象。 |
|
|
|
自定义 | values.yaml 字段 | 类型 |
---|---|---|
为 Neo4j Pod 设置 pod 安全上下文 |
|
|
向服务添加注释 |
|
|
|
无头(DNS)服务的注释对象。 |
|
|
内部服务的注释对象。 |
|
向负载均衡器服务添加注释 |
|
|
访问 Neo4j 以进行 DBMS 管理和监控
Neo4j Helm 图表创建管理员服务以用于 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 接口
-
Neo4j Bolt,用于通过 Cypher 命令进行 Neo4j 管理。
-
Neo4j Backup,用于执行数据库备份。
-
Graphite,用于指标收集。
-
Prometheus,用于指标收集。
-
Java Management Extensions (JMX),用于指标收集和 JVM 管理。