目前,我正在获取节点无法连接到数据库的ECONNREFUSED
。我不确定数据库主机应该在哪里结束。我应该使用localhost:7474
,127.0.0.1:7474
,0.0.0.0:7474
,还是我应该使用一些在我获取Kubernetes pod时生成的主机,我可以以某种方式传入?例如像$(minikube ip) = 192.168.90.100:7474
,但对于我的数据库?是否有包含我应该从某个地方拉出的数据库主机的ENV?
const neo4jDatabase = connect({
server: 'http://<what goes here!?>:7474',
user: process.env.DB_USER,
pass: process.env.DB_PASS,
});
我似乎已经使用下面的.yml配置运行了pod,但我不确定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 :(得分:1)
Kubernetes的一个鲜为人知的特性可能就是在运行的pod中注入了一些 magic 环境变量。
在您的特定情况下,pods为命名空间中的每个服务都有一个环境变量。格式如下:
<your service>_SERVICE_HOST
<your service name>_SERVICE_PORT_EXPOSED_PORT
您可以通过使用kubectl exec -ti <your pod id> sh
附加到正在运行的pod并发出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,
});