2017-07-19 64 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, 
});