偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

K8S故障處理指南:網(wǎng)絡(luò)問(wèn)題排查思路

云計(jì)算 云原生
對(duì)于私有化環(huán)境,客戶的網(wǎng)絡(luò)架構(gòu),使用的云平臺(tái)存在著各種差異,K8S網(wǎng)絡(luò)可能會(huì)出現(xiàn)各種問(wèn)題,此文著重講解遇到此種問(wèn)題的排查方法和思路,不會(huì)涉及相關(guān)網(wǎng)絡(luò)底層技術(shù)描述。

1. 前言

對(duì)于私有化環(huán)境,客戶的網(wǎng)絡(luò)架構(gòu),使用的云平臺(tái)存在著各種差異,K8S網(wǎng)絡(luò)可能會(huì)出現(xiàn)各種問(wèn)題,此文著重講解遇到此種問(wèn)題的排查方法和思路,不會(huì)涉及相關(guān)網(wǎng)絡(luò)底層技術(shù)描述。

環(huán)境說(shuō)明

由于我們的k8s網(wǎng)絡(luò)組件默認(rèn)使用了flannel,這里描述的集群網(wǎng)絡(luò),均為flannel。但如果你使用了其他CNI組件,依然可以參考此文章的排查思路。

2. 異常場(chǎng)景

如何判斷k8s集群網(wǎng)絡(luò)出現(xiàn)異常?

  • 當(dāng)集群出現(xiàn)pods大量異常,日志顯示dns解析失敗,或者節(jié)點(diǎn)間網(wǎng)絡(luò)連接失敗等,即可判斷是集群網(wǎng)絡(luò)異常。

我們可以通過(guò)如下幾種方式進(jìn)行排查。當(dāng)任何一種方式的結(jié)果非預(yù)期內(nèi),則確認(rèn)k8s集群網(wǎng)絡(luò)出現(xiàn)異常。

排查步驟

  • 測(cè)試節(jié)點(diǎn)互ping

可以按照如下步驟操作:

查詢node名稱,podcidr,address并打印。

[root@localhost ~]# kubectl get nodes -o jsonpath='{range .items[*]}[name:{.metadata.name} , podCIDR:{.spec.podCIDR} , ipaddr:{.status.addresses[0].address}]{"\n"} {end}'
[name:10.28.87.59 , podCIDR:172.27.1.0/24 , ipaddr:10.28.87.59]
[name:10.28.87.60 , podCIDR:172.27.0.0/24 , ipaddr:10.28.87.60]
[name:10.28.87.61 , podCIDR:172.27.2.0/24 , ipaddr:10.28.87.61]
[name:10.28.87.62 , podCIDR:172.27.4.0/24 , ipaddr:10.28.87.62]
[name:10.28.87.63 , podCIDR:172.27.3.0/24 , ipaddr:10.28.87.63]
[name:10.28.87.64 , podCIDR:172.27.5.0/24 , ipaddr:10.28.87.64]

此命令需要在所有節(jié)點(diǎn)下執(zhí)行,可在部署機(jī)器上使用ansible調(diào)用使用上述命令獲取到的CIDR地址,進(jìn)行ping操作,seq根據(jù)節(jié)點(diǎn)數(shù)量進(jìn)行設(shè)置。

從上面結(jié)果可以看到共6個(gè)K8S節(jié)點(diǎn),子網(wǎng)分別是172.27.0-172.27.5子網(wǎng)段。

使用下邊shell腳本測(cè)試pod子網(wǎng),通的話打印up。

[root@localhost ~]# for ip in $(seq 0 5);do ping -c2 -W1 -q 172.27.$ip.1 2>1 &>/dev/null && echo "172.27.$ip.1 up" || echo "172.27.$ip.1 down";done
172.27.0.1 up
172.27.1.1 up
172.27.2.1 up
172.27.3.1 up
172.27.4.1 up
172.27.5.1 up

非預(yù)期結(jié)果: 出現(xiàn)某個(gè)節(jié)點(diǎn)固定的ping異常,即認(rèn)為對(duì)應(yīng)節(jié)點(diǎn)間vxlan通信異常,檢查對(duì)應(yīng)節(jié)點(diǎn)的網(wǎng)絡(luò)即可。

  • tcp,udp查詢

需要在所有節(jié)點(diǎn)上執(zhí)行,可在一臺(tái)機(jī)器上使用ansible調(diào)用。

ping操作屬于三層操作,由于某些環(huán)境會(huì)禁ping,因此我們可以使用如下命令進(jìn)行確認(rèn)。

使用http請(qǐng)求訪問(wèn)coredns metrics接口,狀態(tài)碼為200時(shí)正常,狀態(tài)碼000代表網(wǎng)絡(luò)異常不通。

[root@CentOS76 ~]# kubectl get pods -n kube-system -o wide | grep coredns | awk '{print $6}' | xargs -i  curl --connect-timeout 2 -o /dev/null -s -w "%{http_code}\n" http://{}:9153/metrics
200
200
200
200
200
200

使用dns查詢kubernetes.default地址。有返回則代表正常。

[root@localhost ~]# kubectl get pods -n kube-system -o wide | grep coredns | awk '{print $6}' | xargs -l nslookup -type=a kubernetes.default.svc.cluster.local
Server:         172.27.2.23
Address:        172.27.2.23#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.1.131
Address:        172.27.1.131#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.3.57
Address:        172.27.3.57#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.0.29
Address:        172.27.0.29#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.5.53
Address:        172.27.5.53#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.4.65
Address:        172.27.4.65#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------

非預(yù)期結(jié)果:dns查詢報(bào)connection timed out; no servers could be reached, curl報(bào)000,都代表網(wǎng)絡(luò)可能存在異常。

3. 異常場(chǎng)景

當(dāng)我們通過(guò)上述方式,確認(rèn)集群節(jié)點(diǎn)存在異常時(shí),可以使用如下思路進(jìn)行逐一排查。

  • ip_forward內(nèi)核被重置為0
  • flannel通信異常
  • 啟用了firewalld防火墻
  • 啟用了安全軟件
  • ip_forward

名詞解釋:ip_forward代表了路由轉(zhuǎn)發(fā)特性,為0時(shí)不開(kāi)啟,設(shè)置為1時(shí)代表啟用。由于vxlan的跨三層特性, 集群節(jié)點(diǎn)需要轉(zhuǎn)發(fā)目標(biāo)主機(jī)非自己的數(shù)據(jù)包。
影響范圍: 如果此值設(shè)為0,會(huì)導(dǎo)致跨節(jié)點(diǎn)通信異常。

出現(xiàn)原因:在部署時(shí),會(huì)向/etc/sysctl.conf里邊添加net.ipv4.ip_forward=1,來(lái)保證永久生效。

問(wèn)題定位:出現(xiàn)在集群重啟后,發(fā)現(xiàn)pods異常,網(wǎng)絡(luò)不通. 通過(guò)tcmdump抓包發(fā)現(xiàn)flannel流量正常。

處理方式

查詢本機(jī)內(nèi)核參數(shù), 在所有節(jié)點(diǎn)上執(zhí)行,可在部署機(jī)上使用ansible調(diào)用,為讀操作,可放心執(zhí)行。

[root@localhost ~]# sysctl -n net.ipv4.ip_forward
0

打印sysctl加載鏈,會(huì)變更相關(guān)內(nèi)核參數(shù),生產(chǎn)環(huán)境禁用使用(如果出現(xiàn)ip_forward為0則可使用)。

[root@localhost ~]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
......
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
.....
* Applying /usr/lib/sysctl.d/50-default.conf ...
.......
* Applying /etc/sysctl.d/99-sysctl.conf ...
.......
* Applying /etc/sysctl.conf ...
.......

找到具體是哪個(gè)文件修改了ip_forward為0,則修改此文件,并重載內(nèi)核參數(shù)。無(wú)異常禁止使用。

[root@localhost ~]# sysctl -p


  • flannel通信異常

名詞說(shuō)明: vxlan是vlan的拓展協(xié)議,為overlay網(wǎng)絡(luò),可以穿透三層網(wǎng)絡(luò)對(duì)二層進(jìn)行擴(kuò)展,即大二層網(wǎng)絡(luò)。flannel我們默認(rèn)使用了vxlan做為封裝協(xié)議,端口為8472。
影響范圍: 跨節(jié)點(diǎn)通信異常。
問(wèn)題定位: 對(duì)udp 8472端口抓發(fā),發(fā)現(xiàn)只有出站流量,未有入站流量,即可認(rèn)定為flannel vxlan通信異常。
出現(xiàn)原因: 安全組封禁,vxlan端口沖突,網(wǎng)卡異常等。由于flannel異常的原因多種多樣,此次僅針對(duì)常見(jiàn)情況進(jìn)行描述。建議具體問(wèn)題具體分析。
問(wèn)題處理: 使用nc等相關(guān)命令進(jìn)行測(cè)試,如果抓包仍未發(fā)現(xiàn)入站流量,且其他udp端口正常,則可使用修改port的方式。

添加Port字段,將通信端口修改為8475。

[root@localhost ~]# kubectl edit cm -n kube-system kube-flannel-cfg
net-conf.json: |
    {
      "Network": "172.27.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "Port": 8475
      }
    }

修改后需要重啟相關(guān)daemonset pods。

[root@localhost ~]# kubectl get pods -n kube-system | grep flannel | xargs kubectl delete pods -n kube-system

修改port不生效,可使用host-gw 如果內(nèi)網(wǎng)各節(jié)點(diǎn)二層互通,可使用host-gw模式,此模式兼容性好,網(wǎng)絡(luò)效率高。

[root@localhost ~]# kubectl edit cm -n kube-system kube-flannel-cfg
net-conf.json: |
    {
      "Network": "172.27.0.0/16",
      "Backend": {
        "Type": "host-gw",
    }

如果無(wú)法定位問(wèn)題,可以通過(guò)抓包的方式來(lái)判斷。

例如:當(dāng)時(shí)coredns網(wǎng)絡(luò)不通時(shí),通過(guò)curl測(cè)試。

curl -I 10.187.1.24:9153/metrics

然后再開(kāi)一個(gè)窗口抓包。

tcpdump -nn -i flannel.1 host 10.187.1.24 and port 9153 -vv

防火墻排查

名詞解釋: 此處的防火墻指Linux的軟件防火墻,在Cenots上叫firewalld, 在UOS下叫UFW. 默認(rèn)的軟件防火墻會(huì)導(dǎo)致相關(guān)數(shù)據(jù)庫(kù)被攔截。
影響范圍: 特定服務(wù)訪問(wèn)異常,集群節(jié)點(diǎn)互通異常。
問(wèn)題定位: 對(duì)iptables表鏈進(jìn)行分析,發(fā)現(xiàn)有非預(yù)期的規(guī)則出現(xiàn),則代表存在其他防火墻規(guī)則。
出現(xiàn)原因: 客戶安裝安全軟件,或者是非預(yù)期的軟件行為導(dǎo)致。
問(wèn)題排查:

一般看到ufw, public, zone這種,都可能是默認(rèn)的系統(tǒng)防火墻。

[root@localhost ~]# iptables-save | egrep  "^:" | egrep -v "KUBE|CNI|DOCKER"
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]

發(fā)現(xiàn)后手動(dòng)關(guān)閉,以centos7為例。

[root@localhost ~]# systemctl stop firewalld

iptables FORWARD轉(zhuǎn)發(fā)鏈添加了REJECT規(guī)則,該規(guī)則在ACCEPT之上。

圖片

刪除規(guī)則后正常。

iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited

常見(jiàn)安全軟件排查。

qaxsafed  # 奇安信,
sangfor_watchdog # 深信服安全軟件
YDservice  #qcloud安全軟件,影響pod和docker橋接網(wǎng)絡(luò)
Symantec #賽門鐵克的安全軟件
start360su_safed  #360安全軟件
gov_defence_service
gov_defence_guard      #  ps aux | grep defence 
wsssr_defence_daemon   # 奇安信服務(wù)器安全加固軟件
wsssr_defence_service
wsssr_defence_agent   #影響pod網(wǎng)絡(luò)
kesl #卡巴斯基安全軟件,影響容器通信

名詞解釋: 和在windows環(huán)境下是一樣的,xc背景下,linux的各類安全軟件也非常多,如奇安信,深信服等。
影響范圍: 特定服務(wù)訪問(wèn)異常。
問(wèn)題定位: 以上所有排查方式都嘗試過(guò),則可往此方面排查。
出現(xiàn)原因: 客戶安全軟件在內(nèi)核網(wǎng)絡(luò)層hook了對(duì)應(yīng)函數(shù),相關(guān)規(guī)則過(guò)濾了特定的應(yīng)用數(shù)據(jù)庫(kù),導(dǎo)致異常。

責(zé)任編輯:龐桂玉 來(lái)源: 運(yùn)維之美
相關(guān)推薦

2024-03-18 15:44:48

K8S故障運(yùn)維

2022-02-25 11:16:51

故障運(yùn)維Nginx

2024-01-07 19:43:50

K8S節(jié)點(diǎn)

2024-03-12 15:47:12

Kubernetes容器K8S

2010-09-25 15:19:04

DHCP故障問(wèn)題

2021-09-26 19:39:58

MogDB故障數(shù)據(jù)庫(kù)

2020-09-25 11:10:51

運(yùn)維故障排查監(jiān)控

2021-10-28 17:05:11

IT運(yùn)維故障

2021-08-20 11:35:04

服務(wù)運(yùn)維 故障

2021-04-23 08:35:16

k8s故障檢測(cè)

2019-12-09 10:40:15

YAMLBashKubernetes

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2022-09-05 14:45:56

前端K8S

2023-04-30 00:02:40

K8Skubelet數(shù)據(jù)

2024-12-04 16:44:51

2019-09-28 23:09:28

網(wǎng)絡(luò)故障數(shù)據(jù)包網(wǎng)段

2024-08-14 14:20:00

2023-11-06 07:16:22

WasmK8s模塊

2022-02-23 08:01:04

KubernetesK8sPod

2022-04-18 09:07:54

Linux網(wǎng)絡(luò)延遲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)