【发布时间】:2021-06-17 08:49:27
【问题描述】:
我正在将 nodejs 应用程序部署到 kubernetes 集群中。此应用程序需要访问外部数据库,该数据库在db.external-service.com 下是公开的。为此,创建了 ExternalName 类型的服务。
kind: Service
apiVersion: v1
metadata:
name: postgres
spec:
type: ExternalName
externalName: db.external-service.com
在部署中,为应用程序提供数据库主机名的环境变量设置为此服务的名称。
env:
- name: DB_HOST
value: postgres
问题是当 nodejs 应用程序尝试连接到数据库时会出现此错误消息。
Error: getaddrinfo ENOTFOUND postgres
已经尝试使用完整的主机名postgres.<my-namespace>.svc.cluster.local,但没有成功。
这个设置有什么问题?
编辑:
- 如果我在我的 pod 配置中直接使用
db.external-service.com后面的普通 IP 地址,它就可以工作 - 如果我直接在我的 pod 配置中使用主机名,它不会起作用
- 我可以用我的一个 pod ping 主机名:
kubectl exec my-pod-xxx -- ping db.external-service.com有正确的 IP 地址
【问题讨论】:
-
你试过一个简单的容器和
psql吗?这个目的地有 TLS 吗? -
是的,我用一个虚拟吊舱试过这个。目的地有一个自签名证书。
-
那么,您是在连接时忽略证书还是将证书导入受信任列表中?在地址上使用简单的
curl(使用正确的端口),会发生什么? -
你能直接从 pod 访问 db.external-service.com 吗?
-
@vasiliAngapov 不,剂量也不起作用。
标签: kubernetes