如何透過port-forward命令在本地訪問 k8s 叢集服務

架構成長指南發表於2023-12-26

公眾號「架構成長指南」,專注於生產實踐、雲原生、分散式系統、大資料技術分享

概述

在我們訪問k8s中的pod服務時,一般透過node port對映pod埠進行訪問,還有一種是透過ingress或者istio透過域名方式來訪問,雖然兩種方式能滿足我們需求,但是如果針對臨時訪問,配置起來還是有點複雜和耗時,那麼我們就可以使用 kubectl port-forward來滿足我們需求

port-forward 介紹

kubectl port-forward 是 Kubernetes 命令列工具 kubectl 提供的一個功能,用於在本地主機和 Kubernetes 叢集中的 Pod 之間建立埠轉發。

當你執行 kubectl port-forward 命令時,它會將本地主機上的一個埠與 Kubernetes 叢集中的一個 Pod 的埠進行繫結。這樣,在本地主機上監聽的埠上收到的流量將被轉發到 Pod 的埠上,反之亦然。

這個功能在開發和除錯應用程式時非常有用。以下是一些 kubectl port-forward 的常見用途和好處:

  • 訪問遠端 Pod 的本地服務: 你可以將 Pod 的埠轉發到本地主機,從而能夠直接訪問 Pod 上執行的服務。例如,你可以將一個執行在 Kubernetes 叢集中的資料庫 Pod 的埠轉發到本地,以便在本地開發環境中連線和測試資料庫。

  • 除錯和日誌記錄: 透過將 Pod 的埠轉發到本地,你可以使用本地工具來除錯和監視在 Kubernetes 中執行的應用程式。你可以使用本地的偵錯程式、日誌記錄工具或其他開發工具來檢查應用程式的狀態、除錯問題或檢視日誌。

  • 繞過 Kubernetes 服務和負載均衡器: 有時候,你可能想直接訪問執行在 Kubernetes 中的應用程式,而不經過 Kubernetes 的服務發現和負載均衡機制。透過將 Pod 的埠轉發到本地,你可以繞過這些機制,直接連線到應用程式。

kubectl port-forward 命令的基本語法如下:

  kubectl port-forward <pod-name> [local-port:]pod-port [-n namespace]
  
  kubectl port-forward deployment/<deployment-name> [local-port:]pod-port [-n namespace]

基於以上介紹下面對port-forward命名進行一個簡單驗證

Kubectl 安裝

  1. 下載
   curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"

  1. 將 kubectl 置為可執行檔案:
chmod +x ./kubectl
  1. 將可執行檔案 kubectl 移動到系統可定址路徑 PATH 內的一個位置:
sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl

說明:

確保 /usr/local/bin 在你的 PATH 環境變數中。

  1. 測試一下,確保你安裝的是最新的版本:
kubectl version --client

或者使用下面命令來檢視版本的詳細資訊:

kubectl version --client --output=yaml
  1. 安裝外掛後,清理安裝檔案:
rm kubectl kubectl.sha256

配置kubectl

訪問rancher控制檯,下載kubeCofig檔案

執行cd 到當前使用者跟目錄,建立.kube資料夾

cd & mkdir .kube & cd .kube

copy下載叢集配置檔案到.kube目錄下,假設檔案路徑為:/Users/g2/Downloads/ ,檔名為:pdc-demo.yaml,那麼命令如下

mv /Users/g2/Downloads/pdc-demo.yaml ./config

執行kubectl get pods 檢視配置是否生效,返回如下資訊即生效

埠轉發配置驗證

下面使用port-forward命令對叢集中的elastic-job和eureka進行本地訪問

elatic-job訪問驗證

如下圖,假如要訪問elatic-job

那麼執行以下命令,這裡的命令表示訪問本地8080埠轉發的pod上,pod的埠為80

kubectl port-forward elastic-job-86fc7b856-jxflx 8080:80

本地請求8080埠 地址,效果如下圖

eureka訪問驗證

eureka的pod埠也為80對映到本地埠為8762

 kubectl port-forward eureka-5d4cf57b88-l8bgd  8762:80

可以看到訪問成功

相關文章