kubectl port-forward的踩坑過程及解決
kubectl port-forward踩坑
最近在學(xué)習(xí)k8s,直接使用命令部署應(yīng)用并給外界訪問:
kubectl run nginx --image nginx:latest kubectl port-forward pod/nginx 80:80 #將本機(jī)80端口轉(zhuǎn)發(fā)至Pod的80端口
然后本地PC用瀏覽器訪問NodeIP:80,訪問nginx界面失敗:

在k8s節(jié)點(diǎn)里面用curl訪問,出現(xiàn)了神奇現(xiàn)象:直接curl節(jié)點(diǎn)的物理網(wǎng)卡地址192.168.22.151,訪問失??;而curl localhost或127.0.0.1,可以返回結(jié)果。
這個(gè)192.168.22.151是k8s節(jié)點(diǎn)的ens160物理網(wǎng)卡的地址。

出現(xiàn)這個(gè)問題之后,搗鼓了好一段時(shí)間,也沒搞出個(gè)頭緒。
靈光一閃
后來過了幾天,在看《Kubernetes權(quán)威指南 第4版》這本書時(shí),看到書上有關(guān)于port-forward的用法:

書上的案例多了一個(gè)- -address參數(shù)。kubectl port-forward --help查看參數(shù)說明
Options:
- -address=[localhost]: Addresses to listen on (comma separated). Only accepts IP addresses or localhost as a value. When localhost is supplied, kubectl will try to bind on both 127.0.0.1 and ::1 and will fail if neither of these addresses are available to bind.
這個(gè)參數(shù)用于設(shè)置監(jiān)聽地址,默認(rèn)值是localhost。如果設(shè)置為localhost,那么k8s會(huì)監(jiān)聽127.0.0.1和::1這兩個(gè)地址。
看到這里,大概明白了。問題就是沒有設(shè)置- -address參數(shù)引起的。
①在K8S節(jié)點(diǎn)內(nèi),為什么用curl去訪問本機(jī)的網(wǎng)卡IP192.168.22.151,會(huì)失敗?
如圖:

原因,查看路由表:

最后一條路由,通往192.168.22.0網(wǎng)段的數(shù)據(jù)包由本機(jī)ens160接口轉(zhuǎn)發(fā)出去,而ens160接口IP是192.168.22.151。
由于沒有設(shè)置- -address參數(shù),192.168.22.151這個(gè)地址并沒有被K8S監(jiān)聽,所以從ens160接口出去的訪問界面的流量被K8S拒絕了。
②在K8S外部,為什么用PC瀏覽器去訪問IP192.168.22.151,會(huì)失敗?
PC的IP也是沒有被K8S監(jiān)聽,訪問界面的流量被拒絕了,所以用瀏覽器訪問失敗。
如圖:

③在K8S節(jié)點(diǎn)內(nèi),用curl訪問 127.0.0.1或者localhost,能夠訪問成功。

解決辦法
kubectl port-forward 設(shè)置參數(shù)- - address 0.0.0.0
kubectl run nginx --image nginx:latest kubectl port-forward --address 0.0.0.0 pod/nginx 80:80
K8S會(huì)監(jiān)聽任何地址,不會(huì)再拒絕了,所以使用K8S節(jié)點(diǎn)的IP地址去訪問,訪問成功:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- k8s kubectl啟動(dòng)成功,但執(zhí)行命令時(shí)報(bào)錯(cuò)解決:The connection to the server localhost:8080 was refused - did you specify
- 解決k8s kubectl啟動(dòng)失敗Unit kubelet.service entered failed state.問題
- K8s使用kubectl訪問api-server失敗,node“XXX“?not?found的解決方案
- Windows下安裝并使用kubectl查看K8S日志的操作方法
- 詳解kubectl資源管理命令(陳述式)
- kubectl?命令詳解
- centos系統(tǒng)安裝kubectl和部署kube-apiserver的詳細(xì)過程
相關(guān)文章
Docker數(shù)據(jù)備份恢復(fù)實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Docker數(shù)據(jù)備份恢復(fù)實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
詳解通過docker和docker-compose實(shí)現(xiàn)eureka高可用
這篇文章主要介紹了詳解通過docker和docker-compose實(shí)現(xiàn)eureka高可用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
docker?部署hbase并且java?Api連接的操作過程
這篇文章主要介紹了docker?部署hbase并且java?Api連接的操作過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
docker部署高斯數(shù)據(jù)庫的詳細(xì)步驟
文章詳細(xì)介紹了如何在Docker中部署高斯數(shù)據(jù)庫(openGauss),包括安裝Docker、拉取鏡像、運(yùn)行容器、設(shè)置環(huán)境變量和掛載數(shù)據(jù)卷等步驟,還提供了連接和配置遠(yuǎn)程連接的指導(dǎo),感興趣的朋友一起看看吧2024-12-12
Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力
這篇文章主要介紹了Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
centos docker容器化部署nginx php項(xiàng)目實(shí)踐
這篇文章主要介紹了centos docker容器化部署nginx php項(xiàng)目實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比
大家好,本篇文章主要講的是三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
docker安裝Jenkins配置Gitee SSH密鑰踩坑解決
這篇文章主要為大家介紹了docker安裝Jenkins配置Gitee SSH密鑰踩坑解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

