通过Nebular Operator连接Nebula Graph数据库

使用Nebula Operator创建Nebula Graph集群后,用户可在Nebula Graph集群内部访问Nebula Graph数据库,也可在集群外访问Nebula Graph数据库。

前提条件

使用Nebula Operator创建Nebula Graph集群。具体步骤参考使用Kubectl部署Nebula Graph集群或者使用Helm部署Nebula Graph集群

在Nebula Graph集群内连接Nebula Graph数据库

当使用Nebula Operator创建Nebula Graph集群后,Nebula Operator会自动在同一命名空间下,创建名为<cluster-name>-graphd-svc、类型为ClusterIP的Service。通过该Service的IP和数据库的端口号,用户可连接Nebula Graph数据库。

  1. 查看Service,命令如下:

    1. $ kubectl get service -l app.kubernetes.io/cluster=<nebula> #<nebula>为变量值,请用实际集群名称替换。
    2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    3. nebula-graphd-svc ClusterIP 10.98.213.34 <none> 9669/TCP,19669/TCP,19670/TCP 23h
    4. nebula-metad-headless ClusterIP None <none> 9559/TCP,19559/TCP,19560/TCP 23h
    5. nebula-storaged-headless ClusterIP None <none> 9779/TCP,19779/TCP,19780/TCP,9778/TCP 23h

    ClusterIP类型的Service只允许在集群内部访问容器应用。更多信息,请参考ClusterIP

  2. 使用上述<cluster-name>-graphd-svc Service的IP连接Nebula Graph数据库:

    1. kubectl run -ti --image vesoft/nebula-console:v2.5.0 --restart=Never -- <nebula-console> -addr <10.98.213.34> -port 9669 -u <root> -p <vesoft>
    • --image:为连接Nebula Graph的工具Nebula Console的镜像。
    • <nebula-console>:自定义的Pod名称。
    • -addr:连接Graphd服务的IP地址,即ClusterIP类型的Service IP地址。
    • -port:连接Graphd服务的端口。默认端口为9669。
    • -u:Nebula Graph账号的用户名。未启用身份认证时,可以使用任意已存在的用户名(默认为root)。
    • -p:用户名对应的密码。未启用身份认证时,密码可以填写任意字符。

    如果返回以下内容,说明成功连接数据库:

    1. If you don't see a command prompt, try pressing enter.
    2. (root@nebula) [(none)]>

用户还可以使用完全限定域名(FQDN)连接数据库,域名格式为<cluster-name>-graphd.<cluster-namespace>.svc.<CLUSTER_DOMAIN>

  1. kubectl run -ti --image vesoft/nebula-console:v2.5.0 --restart=Never -- <nebula-console> -addr <cluster_name>-graphd-svc.default.svc.cluster.local -port 9669 -u root -p vesoft

CLUSTER_DOMAIN的默认值为cluster.local

在Nebula Graph集群外部连接Nebula Graph数据库

用户可创建NodePort类型的Service,通过节点IP和暴露的节点端口,从集群外部访问集群内部的服务。用户也可以使用云厂商提供的负载均衡服务,设置Service的类型为LoadBalancer

NodePort类型的Service通过标签选择器spec.selector将前端的请求转发到带有标签app.kubernetes.io/cluster: <cluster-name>app.kubernetes.io/component: graphd的Graphd pod中。

操作步骤如下:

  1. 创建名为graphd-nodeport-service.yaml的文件。YAML文件内容如下:

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. labels:
    5. app.kubernetes.io/cluster: nebula
    6. app.kubernetes.io/component: graphd
    7. app.kubernetes.io/managed-by: nebula-operator
    8. app.kubernetes.io/name: nebula-graph
    9. name: nebula-graphd-svc-nodeport
    10. namespace: default
    11. spec:
    12. externalTrafficPolicy: Local
    13. ports:
    14. - name: thrift
    15. port: 9669
    16. protocol: TCP
    17. targetPort: 9669
    18. - name: http
    19. port: 19669
    20. protocol: TCP
    21. targetPort: 19669
    22. selector:
    23. app.kubernetes.io/cluster: nebula
    24. app.kubernetes.io/component: graphd
    25. app.kubernetes.io/managed-by: nebula-operator
    26. app.kubernetes.io/name: nebula-graph
    27. type: NodePort
    • Nebula Graph默认使用9669端口为客户端提供服务。19669为Graph服务端口号。
    • targetPort的值为映射至Pod的端口,可自定义。
  2. 执行以下命令使Service服务在集群中生效。

    1. kubectl create -f graphd-nodeport-service.yaml
  3. 查看Service中Nebula Graph映射至集群节点的端口。

    1. kubectl get services

    返回:

    1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    2. nebula-graphd-svc ClusterIP 10.98.213.34 <none> 9669/TCP,19669/TCP,19670/TCP 23h
    3. nebula-graphd-svc-nodeport NodePort 10.107.153.129 <none> 9669:32236/TCP,19669:31674/TCP,19670:31057/TCP 24h
    4. nebula-metad-headless ClusterIP None <none> 9559/TCP,19559/TCP,19560/TCP 23h
    5. nebula-storaged-headless ClusterIP None <none> 9779/TCP,19779/TCP,19780/TCP,9778/TCP 23h

    NodePort类型的Service中,映射至集群节点的端口为32236

  4. 使用节点IP和上述映射的节点端口连接Nebula Graph。

    1. kubectl run -ti --image vesoft/nebula-console:v2.5.0 --restart=Never -- <nebula-console> -addr <node_ip> -port <node_port> -u root -p vesoft

    示例如下:

    1. [root@k8s4 ~]# kubectl run -ti --image vesoft/nebula-console:v2.5.0 --restart=Never -- nebula-console2 -addr 192.168.8.24 -port 32236 -u root -p vesoft
    2. If you don't see a command prompt, try pressing enter.
    3. (root@nebula) [(none)]>
    • --image:为连接Nebula Graph的工具Nebula Console的镜像。
    • <nebula-console>:自定义的Pod名称。本示例为nebula-console2
    • -addr:Nebula Graph集群中任一节点IP地址。本示例为192.168.8.24
    • -port:Nebula Graph映射至节点的端口。本示例为32236
    • -u:Nebula Graph账号的用户名。未启用身份认证时,可以使用任意已存在的用户名(默认为root)。
    • -p:用户名对应的密码。未启用身份认证时,密码可以填写任意字符。

最后更新: September 28, 2021