使用 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

環境準備:

部署 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

部署完成後,我們通過在 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 都會自動觸發運行命令,將程序運行起來:

總結 

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

引用 

1. Apache APISIX getting started guide

https://apisix.apache.org/docs/ingress-controller/getting-started

2. Developing for Apache APISIX Ingress Controller

https://apisix.apache.org/docs/ingress-controller/development

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/YpI6AmSVyYkq--lTguFKAg