cilium 網(wǎng)絡(luò)故障一例污朽,導(dǎo)致 k8s 不同類(lèi)型節(jié)點(diǎn)之間的 Pod 互訪異常

我是 LEE,老李龙考,一個(gè)在 IT 行業(yè)摸爬滾打 16 年的技術(shù)老兵蟆肆。

事件背景

最近不少 k8s 底層網(wǎng)絡(luò)模塊都從 kubenet 升級(jí)到了 cilium矾睦,cilium 還是相對(duì)比較易用的,就是運(yùn)維炎功、監(jiān)控和報(bào)警方案需要花點(diǎn)時(shí)間來(lái)適應(yīng)枚冗。但是最近我們有一組 k8s 結(jié)構(gòu)比較特殊,導(dǎo)致它在從 kubenet 升級(jí)到 cilium 的時(shí)候出現(xiàn)了一個(gè)小插曲:在 kubenet 網(wǎng)絡(luò)的節(jié)點(diǎn)上的 pod 無(wú)法訪問(wèn) cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)上且部署了 networkpolicy 的 pod蛇损,導(dǎo)致了這個(gè) k8s 上部分商戶在新發(fā)應(yīng)用 pod 時(shí)赁温,pod 被調(diào)度到 cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)上,此時(shí)無(wú)法與運(yùn)行在 kubenet 網(wǎng)絡(luò)的節(jié)點(diǎn)上 pod 互訪問(wèn)題淤齐。

現(xiàn)象獲取

當(dāng)我們接到監(jiān)控系統(tǒng)的報(bào)警股囊,以及客戶的反饋,所以部分商戶出現(xiàn)了服務(wù)異常更啄,而且只是少量商戶的出現(xiàn)了問(wèn)題稚疹。 針對(duì)這些商戶的服務(wù)我第一時(shí)間看了下共性,發(fā)現(xiàn)這些商戶的服務(wù)性質(zhì)祭务,受眾群體内狗,以及觸發(fā)報(bào)警時(shí)間都不一樣,難道是巧合待牵? 我隨機(jī)找一個(gè)商戶做了簡(jiǎn)單的排查:

直接測(cè)試商戶的接口

接口異常

發(fā)現(xiàn)商戶接口直接返回:upstream connect error or disconnect/reset before headers. reset reason: connection failure 其屏,單看這個(gè)信息,就知道這個(gè)應(yīng)該不是服務(wù)返回的內(nèi)容缨该,應(yīng)該是后端服務(wù)前某一層轉(zhuǎn)發(fā)層的問(wèn)題偎行。

查看但是商戶服務(wù)的異常日志

日志503報(bào)錯(cuò)

查看應(yīng)用 sidecar 的日志, 把有問(wèn)題的部分過(guò)濾出來(lái)贰拿,發(fā)現(xiàn)是錯(cuò)誤代碼是 503蛤袒。

通過(guò)上面的故障,我頓時(shí)覺(jué)得整個(gè)問(wèn)題很奇怪膨更。 Http 503 的意思是說(shuō)后端的服務(wù)資源不存在了妙真,但是后端的 IP 還是通的,要不然就會(huì)是 502荚守。

所以這里踩了一個(gè)小坑珍德,覺(jué)得是商戶應(yīng)用的問(wèn)題,還跟商戶確認(rèn)了很多內(nèi)容矗漾,以及最近發(fā)布的情況锈候。但是實(shí)際是因?yàn)榫W(wǎng)絡(luò)層請(qǐng)求被截?cái)啵瑢?dǎo)致數(shù)據(jù)包無(wú)法正常轉(zhuǎn)發(fā)敞贡,才導(dǎo)致這次故障泵琳,具體我們看下一個(gè)環(huán)節(jié)。

原理分析

故障測(cè)試

通過(guò)大量的排查和分析,而且確定商戶的服務(wù)啟動(dòng)正常获列,沒(méi)有運(yùn)行報(bào)錯(cuò)日志谷市。只是服務(wù)無(wú)法對(duì)外正常提供,我就快速將排障范圍縮小到了網(wǎng)絡(luò)層面击孩。

這里我提供一份網(wǎng)絡(luò)流量結(jié)構(gòu)圖:

網(wǎng)絡(luò)架構(gòu)簡(jiǎn)圖
  • Ingress pod:是 istio Ingress gateway
  • App pod: 是商戶應(yīng)用服務(wù)的 pod迫悠,擁有 istio 的 sidecar

為了確認(rèn)丟包的位置,我們分在如下幾個(gè)點(diǎn)抓包測(cè)試:

抓包點(diǎn)

抓包信息匯總表:

測(cè)試點(diǎn) 抓包結(jié)果
A 點(diǎn) 有 request溯壶,沒(méi)有 respond
B 點(diǎn) 有 request及皂,沒(méi)有 respond
C 點(diǎn) 什么都沒(méi)有

測(cè)試完,我大吃一驚且改,感覺(jué)丟包了啊验烧,而且是 cilium 節(jié)點(diǎn)把數(shù)據(jù)包丟了。帶著懷疑又跛,有仔細(xì)檢查了兩個(gè) cilium 節(jié)點(diǎn)上的 ct 表碍拆,以及 networkpolicy 掛載點(diǎn)信息。

ENDPOINT 信息

ENDPOINT   POLICY (ingress)   POLICY (egress)   IDENTITY   LABELS (source:key[=value])                                          IPv6   IPv4           STATUS
           ENFORCEMENT        ENFORCEMENT
2636       Enabled            Disabled          59271      k8s:app=wetown-java                                                         10.242.2.149   ready
                                                           k8s:app_id=468205436992_wetown-java
                                                           k8s:app_name=wetown-java
                                                           k8s:appnew=468205436992_wetown-java
                                                           k8s:group=standard
                                                           k8s:io.cilium.k8s.namespace.labels.istio-injection=enabled
                                                           k8s:io.cilium.k8s.namespace.labels.project_id=468205436992_default
                                                           k8s:io.cilium.k8s.namespace.labels.project_name=default
                                                           k8s:io.cilium.k8s.namespace.labels.tenant_id=468205436992
                                                           k8s:io.cilium.k8s.policy.cluster=default
                                                           k8s:io.cilium.k8s.policy.serviceaccount=default
                                                           k8s:io.kubernetes.pod.namespace=468205436992-default
                                                           k8s:metric_source=customize
                                                           k8s:security.istio.io/tlsMode=istio
                                                           k8s:service.istio.io/canonical-name=wetown-java
                                                           k8s:service.istio.io/canonical-revision=latest

NETWORKPOLICY 信息

Defaulted container "cilium-agent" out of: cilium-agent, mount-cgroup (init), apply-sysctl-overwrites (init), clean-cilium-state (init)
POLICY   DIRECTION   LABELS (source:key[=value])                                                    PORT/PROTO   PROXY PORT   BYTES      PACKETS
Allow    Ingress     reserved:unknown                                                               9999/TCP     NONE         0          0
Allow    Ingress     reserved:host                                                                  ANY          NONE         408725     5154
Allow    Ingress     k8s:app=istiod                                                                 ANY          NONE         11824851   910
                     k8s:install.operator.istio.io/owning-resource=unknown
                     k8s:io.cilium.k8s.namespace.labels.istio-injection=disabled
                     k8s:io.cilium.k8s.namespace.labels.system=true
                     k8s:io.cilium.k8s.policy.cluster=default
                     k8s:io.cilium.k8s.policy.serviceaccount=istiod-1-11-8
                     k8s:io.kubernetes.pod.namespace=istio-system
                     k8s:istio.io/rev=1-11-8
                     k8s:istio=istiod
                     k8s:operator.istio.io/component=Pilot
                     k8s:sidecar.istio.io/inject=false
Allow    Ingress     k8s:app=istio-ingressgateway                                                   ANY          NONE         8007       14
                     k8s:chart=gateways
                     k8s:heritage=Tiller
                     k8s:install.operator.istio.io/owning-resource=unknown
                     k8s:io.cilium.k8s.namespace.labels.istio-injection=disabled
                     k8s:io.cilium.k8s.namespace.labels.system=true
                     k8s:io.cilium.k8s.policy.cluster=default
                     k8s:io.cilium.k8s.policy.serviceaccount=istio-ingressgateway-service-account
                     k8s:io.kubernetes.pod.namespace=istio-system
                     k8s:istio.io/rev=1-11-8
                     k8s:istio=ingressgateway
                     k8s:operator.istio.io/component=IngressGateways
                     k8s:release=istio
                     k8s:service.istio.io/canonical-name=istio-ingressgateway
                     k8s:service.istio.io/canonical-revision=1-11-8
                     k8s:sidecar.istio.io/inject=false
Allow    Ingress     k8s:app=network-debug                                                          ANY          NONE         0          0
                     k8s:io.cilium.k8s.namespace.labels.system=true
                     k8s:io.cilium.k8s.policy.cluster=default
                     k8s:io.cilium.k8s.policy.serviceaccount=default
                     k8s:io.kubernetes.pod.namespace=default
Allow    Ingress     k8s:app=wetown-java                                                            ANY          NONE         0          0
                     k8s:app_id=468205436992_wetown-java
                     k8s:app_name=wetown-java
                     k8s:appnew=468205436992_wetown-java
                     k8s:group=standard
                     k8s:io.cilium.k8s.namespace.labels.istio-injection=enabled
                     k8s:io.cilium.k8s.namespace.labels.project_id=468205436992_default
                     k8s:io.cilium.k8s.namespace.labels.project_name=default
                     k8s:io.cilium.k8s.namespace.labels.tenant_id=468205436992
                     k8s:io.cilium.k8s.policy.cluster=default
                     k8s:io.cilium.k8s.policy.serviceaccount=default
                     k8s:io.kubernetes.pod.namespace=468205436992-default
                     k8s:metric_source=customize
                     k8s:security.istio.io/tlsMode=istio
                     k8s:service.istio.io/canonical-name=wetown-java
                     k8s:service.istio.io/canonical-revision=latest
                     k8s:tenant_id=468205436992
Allow    Egress      reserved:unknown                                                               ANY          NONE         990293     6509

CT 信息

TCP IN 10.242.2.153:60064 -> 10.242.2.149:15021 expires=17276052 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17276043 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17276043 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:2464 -> 10.242.2.149:15020 expires=17276618 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17276609 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276609 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:19582 -> 10.242.2.149:15021 expires=17275992 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17275983 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17275983 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:17164 -> 10.242.2.149:15021 expires=17276443 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17276434 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17276434 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:15068 -> 10.242.2.149:15020 expires=17276115 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17276106 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276106 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:3468 -> 10.242.2.149:15021 expires=17276081 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17276072 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17276072 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:60072 -> 10.242.2.149:15021 expires=17276413 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17276404 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17276404 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:13152 -> 10.242.2.149:15021 expires=17276083 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17276074 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17276074 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:60054 -> 10.242.2.149:15021 expires=17276509 RxPackets=18 RxBytes=1392 RxFlagsSeen=0x1b LastRxReport=17276500 TxPackets=12 TxBytes=1113 TxFlagsSeen=0x1b LastTxReport=17276500 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:14902 -> 10.242.2.149:15020 expires=17276263 RxPackets=5 RxBytes=417 RxFlagsSeen=0x1b LastRxReport=17276254 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276254 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:7100 -> 10.242.2.149:15021 expires=17276003 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17275994 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17275994 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:1396 -> 10.242.2.149:15020 expires=17276207 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17276198 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276198 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:11408 -> 10.242.2.149:15020 expires=17275973 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17275964 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17275964 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:60010 -> 10.242.2.149:15020 expires=17276575 RxPackets=63 RxBytes=5171 RxFlagsSeen=0x1b LastRxReport=17276566 TxPackets=60 TxBytes=4512 TxFlagsSeen=0x1b LastTxReport=17276566 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:18134 -> 10.242.2.149:15020 expires=17276315 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17276306 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276306 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:3438 -> 10.242.2.149:15021 expires=17276076 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17276067 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17276067 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:17962 -> 10.242.2.149:15020 expires=17276032 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17276023 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276023 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:10100 -> 10.242.2.149:15020 expires=17276500 RxPackets=5 RxBytes=418 RxFlagsSeen=0x1b LastRxReport=17276491 TxPackets=5 TxBytes=376 TxFlagsSeen=0x1b LastTxReport=17276491 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:8154 -> 10.242.2.149:15021 expires=17276329 RxPackets=12 RxBytes=928 RxFlagsSeen=0x1b LastRxReport=17276320 TxPackets=8 TxBytes=742 TxFlagsSeen=0x1b LastTxReport=17276320 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0
TCP IN 10.242.2.153:19556 -> 10.242.2.149:15021 expires=17275986 RxPackets=6 RxBytes=464 RxFlagsSeen=0x1b LastRxReport=17275977 TxPackets=4 TxBytes=371 TxFlagsSeen=0x1b LastTxReport=17275977 Flags=0x0013 [ RxClosing TxClosing SeenNonSyn ] RevNAT=0 SourceSecurityID=1 IfIndex=0

......

通過(guò)檢查慨蓝,就是沒(méi)有發(fā)現(xiàn)從 kubenet 網(wǎng)絡(luò)的節(jié)點(diǎn)轉(zhuǎn)發(fā)過(guò)來(lái)的流量感混。 然后回想到應(yīng)用上有掛載 networkpolicy,我這邊果斷刪除這個(gè)業(yè)務(wù) pod 上掛載的 networkpolicy礼烈,然后在所有測(cè)試點(diǎn)抓包弧满。 全部都通了,現(xiàn)在破案了此熬,應(yīng)該是 networkpolicy 的問(wèn)題庭呜。

這里又來(lái)一個(gè)隱含的問(wèn)題,既然在同一個(gè) k8s 內(nèi)犀忱,有 cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)募谎,也有傳統(tǒng)的 kubenet 網(wǎng)絡(luò)的節(jié)點(diǎn)。 為什么會(huì)出現(xiàn)不通呢阴汇?為了驗(yàn)證這個(gè)問(wèn)題数冬,我們又做了如下一個(gè)實(shí)驗(yàn),還是上圖:

抓包點(diǎn)

在做這個(gè)實(shí)驗(yàn)前搀庶,有一點(diǎn)可以確認(rèn):丟包點(diǎn)是在兩種不同的網(wǎng)絡(luò)模型拐纱,并不是外部進(jìn)入 k8s 集群,所以只要關(guān)注 C 點(diǎn)流量哥倔。

測(cè)試方法跟之間一樣戳玫,然后我們?cè)诓煌狞c(diǎn)抓包,這次結(jié)果也讓我驚掉了下巴未斑。

測(cè)試內(nèi)容 狀態(tài)介紹 測(cè)試點(diǎn) 測(cè)試結(jié)果
kubenet 節(jié)點(diǎn)上 pod 訪問(wèn) cilium 節(jié)點(diǎn)上業(yè)務(wù) pod 1. 發(fā)起請(qǐng)求的測(cè)試 pod 運(yùn)行在 kubenet 節(jié)點(diǎn)上
2. 被測(cè)試業(yè)務(wù) pod 運(yùn)行在 cilium 節(jié)點(diǎn)上
3. 被測(cè)試業(yè)務(wù) pod 配置有 networkpolicy
C 點(diǎn) 失敗
cilium 節(jié)點(diǎn)上 pod 訪問(wèn) kubenet 節(jié)點(diǎn)上業(yè)務(wù) pod 1. 發(fā)起請(qǐng)求的測(cè)試 pod 運(yùn)行在 kubenet 節(jié)點(diǎn)上
2. 被測(cè)試業(yè)務(wù) pod 運(yùn)行在 cilium 節(jié)點(diǎn)上
3. 被測(cè)試業(yè)務(wù) pod 配置有 networkpolicy
B 點(diǎn) 成功
kubenet 節(jié)點(diǎn)上 pod 訪問(wèn) cilium 節(jié)點(diǎn)上業(yè)務(wù) pod
去除 cilium 節(jié)點(diǎn)上 pod 上的 networkpolicy
1. 發(fā)起請(qǐng)求的測(cè)試 pod 運(yùn)行在 kubenet 節(jié)點(diǎn)上
2. 被測(cè)試 pod 運(yùn)行在 cilium 節(jié)點(diǎn)上
3. 刪除被測(cè)試 pod 的 networkpolicy
4. 被測(cè)試 pod 監(jiān)聽(tīng) 8080 端口
5. 測(cè)試 pod 發(fā)起 tcp 請(qǐng)求到被測(cè)試 pod
C 點(diǎn) 成功
cilium 節(jié)點(diǎn)上 pod 訪問(wèn) kubenet 節(jié)點(diǎn)上業(yè)務(wù) pod
去除 cilium 節(jié)點(diǎn)上 pod 上的 networkpolicy
1. 發(fā)起請(qǐng)求的測(cè)試 pod 運(yùn)行在 kubenet 節(jié)點(diǎn)上
2. 被測(cè)試 pod 運(yùn)行在 cilium 節(jié)點(diǎn)上
3. 刪除被測(cè)試 pod 的 networkpolicy
4. 測(cè)試 pod 監(jiān)聽(tīng) 8080 端口
5. 被測(cè)試 pod 發(fā)起 tcp 請(qǐng)求到測(cè)試 pod
B 點(diǎn) 成功

總結(jié)下: 從 kubenet 網(wǎng)絡(luò)的節(jié)點(diǎn)上 pod 訪問(wèn)帶有 networkpolicy 的 cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)上 pod,是不通,其他的場(chǎng)景都是 OK 的蜡秽。

技術(shù)解析

那么是不是有這樣一種猜想府阀,cilium 不識(shí)別其他的網(wǎng)絡(luò)模型的節(jié)點(diǎn)呢?讓我們看看 cilium cluster 信息:

Cluster health:             15/15 reachable   (2022-12-12T08:19:02Z)
  Name                      IP                Node        Endpoints
  10.118.201.53 (localhost)   10.118.201.53       reachable   reachable
  10.118.201.48               10.118.201.48       reachable   reachable
  10.118.201.49               10.118.201.49       reachable   reachable
  10.118.201.50               10.118.201.50       reachable   reachable
  10.118.201.51               10.118.201.51       reachable   reachable
  10.118.201.52               10.118.201.52       reachable   reachable
  10.118.201.54               10.118.201.54       reachable   reachable
  10.118.201.55               10.118.201.55       reachable   reachable
  10.118.201.56               10.118.201.56       reachable   reachable
  10.118.201.57               10.118.201.57       reachable   reachable
  10.118.201.58               10.118.201.58       reachable   reachable
  10.118.201.59               10.118.201.59       reachable   reachable
  10.118.201.60               10.118.201.60       reachable   reachable
  10.118.201.61               10.118.201.61       reachable   reachable
  10.118.201.62               10.118.201.62       reachable   reachable

通過(guò)節(jié)點(diǎn)信息芽突,我們可以清楚看出试浙,cilium 只管理部署了 cilium agent 的節(jié)點(diǎn)。其他的 kubenet 網(wǎng)絡(luò)節(jié)點(diǎn)他是不管的寞蚌,也就是這些節(jié)點(diǎn)對(duì)他來(lái)說(shuō)的跟外部服務(wù)器一樣田巴,從這些節(jié)點(diǎn)傳入的網(wǎng)絡(luò)流量都當(dāng)成外部流量,即便在同一個(gè) k8s 內(nèi)挟秤,cilium 也不看你流量信息壹哺,以及來(lái)源哪里。

說(shuō)到這里艘刚,不得不提到之前寫(xiě)一篇文章《ebpf 開(kāi)發(fā)入門(mén)之核心概念篇》管宵,那里面提到了一個(gè) HOOK 的概念,networkpolicy 就是通過(guò) HOOK 掛載到容器的網(wǎng)卡的 Ingress 上攀甚。 既然 kubenet 網(wǎng)絡(luò)的節(jié)點(diǎn) 和 cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)都在同一個(gè) k8s 內(nèi)箩朴,但是 cilium 的只管理自己的節(jié)點(diǎn),其他的節(jié)點(diǎn)都認(rèn)為是外部的秋度,如果不匹配 Ingress 的規(guī)則炸庞,都會(huì)被拒絕。

通過(guò)抓包測(cè)試荚斯,以及分析 cilium 的相關(guān)信息埠居,我們找到問(wèn)題所在:cilium 如果沒(méi)有管理全部的 k8s 所有節(jié)點(diǎn),剩余的節(jié)點(diǎn)就按照外部服務(wù)器的方式來(lái)處理鲸拥。

處理方法

知道了原因拐格,有了實(shí)驗(yàn)驗(yàn)證,那么辦法也當(dāng)然就有了刑赶,當(dāng)然也很簡(jiǎn)單捏浊。

  1. 移動(dòng)所有的 pod 到 cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)
  2. 移動(dòng) Ingress pod 到 cilium 網(wǎng)絡(luò)的節(jié)點(diǎn)
  3. 刪除 cilium 受影響 pod 的 networkpolicy

從解決辦法上看,最合理也最有可操作性的是:2 號(hào)

最終效果

通過(guò)調(diào)整后撞叨,最終結(jié)果當(dāng)然也復(fù)合預(yù)期金踪,所有的業(yè)務(wù)互聯(lián)互通都沒(méi)有了問(wèn)題。同時(shí)也在加速 pod 的遷移牵敷,盡量減少這樣的不合理的共存環(huán)境胡岔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枷餐,隨后出現(xiàn)的幾起案子靶瘸,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怨咪,死亡現(xiàn)場(chǎng)離奇詭異屋剑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诗眨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)唉匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人匠楚,你說(shuō)我怎么就攤上這事巍膘。” “怎么了芋簿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵峡懈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我益咬,道長(zhǎng)逮诲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任幽告,我火速辦了婚禮梅鹦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冗锁。我一直安慰自己齐唆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布冻河。 她就那樣靜靜地躺著箍邮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叨叙。 梳的紋絲不亂的頭發(fā)上锭弊,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音擂错,去河邊找鬼味滞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钮呀,可吹牛的內(nèi)容都是我干的剑鞍。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼爽醋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚁署!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蚂四,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤光戈,失蹤者是張志新(化名)和其女友劉穎哪痰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體久妆,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒御,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镇饺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡送讲,死狀恐怖奸笤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哼鬓,我是刑警寧澤监右,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站异希,受9級(jí)特大地震影響健盒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜称簿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一扣癣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憨降,春花似錦父虑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至悔叽,卻和暖如春莱衩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娇澎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工笨蚁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人九火。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓赚窃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親岔激。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勒极,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容