无法发现外部名称为的Kubernetes服务

无法发现外部名称为的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 在部署中,将为应用程序提供数据库主机名的环境变量设置为此

我正在将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..svc.cluster.local
,但未成功

此设置可能有什么问题

编辑:

  • 如果我在pod配置中直接使用
    db.external service.com
    后面的普通ip地址,它就会工作
  • 如果我在pod配置中直接使用主机名,它将不起作用
  • 我可以用我的一个pod ping主机名:
    kubectl exec my pod xxx--ping db.external service.com
    具有正确的ip地址
      • 您的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地址


      事实证明Kubernetes工作节点不在数据库的允许列表中。因此连接超时。

      您是否尝试使用简单容器和
      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