為什麼網路狀態顯示 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 解析器無法從哪些 Worker 節點存取。

ibmcloud ks cluster health issue get --cluster <CLUSTER_ID> --issue NHC007

此警告表示來自某些工作站節點的 DNS 流量被封鎖,可能是由於限制性政策或 IaaS-level 設定所致。

檢查您的 Calico HostEndpoint (HEP) 和 GlobalNetworkPolicy (GNP) 資源,以及您的 ACL、安全群組和任何其他可能封鎖 DNS 向外流量的網路裝置。

  1. 檢閱 Calico HostEndpoint (HEP) 資源,以列出 Calico HEP,並檢查是否有任何 HEP 設定可能會錯誤地將限制套用至您的工作節點介面。

    kubectl get hostendpoints.crd.projectcalico.org
    

    用於描述特定 HEP 的範例指令。

    kubectl describe hostendpoints.crd.projectcalico.org <hep-name>
    
  2. 檢閱 Calico GlobalNetworkPolicies (GNP),列出 GNP。

    kubectl get globalnetworkpolicies.crd.projectcalico.org
    
  3. 檢查限制性 DNS 規則的特定政策。 專注於影響連接埠 53 或適用於節點標籤/選擇器的 egress 規則。

    kubectl get globalnetworkpolicies.crd.projectcalico.org <policy-name> -o yaml
    
  4. 從一個除錯 Pod 測試 DNS 存取,並執行一個臨時除錯 Pod,在其中將 nodeName 的值設定為受影響的工作節點名稱。 如果 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
    
  5. 在 debug pod 內執行下列指令。

    nslookup ibm.com
    
    dig ibm.com
    
  6. 檢查 ACL(存取控制清單)。

    • 在主控台中,導覽到 VPC > 存取控制清單,並確保出站規則允許 UDP 連接埠 53 和 TCP 連接埠 53。

    • 在 CLI 中,執行下列指令檢查 ACL。

        ibmcloud is network-acls
        ```
        ```sh {: pre}
        ibmcloud is network-acl <acl-id>
        ```
    
  7. 檢查安全群組規則,找出與您的 Worker 節點相關的安全群組,然後執行以檢查安全群組設定。 確保沒有出站規則阻擋 DNS 流量 ( UDP / TCP 埠 53)。

    ibmcloud is security-group-rules <security-group-id>
    
  8. 檢閱您的基礎架構 (網路裝置、ACL 等),並允許 UDP 和 TCP 埠 53 向外流量

  9. 如果檢視這些項目後 DNS 仍然無法連線,請聯絡支援人員。 開啟 支援個案。 在案例詳細資訊中,請務必包含任何相關的記錄檔、錯誤訊息或指令輸出。