【问题标题】:Kubernetes service with external name not discoverable无法发现外部名称的 Kubernetes 服务
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    【讨论】:

    • 我已经更新了帖子来回答你的问题。
    • 谢谢。 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 的输出
    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2019-01-06
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多