網(wǎng)站首頁 編程語言 正文
0. 前言
本文主要針對的是:不在同一內(nèi)網(wǎng)且機(jī)器的公網(wǎng)IP并未顯示的綁定在機(jī)器網(wǎng)卡上(也就是云主機(jī),比如阿里云、騰訊云等等)出現(xiàn)的pod之間無法訪問的問題,如果不是的話就可以撤退了,節(jié)約時間~~
1、背景
我有閑置的騰訊云兩臺服務(wù)器,最近想搭建個k8s集群玩玩,于是按照b站某教程搭建,出現(xiàn)了網(wǎng)絡(luò)問題,具體如下。
2、 配置如下
公網(wǎng)ip已打碼,畢竟還在使用,見諒
master節(jié)點(diǎn)叫:k8s-master-q,worker節(jié)點(diǎn)叫:k8s-master
3、集群信息如下
應(yīng)用部署在了 worker節(jié)點(diǎn)的pod上
4、 問題
master節(jié)點(diǎn):curl 10.244.1.3(podIP) 、curl 10.96.6.212都沒法連通,且:在瀏覽器輸入:http://master公網(wǎng)IP:30002/也無法訪問
worker:恰恰相反
翻遍整個網(wǎng)絡(luò),沒找到解決方案,或者說自己沒深刻理解k8s,無法根據(jù)關(guān)鍵信息搜索,也不知道問題發(fā)生的原因,導(dǎo)致一直沒找解決方案,困擾好幾天。經(jīng)過不懈努力,偶然間發(fā)現(xiàn)了問題的關(guān)鍵,便是 master節(jié)點(diǎn)與worker節(jié)點(diǎn)不在同一內(nèi)網(wǎng)內(nèi)。
什么意思?其實(shí)也就是對k8s集群內(nèi)網(wǎng)絡(luò)轉(zhuǎn)發(fā)模型的不了解,即下圖:
這是k8s的flannel網(wǎng)絡(luò)模型,具體原理與工作流程參考大佬博客,我也是看到這篇博客才得到解決
Kuberbetes Pod間無法通信問題處理
大概原因就是,數(shù)據(jù)包從節(jié)點(diǎn)A發(fā)給節(jié)點(diǎn)B的,但使用的目的IP卻是節(jié)點(diǎn)B的內(nèi)網(wǎng)IP,而節(jié)點(diǎn)A和B并不在同一內(nèi)網(wǎng),并無法直接訪問,這就導(dǎo)致了數(shù)據(jù)包中途丟包而無法連接。
可以看下自己的節(jié)點(diǎn)是否是使用的內(nèi)網(wǎng)IP
[root@k8s-master-q ~]# kubectl describe nodes k8s-master
可以發(fā)現(xiàn),在flannel網(wǎng)絡(luò)模型中,使用的都是各自節(jié)點(diǎn)的內(nèi)網(wǎng)IP, 又不在同一網(wǎng)段,確實(shí)無法訪問。
5、解決方案
目前看來,我只找到了上面博主寫的方案,其他方案未知,即將 IP改為 公網(wǎng)IP。
# master節(jié)點(diǎn)操作
# 修改為使用公網(wǎng)ip
# kubectl annotate node k8s-master-q flannel.alpha.coreos.com/public-ip-overwrite=各節(jié)點(diǎn)公網(wǎng)ip --overwrite
[root@k8s-master-q ~]# kubectl annotate node k8s-master flannel.alpha.coreos.com/public-ip-overwrite=1.12.xxx.xxxx --overwrite
node/k8s-master annotated
[root@k8s-master-q ~]# kubectl annotate node k8s-master-q flannel.alpha.coreos.com/public-ip-overwrite=43.139.xxx.xxxx --overwrite
node/k8s-master-q annotated
# 還需要配置內(nèi)網(wǎng)ip轉(zhuǎn)發(fā)到外網(wǎng)ip(內(nèi)網(wǎng)IP是指服務(wù)器硬件本身的內(nèi)網(wǎng)ip,不是flannel分配的)
# 因?yàn)閒lannel重啟后會重新構(gòu)建iptables規(guī)則,有可能把這幾條就移除掉了,重啟應(yīng)用后如果不能訪問,需要重新執(zhí)行
# iptables -t nat -A OUTPUT -d 私網(wǎng)ip -j DNAT --to-destination 公網(wǎng)ip
[root@k8s-master-q ~]# iptables -t nat -A OUTPUT -d 10.0.12.13 -j DNAT --to-destination 43.139.xxx.xxx
# worker 節(jié)點(diǎn)操作, 同樣改變iptables規(guī)則
[root@k8s-master ~]# iptables -t nat -A OUTPUT -d 10.0.12.2 -j DNAT --to-destination 1.12.xxx.xxx
# 之后重啟相關(guān)應(yīng)用,master節(jié)點(diǎn)和worker節(jié)點(diǎn)都需要操作
# 重啟應(yīng)用
systemctl stop kubelet
systemctl stop docker
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker
更改之后再次查詢:
master節(jié)點(diǎn)和worker節(jié)點(diǎn)都已經(jīng)改了,等待一會即可解決。
參考文章如下:
https://blog.csdn.net/a437936609/article/details/122325282
https://cloud.tencent.com/developer/article/1819134
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_45958218/article/details/127800983
相關(guān)推薦
- 2024-03-09 【Redis】Redisson分布式鎖原理與使用
- 2022-06-19 教你cmd?bat文件中調(diào)用另一個bat文件的方法_DOS/BAT
- 2022-05-11 python?DataFrame數(shù)據(jù)分組統(tǒng)計groupby()函數(shù)的使用_python
- 2023-08-30 liunx shell腳本并發(fā)控制詳解
- 2022-06-08 記錄一次奇怪的springboot cache redis緩存報錯解決
- 2023-03-18 詳解Flutter中key的正確使用方式_Android
- 2022-04-15 ASP.NET?Core基礎(chǔ)之啟動設(shè)置_基礎(chǔ)應(yīng)用
- 2022-08-06 python練習(xí)之循環(huán)控制語句?break?與?continue_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支