无法发现外部名称为的Kubernetes服务
我正在将nodejs应用程序部署到kubernetes集群中。此应用程序需要访问在db.external service.com下公开的外部数据库。为此,将创建无法发现外部名称为的Kubernetes服务,kubernetes,Kubernetes,我正在将nodejs应用程序部署到kubernetes集群中。此应用程序需要访问在db.external service.com下公开的外部数据库。为此,将创建ExternalName类型的服务 kind: Service apiVersion: v1 metadata: name: postgres spec: type: ExternalName externalName: 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..svc.cluster.local
,但未成功
此设置可能有什么问题
编辑:
- 如果我在pod配置中直接使用
后面的普通ip地址,它就会工作db.external service.com
- 如果我在pod配置中直接使用主机名,它将不起作用
- 我可以用我的一个pod ping主机名:
具有正确的ip地址kubectl exec my pod xxx--ping db.external service.com
- 您的Pod似乎无法将DNS db.external-service.com解析为IP地址
- 在Kubernetes中,POD使用CoreDNS POD将服务名称解析为服务IP地址。
- 如果CoreDNS吊舱无法将DNS解析为IP地址,则应将请求重定向到主机/VM/Node resolv.conf中配置的名称服务器,因为CoreDNS吊舱的dnsPolicy是默认值
- 那么你的吊舱的政策是什么
- 您是否能够将DNS db.external-service.com解析为运行CoreDNS Pod的主机/VM/节点的IP地址
psql
?这个目的地有TLS?是的,我用一个假吊舱试过了。目标具有自签名证书。因此,您是在连接时忽略该证书,还是在受信任列表中导入该证书?通过地址上的一个简单的curl
(带有正确的端口),会发生什么?你能从pod直接访问db.external-service.com吗?@vasiliAngapov不,这也不起作用。我已经更新了帖子来回答你的问题。谢谢。kubectl exec my pod xxx--ping db.external-service.com正在工作这一事实意味着pod能够将DNS db.external-service.com解析为其ip。命令kubectl exec my pod xxx--ping postgres的输出是什么?另外,您能否提供命令kubectl exec my pod xxx的输出——cat/etc/resolv.conf