問題描述
無法訪問 Kubernetes 集群外的 NodePort 服務 (Cannot access NodePort service outside Kubernetes cluster)
/code> 是服務暴露的節點端口(通過查看命令 kubectl describe service echoserver
上的字段 NodePort
獲得)</li> </ul>
在瀏覽器上打開 URL 應該會遇到 this 頁面。但是,您將收到一個通用錯誤響應,說明瀏覽器無法訪問該 URL。
使用 netcat 命令發送消息應該會遇到 400 Bad Request 響應,因為它不是正確的格式化的 HTTP 請求。但是,您根本不會得到任何響應,或者 TCP 連接甚至可能一開始就無法建立。
嘗試從集群內部與服務和/或 pod 通信,例如,通過另一個吊艙,完美運行。使用命令 kubectl port‑forward deployment/echoserver 2311:8080
在本地端口轉發部署,然後在瀏覽器中訪問 localhost:2311
或通過 netcat 也可以正常工作(在 WSL 和 Windows 中)。
參考解法
方法 1:
If you want to access it not using localhost you should use your <windows_hosts's_IP:NodePort>
.
So having your deployment and service deployed:
$kubectl get svc,deploy
NAME TYPE CLUSTER‑IP EXTERNAL‑IP PORT(S) AGE
service/echoserver NodePort 10.105.169.2 <none> 8080:31570/TCP 4m12s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m3s
NAME READY UP‑TO‑DATE AVAILABLE AGE
deployment.apps/echoserver 1/1 1 1 4m19s
You can either access it by using localhost:31570
or <windows_hosts's_IP:NodePort>.
In my case 192.168.0.29
is my Windows host's IP:
curl.exe 192.168.0.29:31570
CLIENT VALUES:
client_address=192.168.65.3
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://192.168.0.29:8080/
(by Tiago Silva、kool)