[英]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.