2017-07-19 69 views
1

目前,我得到的节点无法连接到数据库的ECONNREFUSED。我不确定数据库主机应该在哪里结束。我应该使用localhost:7474,127.0.0.1:7474,0.0.0.0:7474,还是我应该使用一些主机,当我将Kubernetes豆荚吊起时,我可以以某种方式传入?例如像$(minikube ip) = 192.168.90.100:7474,但为我的数据库?是否有一个包含数据库主机的ENV,我应该从某个地方进行抽取?需要帮助连接节点与Kubernetes的Neo4j数据库

const neo4jDatabase = connect({ 
    server: 'http://<what goes here!?>:7474', 
    user: process.env.DB_USER, 
    pass: process.env.DB_PASS, 
}); 

我似乎已经变得与下面.yml CONFIGS运行荚,但我不知道如果Neo4j的一个是正确的。

NAME      READY  STATUS RESTARTS AGE 
neo4j-4166717986-8qbwq 1/1  Running 0   41m 
node-481322091-g27md  1/1  Running 0   11m 

node.yml

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: node 
spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: node 
     tier: backend 
     track: stable 
    spec: 
     containers: 
     - name: node 
      image: "myapp" 
      ports: 
      - name: nodeport 
       containerPort: 8080 
      env: 
      - name: DB_USER 
      valueFrom: 
       configMapKeyRef: 
       name: config 
       key: db_user 
      - name: DB_PASS 
      valueFrom: 
       configMapKeyRef: 
       name: config 
       key: db_pass 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: node 
spec: 
    selector: 
    app: node 
    tier: backend 
    ports: 
    - protocol: TCP 
     port: 80 
     targetPort: 
    type: LoadBalancer 

neo4j.yml

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: neo4j 
spec: 
    template: 
    metadata: 
     labels: 
     run: neo4j 
    spec: 
     containers: 
     - name: neo4j 
      image: "my-neo4j" 
      ports: 
      - containerPort: 7474 
--- 
apiVersion: v1 
kind: Service 
metadata: 
    name: neo4j 
    labels: 
    run: neo4j 
spec: 
    selector: 
    run: neo4j 
    ports: 
    - port: 7474 
     targetPort: 7474 
     protocol: TCP 
+0

我认为你必须打开端口7687公众,让您的节点驱动程序可以连接到Neo4j的,如果你使用的是官方的一个。 ..检查也https://github.com/mneedham/neo4j-kubernetes –

+0

哇,我只有1 .yaml文件Neo4j,但该GitHub项目有吨。我会给它一个镜头。 – kayla

回答

1

也许Kubernetes的鲜为人知的特点是,一些魔术环境变量注入的事实在跑步豆荚里。

在您的特殊情况下,pods对命名空间中的每个服务都有一个环境变量。格式如下:

<your service>_SERVICE_HOST 
<your service name>_SERVICE_PORT_EXPOSED_PORT 

可以验证这是通过连接到正在运行的吊舱kubectl exec -ti <your pod id> sh并发出命令printenv真实。

请注意,如果服务是在pod之后创建的,则必须删除与kubectl delete pod <your pod id>的pod以强制重新创建(并注入)环境变量。

在你的情况下,最终的代码看起来像这样:

const serviceHost = process.ENV.NEO4J_SERVICE_HOST; 
const servicePort = process.ENV.NEO4J_SERVICE_PORT_EXPOSED_PORT; 
const neo4jDatabase = connect({ 
    server: `http://${serviceHost}:${servicePort}`, 
    user: process.env.DB_USER, 
    pass: process.env.DB_PASS, 
});