使用 Nocalhost 開發 Kubernetes 中的 APISIX Ingress Controller


本文作者:黃鑫鑫 - Nocalhost 項目核心開發者
騰訊雲 CODING DevOps 研發工程師。碩士畢業於中山大學數據科學與計算機學院,曾負責過平安雲主機及國家超算中心容器雲平台等相關業務,熟悉虛擬機,容器,K8s 相關技術,專注於雲原生領域

簡介

本文通過使用 Nocalhost 將本地開發機無縫連接到一個遠程 Kubernetes 集群, 並在本地使用 Goland 來開發和調試 Kubernetes 集群中的 Apache APISIX ingress controller。Nocalhost 讓我們可以使用現有的技術棧來順暢地開發和調試類似 APISIX ingress controller 的 K8s 應用。

本文包括:

  1. 在 IDE 中部署 APISIX Ingress controller 到遠程 Kubernetes 集群
  2. 使用 Nocalhost 開發和調試 Kubernetes 集群上的 APISIX ingress controller

環境准備

  • 准備一個可用的 Kubernetes 集群。 可以使用任意擁有命名空間管理權限的 Kubernetes 集群
  • 確保本地已安裝好 Helm v3.0+
  • 集群中已安裝好 APISIX (APISIX Ingress controller 的依賴)
  • GoLand IDE 2020.03+
  • 安裝 Nocalhost JetBrains 插件
  • 安裝 Go 1.13 及以上版本

部署 APISIX Ingress Controller

按照以下步驟,在 GoLand 中通過 Nocalhost 部署 APISIX Ingress Controller:

  1. 在 GoLand 中打開 Nocalhost 插件
  2. 選擇將要部署 APISIX Ingress Controller 的命名空間
  3. 右鍵點擊選定的命名空間, 選擇 Deploy Application, 然后選擇 Helm Repo 作為安裝方法
  4. 在對話框中 Name 中輸入:apisix-ingress-controller,在 Chart URL 中輸入:https://charts.apiseven.com

部署 APISIX ingress controller

部署完成后,我們通過在 IDE 內啟用端口轉發來測試 apisix-ingress-controller:

  1. 在 Nocalhost 插件的 Workloads 中找到 apisix-ingress-controller ,右鍵點擊並選擇 Port Forward
  2. 添加端口轉發 8080:8080
  3. 在本地訪問 http://127.0.0.1:8080/healthz 並檢查結果

測試部署是否成功

開發 APISIX Ingress Controller

Step 1. 進入 DevMode

  1. 右鍵點擊 apisix-ingress-controller 工作負載, 選擇 Start DevMode
  2. 如果已經將源碼克隆到本地,請選擇源代碼目錄。 否則通過輸入 apisix-ingress-controller 的源碼倉庫地址 https://github.com/apache/apisix-ingress-controller.git 來讓 Nocalhost 克隆源代碼到本地
  3. 等待操作完成,Nocalhost 將在進入 DevMode 后在 IDE 內打開遠程終端

打開遠程終端后,通過在遠程終端中輸入以下命令來啟動 apisix-ingress-controller 進程:

go run main.go ingress --config-path conf/config-default.yaml

apisix-ingress-controller 啟動后,通過 http://127.0.0.1:8080/healthz 訪問服務, 並檢查結果:

進入開發模式

Step 2. 修改代碼並檢查結果

現在我們來修改一下代碼並看看效果:

  1. 停止 apisix-ingress-controller 進程
  2. 在 Goland 中搜索 healthz 並找到 router.go 文件。 將 healthzResponse 的狀態代碼從 ok 更改為 Hello Nocalhost
  3. 重新啟動進程並在本地檢查更改結果

可以看到我們無需重新構建鏡像,幾秒后便可以看到改動的結果:

修改源碼

Step 3. 結束開發模式

開發完畢后,我們可以通過以下步驟結束 DevMode:

  1. 右鍵點擊 apisix-ingress-controller
  2. 選擇並點擊 End DevMode

Nocalhost 將會讓 apisix-ingress-controller 結束 DevMode, 並重置 apisix-ingress-controller 到其原始版本。 啟用端口轉發來看看結束 DevMode 后的結果:
結束開發

需要注意的是,DevMode 模式下,所有代碼更改都只在 開發容器 中生效。退出 DevMode 后,Nocalhost 將會將遠程容器重置為原始狀態(進入 DevMode 之前的版本)。 通過這種方式,在退出 DevMode 以后,在 DevMode 模式下做的修改都不會影響原有環境。

調試 APISIX Ingress Controller

調試應用程序是一件麻煩的事,在 Kubernetes 集群中調試應用程序則更加麻煩。 Nocalhost 可以幫助我們在調試 Kubernetes 集群中的程序時獲得和在 IDE 中直接調試本地程序同樣的體驗。

Step 1. 開啟遠程調試

我們可以通過以下方式開始遠程調試:

  1. 右鍵點擊 apisix-ingress-controller 並選擇 Remote Debug
  2. Nocalhost 將會先讓 apisix-ingress-controller 進入DevMode, 並運行在 dev config 中定義的調試命令

開啟遠程調試

Step 2. 設置斷點

我們在 healthz 函數上設置一個斷點, 設置好斷點后,在瀏覽器中訪問 http://127.0.0.1:8080/healthz ,會觸發斷點,GoLand 會跳到前台。 點擊調試相關按鈕可對程序進行調試:

調試斷點

遠程運行 APISIX Ingress Controller

Nocalhost 不僅僅可以用來遠程調試應用,通過使用 Remote Run 功能,還可以讓為我們快速地在 Kubernetes 集群中運行開發中的應用程序。
我們可以通過以下步驟使用 Remote Run 功能:

  1. 右鍵點擊 apisix-ingress-controller ,並選擇 Remote Run
  2. Nocalhost 將會先讓 apisix-ingress-controller 進入 DevMode, 並運行在 dev config 定義的運行命令
    每次更改代碼完代碼后,Nocalhost 都會自動觸發運行命令,將程序運行起來:

Remote Run

總結

通過以上步驟,我們已經學會如何使用 Nocalhost 來開發和調試 Kubernetes 集群中的 APISX ingress controller。 使用 Nocalhost,我們不再需要等待緩慢的本地開發循環反饋,而是通過一種高效的雲原生開發方式來得到快速的反饋。

引用

一鍵開啟雲原生開發環境

CODING DevOps.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM