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

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

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

書上的案例多了一個- -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.
這個參數(shù)用于設置監(jiān)聽地址,默認值是localhost。如果設置為localhost,那么k8s會監(jiān)聽127.0.0.1和::1這兩個地址。
看到這里,大概明白了。問題就是沒有設置- -address參數(shù)引起的。
①在K8S節(jié)點內(nèi),為什么用curl去訪問本機的網(wǎng)卡IP192.168.22.151,會失敗?
如圖:

原因,查看路由表:

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

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

解決辦法
kubectl port-forward 設置參數(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會監(jiān)聽任何地址,不會再拒絕了,所以使用K8S節(jié)點的IP地址去訪問,訪問成功:

總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- k8s kubectl啟動成功,但執(zhí)行命令時報錯解決:The connection to the server localhost:8080 was refused - did you specify
- 解決k8s kubectl啟動失敗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的詳細過程
相關文章
Docker數(shù)據(jù)備份恢復實現(xiàn)過程詳解
這篇文章主要介紹了Docker數(shù)據(jù)備份恢復實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
詳解通過docker和docker-compose實現(xiàn)eureka高可用
這篇文章主要介紹了詳解通過docker和docker-compose實現(xiàn)eureka高可用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
docker?部署hbase并且java?Api連接的操作過程
這篇文章主要介紹了docker?部署hbase并且java?Api連接的操作過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力
這篇文章主要介紹了Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
centos docker容器化部署nginx php項目實踐
這篇文章主要介紹了centos docker容器化部署nginx php項目實踐,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
docker安裝Jenkins配置Gitee SSH密鑰踩坑解決
這篇文章主要為大家介紹了docker安裝Jenkins配置Gitee SSH密鑰踩坑解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08

