在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

網絡不通問題分析和解決方法

OSC開源社區 ? 來源:阿里云云原生 ? 2023-08-21 16:22 ? 次閱讀

為啥爭吵,吵什么?

Cloud Native

"你到底在說什么啊,我K8s的ecs節點要訪問clb的地址不通和本地網卡有什么關系..." 氣憤語氣都從電話那頭傳了過來,這時電話兩端都沉默了。過了好一會傳來地鐵小姐姐甜美的播報聲打斷了剛剛的沉寂「乘坐地鐵必須全程佩戴口罩,下一站西湖文化廣場...」。

pod需要訪問clb的443的監聽, 但是如果是集群內(集群內后面都指的K8s的節點或者POD)訪問就會出現如下報錯Connection refused:

76d456fc-3dbb-11ee-ac96-dac502259ad0.png

所以就捋了一下客戶鏈路如下:

76f1d024-3dbb-11ee-ac96-dac502259ad0.png ?

具體現象是什么

無論是節點node還是pod里訪問192.168.1.200:443都是不通的,但是訪問192.168.1.200:80卻是正常的。同時集群外的ECS192.168.3.100訪問192.168.1.200:443和192.168.1.200:80都是正常的。

進一步分析看看

CLB1的IP192.168.1.200被綁定到了K8s的node節點的kube-ipvs0網卡上,這個是一張dummy 網卡,參考dummy interface。由于 SVC1 是LoadBalancer類型的,同時復用了這個CLB1,關聯endpoint是POD1192.168.1.101:80,那么就可以解釋為何訪問192.168.1.200:80是正常,是由于kube-proxy根據SVC1的配置創建ipvs規則同時掛載了可被訪問的后端服務。而集群里訪問192.168.1.200:443都是不通的,因為IP被綁定到dummy網卡后,就不會再出節點去訪問到CLB1,同時沒有443對應ipvs規則,所以直接是拒絕的。

這個時候如果節點里沒有ipvs規則(ipvs優先于監聽)但是又能訪問通的話, 可以檢查一下是否本地有監聽0.0.0.0:443的服務,那么這個時候所有網卡IP+443都能通,但是訪問的是本地服務,而不是真正的CLB后端的服務。

7714403c-3dbb-11ee-ac96-dac502259ad0.png

是否有辦法解決呢

Cloud Native

最建議的方式

最好的方式拆分, 集群內和集群外的服務分開兩個CLB使用。

阿里云svc注解的方式

SVC1使用這個注解service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname,進行占位,這樣就不會綁定CLB的IP到kube-ipvs0的網卡上,集群內訪問CLB的IP就會出集群訪問CLB,但是需要注意如果監聽協議為TCP或UDP,集群內訪問CLB IP時將會存在回環訪問問題。詳細信息,請參見客戶端無法訪問負載均衡CLB[1]

需要CCM版本在 v2.3.0及以上版本才支持這個注解, 具體參考:通過Annotation配置傳統型負載均衡CLB[2]

772dd5b0-3dbb-11ee-ac96-dac502259ad0.png

demo:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname: "${your_service_hostname}"
  name: nginx-svc
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

集群內訪問ExternalTrafficPolicy

策略有影響嗎?

Cloud Native

我們都知道K8s的nodeport和loadbalancer模式是可以調整外部流量策略的,那么圖中的「外部策略為Local/Cluster,所有集群節點創建IPVS規則是有區別的」該如何解釋呢, 以及集群內訪問nodePort/CLBIP的時候會發生什么。

77572488-3dbb-11ee-ac96-dac502259ad0.png

以下都是針對svc的internalTrafficPolicy都是Cluster或者缺省的情況,這個ServiceInternalTrafficPolicy特性在1.22的K8s中默認開啟,具體參考service-traffic-policy[3]

具體到阿里云容器在不同網絡CNI情況下的數據鏈路,可以參考下面的文章。

此處我們只討論ipvs TrafficPolicy Local在Kubernetes 從1.22升級到1.24的行為變化。

Kubernetes 1.24 IPVS的變化

以下均以kube-proxy的IPVS模式為例:

當externalTrafficPolicy為Cluster模式或缺省的時候,ipvs規則里的nodePort/CLBIP后端會掛載所有的Endpoint的IP,這時候集群內訪問會丟失源IP,因為節點會做一層SNAT。

當externalTrafficPolicy是Local的時候

當節點上有對應service的Endpoint的時候,ipvs規則里的nodePort/CLBIP后端只掛載自己節點的Endpoint的IP,集群內訪問會保留源IP。

當節點上沒有對應service的Endpoint的時候

在1.24之前的版本是會掛空的后端的,集群內訪問會拒絕。

在1.24之后的K8s集群里,當節點上沒有對應service的Endpoint的時候,ipvs規則里的nodePort/CLB IP后端會掛載所有的Endpoint的IP,這時候集群內訪問會丟失源IP,因為節點會做一層SNAT。社區調整了Local策略后端服務的規則掛載策略,具體參考社區PR[4]

集群外訪問SLB

集群外訪問SLB的話,CCM只會掛載Local類型的節點,情況跟1.24 kubernetes前一樣,這里不做過多闡述,請見上面連接。

集群外訪問NodePort

1.24 Kubernetes之前版本

訪問有Endpoint的節點的NodePort,可以通,可以保留源IP

Nginx分布在cn-hongkong.10.0.4.174和cn-hongkong.10.0.2.84節點。

77846b82-3dbb-11ee-ac96-dac502259ad0.png

從外部10.0.3.72節點訪問有后端pod所在節點的cn-hongkong.10.0.2.84的30479端口,可以訪問。

77aa1cf6-3dbb-11ee-ac96-dac502259ad0.png

cn-hongkong.10.0.0.140節點上是有相關的IPVS的規則的,但是只有該節點上后端Pod IP。

77d31d7c-3dbb-11ee-ac96-dac502259ad0.png

通過conntrack表可以到,這是由于在cn-hongkong.10.0.0.140節點上,相關的鏈路被dnat,最后是由pod cn-hongkong.10.0.2.84節點上的 的nginx-7d6877d777-tzbf7 10.0.2.87返回源,所有的相關轉化都在該節點上,所以TCP四層建連可以成功。

77e7f8be-3dbb-11ee-ac96-dac502259ad0.png

訪問沒有Endpoint的節點的NodePort,不能通,因為節點上沒有相關的ipvs轉發規則

從外部10.0.3.72節點訪問無后端pod所在節點的cn-hongkong.10.0.0.140的30479端口,不可以訪問。

7800f72e-3dbb-11ee-ac96-dac502259ad0.png

查看該cn-hongkong.10.0.0.140節點,并沒有相關的ipvs轉發規則,所以無法進行dnat,訪問會失敗。

781dbbf2-3dbb-11ee-ac96-dac502259ad0.png

1.24 Kubernetes版本之后(含)

訪問有Endpoint節點的NodePort,可以通,可以保留源IP

訪問沒有Endpoint節點的NodePort:

terway ENIIP or host網絡:不通

Nginx分布在cn-hongkong.10.0.2.77和cn-hongkong.10.0.0.171 節點。

783c6480-3dbb-11ee-ac96-dac502259ad0.png

從外部10.0.3.72節點訪問無后端pod所在節點的cn-hongkong.10.0.5.168的30745端口,可以看到,訪問失敗。

785afb5c-3dbb-11ee-ac96-dac502259ad0.png

cn-hongkong.10.0.5.168節點上是有相關的IPVS的規則的,并且會把所有的后端Pod IP加到IPVS規則中。

78749666-3dbb-11ee-ac96-dac502259ad0.png

通過conntrack表可以到,這是由于在cn-hongkong.10.0.5.168節點上,相關的鏈路被dnat,最后是由pod cn-hongkong.10.0.2.77節點上的nginx-79fc6bc6d-8vctc 10.0.2.78返回源,源在接受這個鏈路后,會發現和自己的五元組不匹配,直接丟棄,三次握手必然失敗,所以建連失敗。

78895128-3dbb-11ee-ac96-dac502259ad0.png

flannel網絡:可以通,但是保留不了源IP

Nginx分布在cn-hongkong.10.0.2.86。

78a83d72-3dbb-11ee-ac96-dac502259ad0.png

從外部訪問cn-hongkong.10.0.4.176的31218端口,可以訪問成功。

78c5a024-3dbb-11ee-ac96-dac502259ad0.png

cn-hongkong.10.0.4.176記錄了src是10.0.3.72,并做了dnat為172.16.160.135,期望它返回給10.0.4.176的58825端口。

78ecdc66-3dbb-11ee-ac96-dac502259ad0.png

后端ep所在節點cn-hongkong.10.0.2.86,conntrack表記錄了src是10.0.4.176,sport是58825。所以可以看到應用pod是記錄的源IP是10.0.4.176,丟失了源IP。

79061000-3dbb-11ee-ac96-dac502259ad0.png

集群內訪問SLB或者NodePort

1.24 Kubernetes之前版本

有Endpoint的節點上訪問,可以通,可以保留源IP

Nginx分布在ap-southeast-1.192.168.100.209和ap-southeast-1.192.168.100.208節點,ap-southeast-1.192.168.100.210節點沒有Nginx pod。

7929d85a-3dbb-11ee-ac96-dac502259ad0.png

從集群任意節點(本例就在209節點)訪問有后端pod所在節點的ap-southeast-1.192.168.100.209的NodePort 31565端口,可以訪問。

79659d9a-3dbb-11ee-ac96-dac502259ad0.png

從有后端pod所在節點ap-southeast-1.192.168.100.209訪問SLB 8.222.252.252 的80端口,可以訪問。

79e601b0-3dbb-11ee-ac96-dac502259ad0.png

ap-southeast-1.192.168.100.209節點上是有NodePort 和SLB 的IPVS的規則的,但是只有該節點上后端Pod IP。

7a2b8550-3dbb-11ee-ac96-dac502259ad0.png

通過conntrack表可以到,這是由于在ap-southeast-1.192.168.100.209 節點上,相關的鏈路被dnat,最后是由pod 在ap-southeast-1.192.168.100.209 節點上的 的nginx-7d6877d777-2wh4s 192.168.100.222返回源,所有的相關轉化都在該節點上,所以TCP四層建連可以成功。

7a4dc926-3dbb-11ee-ac96-dac502259ad0.png

沒有Endpoint的節點上訪問,不能通,因為節點上沒有相關的ipvs轉發規則

從集群任意節點(本例就在210節點)訪問沒有后端pod所在節點的ap-southeast-1.192.168.100.210 的NodePort 31565端口或者SLB,不可以訪問。

也進一步證實,集群內訪問關聯svc的SLB不出節點,即使SLB有其他監聽端口,訪問SLB其他端口也會拒絕。

7a7d49ee-3dbb-11ee-ac96-dac502259ad0.png

查看該ap-southeast-1.192.168.100.210 節點,并沒有相關的ipvs轉發規則,所以無法進行dnat,訪問會失敗。

7a9a2230-3dbb-11ee-ac96-dac502259ad0.png

1.24 Kubernetes版本之后(含)

有Endpoint節點上訪問,可以通,可以保留源IP

與上文的1.24 Kubernetes之前版本集群內訪問一致,可以參考上文描述。

沒有Endpoint節點上訪問:

Nginx分布在cn-hongkong.10.0.2.77和cn-hongkong.10.0.0.171節點,所以在沒有Nginx的cn-hongkong.10.0.4.141節點上測試。

7abe1c4e-3dbb-11ee-ac96-dac502259ad0.png

分別有以下幾種情況:

terway或后端為hostNetwork

節點訪問的通 NodePort(源 IP 是 ECS IP,不需要做 SNAT),無法保留源IP

可以看到沒有Endpoint的節點的NodePort 110.0.4.141:30745 的IPVS 的規則添加的Nginx的所有后端POD nginx-79fc6bc6d-8vctc 10.0.2.78 和 nginx-79fc6bc6d-j587w 10.0.0.172。

7add6478-3dbb-11ee-ac96-dac502259ad0.png

集群內節點自身訪問沒有后端pod所在節點的cn-hongkong.10.0.4.141 的NodePort 30745/TCP端口,可以訪問。

7afbca1c-3dbb-11ee-ac96-dac502259ad0.png

通過conntrack表可以到,在cn-hongkong.10.0.4.141節點上,相關的鏈路被dnat,最后是由后盾Nginx pod nginx-79fc6bc6d-8vctc 10.0.2.78返回源。

7b1970f8-3dbb-11ee-ac96-dac502259ad0.png

而在nginx-79fc6bc6d-8vctc 10.0.2.78 所在的節點cn-hongkong.10.0.2.77上的conntrack表記錄的是10.04.141訪問10.0.2.78,并期望10.0.2.78直接返回10.0.4.141的的39530端口。

7b299a28-3dbb-11ee-ac96-dac502259ad0.png

集群內有endpoint 節點訪問沒有后端pod所在節點的ap-southeast-1.192.168.100.131 的NodePort 32292端口,不可以訪問,與上文1.24 Kubernetes版本之后(含) 集群外訪問一致,可以參考上文描述。

節點訪問不通 SLB IP(源 IP 是 SLB IP,沒有人做 SNAT)

可以看到沒有Endpoint的節點的SLB IP 的IPVS 的規則添加的Nginx的所有后端POD nginx-79fc6bc6d-8vctc 10.0.2.78 和 nginx-79fc6bc6d-j587w 10.0.0.172。

7b439554-3dbb-11ee-ac96-dac502259ad0.png

沒有Endpoint的節點上訪問 SLB 47.243.247.219,訪問確是超時。

7b587618-3dbb-11ee-ac96-dac502259ad0.png

通過conntrack表可以到,在沒有ep的節點訪問SLB的IP,可以看到期望的是后端pod返回給SLB IP。而SLB IP 在節點上已經被kube-ipvs虛擬占位了,所以沒有做snat,造成無法訪問。

7b695cbc-3dbb-11ee-ac96-dac502259ad0.png

flannel并且后端為普通pod,可以訪問通,但是保留不了源IP

Nginx分布在cn-hongkong.10.0.2.86。

78a83d72-3dbb-11ee-ac96-dac502259ad0.png

在cn-hongkong.10.0.4.176訪問SLB 47.242.86.39 是可以訪問成功的。

7b9f8c1a-3dbb-11ee-ac96-dac502259ad0.png

cn-hongkong.10.0.4.176節點的conntrack表可以看到是src和dst都是47.242.86.39,但是期望的是 nginx pod172.16.160.135 返回給 10.0.4.176 的54988端口,47.242.86.39 snat成10.0.4.176。

7bfaa870-3dbb-11ee-ac96-dac502259ad0.png

后端ep所在節點cn-hongkong.10.0.2.86,conntrack表記錄了src是10.0.4.176,sport是54988。所以可以看到應用pod是記錄的源IP是10.0.4.176,丟失了源IP。

7c192f98-3dbb-11ee-ac96-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網卡
    +關注

    關注

    4

    文章

    311

    瀏覽量

    27384
  • 客戶端
    +關注

    關注

    1

    文章

    290

    瀏覽量

    16688
  • SVC
    SVC
    +關注

    關注

    0

    文章

    33

    瀏覽量

    12139
  • 阿里云
    +關注

    關注

    3

    文章

    956

    瀏覽量

    43043
  • kubernetes
    +關注

    關注

    0

    文章

    224

    瀏覽量

    8720

原文標題:一次網絡不通"爭吵"引發的思考

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙OpenHarmony:【常見編譯問題和解決方法

    常見編譯問題和解決方法
    的頭像 發表于 05-11 16:09 ?2209次閱讀

    STC-ISP下載失敗的原因和解決方法

    整理原因和解決方法如下:(僅供參考,歡迎指正,Email:stcisp@163.com)首先成功進行ISP燒寫的條件非常簡單,只要有串口和單片機接成最小系統(帶有RS232電路)就可以了(
    發表于 08-09 08:26

    BIOS錯誤信息和解決方法

    BIOS錯誤信息和解決方法 1.CMOS battery failed(CMOS電池失效) 原因:說明CMOS電池的電力已經不
    發表于 03-10 11:49 ?3877次閱讀

    關于開關電源的電磁干擾問題研究和解決方法

    關于開關電源的電磁干擾問題研究和解決方法 開關電源由于本身工作特性使得電磁干擾問題相當突出。從開關電源電磁干擾的模
    發表于 06-30 20:22 ?1280次閱讀
    關于開關電源的電磁干擾問題研究<b class='flag-5'>和解決方法</b>

    光繪膠卷一些常見的沖洗問題和解決方法(圖解法)

    光繪膠卷一些常見的沖洗問題和解決方法(圖解法)
    發表于 03-15 10:25 ?1332次閱讀

    采用MATLAB對SPWM進行輔助設計與詳細分析和解決方法

    采用MATLAB對SPWM進行輔助設計與詳細分析和解決方法
    發表于 09-14 14:22 ?18次下載
    采用MATLAB對SPWM進行輔助設計與詳細<b class='flag-5'>分析</b><b class='flag-5'>和解決方法</b>

    一文解讀MES系統中選型困惑和解決方法

    本文主要介紹了MES系統中選型困惑和解決方法
    發表于 06-26 08:00 ?1次下載

    51單片機用到strcmp比較字符串有的問題和解決方法說明

    本文檔的主要內容詳細介紹的是51單片機用到strcmp比較字符串有的問題和解決方法說明。
    發表于 07-02 17:42 ?8次下載
    51單片機用到strcmp比較字符串有的問題<b class='flag-5'>和解決方法</b>說明

    假焊的原因和解決方法

    在電子原件焊接過程中,焊點表面上好像焊接成功,但實際上并沒有焊住,有時用手一撥,引線就可以從焊接點中撥出,這種現象稱為假焊。假焊的原因和解決方法說明如下
    發表于 04-30 15:18 ?3.2w次閱讀

    如何進行MP3的簡易維修常見故障和解決方法資料免費下載

    本文檔的主要內容詳細介紹的是如何進行MP3的簡易維修常見故障和解決方法資料免費下載。
    發表于 05-30 08:00 ?3次下載
    如何進行MP3的簡易維修常見故障<b class='flag-5'>和解決方法</b>資料免費下載

    三相電機一根線不通的原因及解決方法

    如果三相電機中有一根線不通,通常表現為電機無法啟動或啟動后運行不正常。以下是可能導致這種情況的原因和解決方法
    發表于 03-03 17:45 ?8625次閱讀

    保護死區的概念和解決方法

    保護死區的概念和解決方法
    的頭像 發表于 07-15 11:02 ?1488次閱讀
    保護死區的概念<b class='flag-5'>和解決方法</b>

    變頻器過熱的故障原因和解決方法

    變頻器過熱的故障原因和解決方法
    的頭像 發表于 10-24 10:09 ?5749次閱讀

    GSM系統中干擾問題的分類、定位和解決方法

    電子發燒友網站提供《GSM系統中干擾問題的分類、定位和解決方法.pdf》資料免費下載
    發表于 11-17 16:53 ?0次下載
    GSM系統中干擾問題的分類、定位<b class='flag-5'>和解決方法</b>

    internet無法連接到網絡?這些原因和解決方法要知道

    internet無法連接到網絡?這些原因和解決方法要知道? 簡介: 互聯網已經成為現代生活中不可或缺的一部分。然而,有時我們可能會遇到無法連接到網絡的問題。這篇文章將詳細介紹可能導致互聯網連接
    的頭像 發表于 12-09 16:15 ?1.1w次閱讀
    主站蜘蛛池模板: 国产美女主播在线观看| 一级特黄a视频| 窝窝午夜看片免费视频| 国产精品久久久久久久免费大片 | 色天网站| 狠狠色综合网站久久久久久久| 一级特黄a 大片免费| 亚洲性影院| 五月婷婷伊人网| 国产婷婷高清在线观看免费| 黄色三级网站| 亚洲人免费视频| 国产精品伦子一区二区三区| 国产午夜精品久久理论片小说| 成人免费aaaaa毛片| 巨乳色在线观看| 日本加勒比在线精品视频| 卡2卡三卡四卡精品公司| 欧美久操| 日本精品视频一视频高清| 亚洲成人毛片| 美女艹逼视频| 欧美一级片免费在线观看| 亚洲zscs综合网站| 视频在线二区| 久久综合久久久| 国产午夜精品福利久久| 一国产大片在线观看| 高清色视频| xxxx69日本hd| 欧美性狂猛bbbbbxxxxx| 免费午夜视频| 性欧美长视频| 一本在线免费视频| 亚洲人成一区| 久久男人精品| 99亚洲自拍| 欧美一区二区三区性| 美女福利在线观看| 天堂资源在线中文| 天天干天操|