[英]Kubernetes service with external name not discoverable
我正在将 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
但没有成功。
这个设置有什么问题?
编辑:
db.external-service.com
后面的普通 ip 地址,它就可以工作kubectl exec my-pod-xxx -- ping db.external-service.com
有正确的 ip 地址事实证明,Kubernetes 工作节点不在数据库的允许列表中。 所以连接超时。
似乎您的 Pod 无法将 DNS db.external-service.com 解析为 IP 地址。
在 Kubernetes 中,Pod 使用 CoreDNS Pod 将服务名称解析为服务 IP 地址。 https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/
如果 CoreDNS Pod 无法将 DNS 解析为 IP 地址,则应该将请求重定向到在 Host/VM/Node resolv.conf 中配置的名称服务器,因为 CoreDNS Pod 的 dnsPolicy 是默认值。 https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy
那么你的 Pod 的 dnsPolicy 是什么?
您能否将 DNS db.external-service.com 从运行 CoreDNS Pod 的主机/VM/节点解析为 IP 地址?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.