Dns.GetHostEntry 在 Kubernetes pod 中执行时抛出“没有已知的主机”

问题描述 投票:0回答:1

我正在将 Windows 应用程序移植到 Azure Kubernetes,但在此调用时遇到问题:

Dns.GetHostEntry(Environment.MachineName);

实际上,当在 Pod 中执行时,它会抛出 SocketException

System.Net.Sockets.SocketException (0x80004005): No such host is known           
  at System.Net.Dns.GetAddrInfo(String name) 
  at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)                
  at System.Net.Dns.GetHostEntry(String hostNameOrAddress)

根据文档,dns 应该已经配置了默认的 CoreDns 插件,我还可以看到两个 pod 已启动并正在运行。

我应该怎么做才能让

Dns.GetHostEntry(Environment.MachineName)
在 pod 中正确执行?

我将此 https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#dns-windows 作为参考,但到目前为止什么也没得到。谢谢

kubernetes dns azure-aks coredns kube-dns
1个回答
0
投票

kube-dns.kube-system.svc.cluster.local can't find kubernetes.default: Non-existent domain
表示您的 Kubernetes 集群内可能存在 DNS 解析问题。检查一次 CoreDNS 配置

kubectl get pods -n kube-system -l k8s-app=kube-dns

enter image description here

Dns.GetHostEntry(Environment.MachineName)
方法调用尝试将机器(在本例中为运行的 pod)的主机名解析为 IP 地址。

在 Kubernetes 环境中,尤其是使用 CoreDNS 时,Pod 名称不会自动解析,除非您为它们设置了特定的 DNS 条目。这就是为什么您可能会遇到“No such host isknown”异常的原因。

另一个建议-

如果您的应用程序对主机名没有严格要求,您可以将其修改为直接使用 Pod 的 IP 地址。您可以从 Kubernetes 注入的环境变量中检索 pod 的 IP 地址。如果您从 pod 内运行命令并且尝试通过 C# 获取它,则可以使用 -

echo $POD_IP

var podIP = Environment.GetEnvironmentVariable("POD_IP");

要在 Kubernetes Pod 规范中设置

POD_IP
环境变量,您可以将以下内容添加到 pod 的容器规范中:

env:
- name: POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP

然后,一旦在 pod 规范中设置了此环境变量,pod 内的应用程序就可以正确执行

Environment.GetEnvironmentVariable("POD_IP")
来获取 pod 的 IP 地址。

类似问题

类似问题

© www.soinside.com 2019 - 2024. All rights reserved.