我正在将 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 作为参考,但到目前为止什么也没得到。谢谢
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
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 地址。
类似问题
类似问题