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界面失?。?/p>

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

出現(xiàn)這個問題之后,搗鼓了好一段時間,也沒搞出個頭緒。
靈光一閃
后來過了幾天,在看《Kubernetes權(quán)威指南 第4版》這本書時,看到書上有關(guān)于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ù)用于設(shè)置監(jiān)聽地址,默認(rèn)值是localhost。如果設(shè)置為localhost,那么k8s會監(jiān)聽127.0.0.1和::1這兩個地址。
看到這里,大概明白了。問題就是沒有設(shè)置- -address參數(shù)引起的。
①在K8S節(jié)點內(nèi),為什么用curl去訪問本機(jī)的網(wǎng)卡IP192.168.22.151,會失敗?
如圖:

原因,查看路由表:

最后一條路由,通往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這個地址并沒有被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è)置參數(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地址去訪問,訪問成功:

總結(jié)
以上為個人經(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的詳細(xì)過程
相關(guān)文章
docker for windows 容器內(nèi)網(wǎng)通過獨立IP直接訪問的方法
這篇文章主要介紹了docker for windows 容器內(nèi)網(wǎng)通過獨立IP直接訪問的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境
這篇文章主要介紹了詳解如何使用Docker部署Django+MySQL8開發(fā)環(huán)境,文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Docker查看正在運(yùn)行的容器目錄的實現(xiàn)方式
這篇文章主要介紹了Docker查看正在運(yùn)行的容器目錄的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Docker配置MySql環(huán)境的實現(xiàn)步驟
通過使用Docker,開發(fā)人員可以更容易地構(gòu)建、測試和交付應(yīng)用程序,同時減少了環(huán)境配置和依賴項管理的復(fù)雜性,本文主要介紹了Docker配置MySql環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下2024-02-02
Docker Hub運(yùn)行原理及實現(xiàn)過程解析
這篇文章主要介紹了Docker Hub運(yùn)行原理及實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
Docker 修改docker存儲位置 修改容器鏡像大小限制操作
這篇文章主要介紹了Docker 修改docker存儲位置 修改容器鏡像大小限制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

