为什么网络状态显示 NHC007 错误?
虚拟私有云
排查网络健康检查错误 NHC007。
当您运行 ibmcloud oc cluster health issues --cluster <CLUSTER_ID> 检查群集的健康状况时,您会看到与下例类似的错误。
ID Component Severity Description
NHC007 Network Warning One or more DNS resolvers are not reachable from certain worker nodes.
如果检查问题的详细信息,就会看到哪个 DNS 解析器无法从哪个工作节点访问。
ibmcloud ks cluster health issue get --cluster <CLUSTER_ID> --issue NHC007
此警告表明,可能由于限制性策略或 IaaS-level 配置,来自某些工作节点的 DNS 流量被阻止。
检查您的 Calico HostEndpoint (HEP) 和 GlobalNetworkPolicy (GNP) 资源,以及您的 ACL、安全组和任何其他可能阻止出站 DNS 流量的网络设备。
-
查看 Calico HostEndpoint (HEP) 资源,列出 Calico HEP,并检查是否有任何 HEP 配置可能会错误地将限制应用于工作节点接口。
kubectl get hostendpoints.crd.projectcalico.org用于描述特定 HEP 的示例命令。
kubectl describe hostendpoints.crd.projectcalico.org <hep-name> -
审查 Calico GlobalNetworkPolicies (GNP),列出 GNP。
kubectl get globalnetworkpolicies.crd.projectcalico.org -
检查限制性 DNS 规则的具体策略。 重点关注影响端口 53 或适用于节点标签/选择器的
egress规则。kubectl get globalnetworkpolicies.crd.projectcalico.org <policy-name> -o yaml -
从调试 Pod 测试 DNS 访问,运行一个临时调试 Pod,并在其中将
nodeName的值替换为受影响的 worker 节点名称。 如果 DNS 在这里出现故障,可能是由于基础设施层面的阻塞造成的。kubectl run -i --tty debug \ --image=us.icr.io/armada-master/network-alpine:latest \ --restart=Never \ --overrides=' { "apiVersion": "v1", "spec": { "nodeName": "<node-name>" } }' -- sh -
在调试 pod 中运行以下命令。
nslookup ibm.comdig ibm.com -
检查访问控制列表(ACL)。
-
在控制台中,导航至 VPC > 访问控制列表,确保出站规则允许 UDP 端口 53 和 TCP 端口 53。
-
在 CLI 中运行以下命令检查 ACL。
ibmcloud is network-acls ``` ```sh {: pre} ibmcloud is network-acl <acl-id> ``` -
-
检查安全组规则,找到与工作节点相关的安全组,然后运行检查安全组设置。 确保没有阻止 DNS 流量的出站规则( UDP / TCP 端口 53)。
ibmcloud is security-group-rules <security-group-id> -
检查您的基础设施(网络设备、ACL 等),允许 UDP 和 TCP 端口 53 向外流量
-
如果在查看这些项目后 DNS 仍然无法访问,请联系支持人员。 打开 支持案例。 在案例详细信息中,请务必包含任何相关日志文件、错误信息或命令输出。