Virtual Network----ping 127.0.0.1迴環地址時延大於10ms問題處理記錄
問題現象
物理服務器ping 127.0.0.1 迴環地址 時延大於10ms,對比正常機器時延 0.01ms -----0.05ms
問題排查
1、初步檢查機器負載 和 網卡軟終端情況,未發現異常,sar 檢查網卡流量,流量未超過瓶頸;
檢查機器內核版本,也未發現有相關存在影響的內核配置;
2、排查發現iptables 規則疑似看到又大量重複規則:
查看機器iptables 規則,nat 表和 filter 表 內有近3W條iptables 規則;
iptables -t nat -L | wc -l
檢查相關對應規則,存在大量重複規則:
MASQUERADE all -- anywhere anywhere mark match 0x4000/0x4000 /* kubernetes service traffic requiring SNAT */ random-fully
DROP all -- anywhere anywhere mark match 0x8000/0x8000 /* kubernetes firewall for dropping marked packets */
ping 127.0.0.1 的時候會過 iptables 的,INPUT 和 OUTPUT 都會過,判斷時延變高是收到iptables 規則過多導致,並其中有很多重複規則;
由於大量的重複規則,請求流量會進行iptables 表規則 和 對應chain 規則匹配,重複規則都不會匹配到相關流量,導致請求流量會全量遍歷iptables規則,導致請求時延增大;
解決方案
檢查相關iptables 發現是 K8S 中 kube-proxy 會下發導致的,查看相關k8s 資源,確認是iptables 1.8 版本和k8s 存在不兼容的現象;
升級 iptables 版本後,問題解決;
規避方案可以iptables -F 清除重複規則,不過需要謹慎操作,避免影響實際流量轉發;
相關知識
Linux ping 127.0.0.1 迴環地址的時候,也是會經過iptables 規則的,可以添加相關規則驗證。如下圖:
# 添加選擇相關鏈 添加規則
iptables -t nat -A INPUT -p icmp -s 127.0.0.1 -j ACCEPT
iptables -t nat -A PREROUTING -p icmp -s 127.0.0.1 -j ACCEPT
iptables -t nat -A OUTPUT -p icmp -s 127.0.0.1 -j ACCEPT
# 可查看相關流量統計
iptables -t nat -vnL
訪問127.0.0.1 或其他目的端的請求時,都會進行iptables 的規則的匹配,匹配到規則後,進行執行,由於重複添加的規則無法匹配到相關請求流量場景,請求流量會遍歷所有的iptables 規則,故而導致時延增大;