环境准备
- 准备一个可用的 Kubernetes 集群。可使用任意拥有命名空间管理权限的 Kubernetes 集群
- 本地已安装好 Helm v3.0+
- 集群中已安装好 Apache APISIX
- GoLand IDE 2020.03+ (本文应用的是 2021.2 版本)
- 安装 Nocalhost JetBrains plugin 插件
- 安装 Go 1.13 或更高版本
部署 Apache APISIX Ingress Controller
在 GoLand 中通过 Nocalhost 部署 Apache APISIX Ingress Controller,操作如下:
- 在 GoLand 中打开 Nocalhost 插件
- 选择将要部署 APISIX Ingress Controller 的命名空间
- 右键点击选定的命名空间,选择
Deploy Application
,然后选择Helm Repo
作为安装方法 - 在下面的对话框中:
- 在
Name
中输入:apisix-ingress-controller
- 在
Chart URL
中输入:https://charts.apiseven.com
部署完成后,我们通过在 IDE 内启用端口转发来测试 apisix-ingress-controller
:
- 在 Nocalhost 插件的 Workloads 中找到
apisix-ingress-controller
,右键点击并选择Port Forward
- 添加端口转发
8080:8080
- 在本地访问
http://127.0.0.1:8080/healthz
并检查结果
开发
步骤一:进入开发模式
- 右键点击
apisix-ingress-controller
工作负载,选择Start DevMode
- 如果您已经将源码克隆到本地,请选择您的源代码目录。否则通过输入仓库地址 https://github.com/apache/apisix-ingress-controller.git 来让 Nocalhost 克隆你的源代码到本地
- 等待操作完成,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
访问服务,并检查结果。
步骤二:修改代码并检查结果
现在我们来修改一下代码并看看效果:
- 停止
apisix-ingress-controller
进程 - 在 Goland 中搜索
healthz
并找到router.go
文件。将healthzResponse
的状态代码从ok
更改为Hello Nocalhost
- 重新启动进程并在本地检查更改结果
步骤三:结束开发模式
现在关闭开发窗口并退出开发模式:
- 右键点击
apisix-ingress-controller
- 选择
End DevMode
Nocalhost 将使 apisix-ingress-controller
结束 DevMode, 并重置 apisix-ingress-controller
到其原始版本。启用端口转发来看看退出开发模式后的结果。
注意:在开发模式下修改代码时,所有代码更改都只在开发容器中生效。
退出 DevMode 后,Nocalhost 将会将远程容器重置为原始状态(进入 DevMode 之前的版本)。这样,在退出 DevMode 后,对代码进行修改不会对原始环境造成任何更改或影响。
调试
调试应用程序是一件麻烦的事,在 Kubernetes 集群中调试应用程序则更加麻烦。但 Nocalhost 可以帮助我们在调试 Kubernetes 集群中的程序时获得和在 IDE 中直接调试本地程序同样的体验。
步骤一:开启远程调试
我们可以通过以下方式开启远程调试
- 右键点击
apisix-ingress-controller
并选择Remote Debug
- Nocalhost 将会先让
apisix-ingress-controller
进入 DevMode,并运行在dev config
定义的调试命令
步骤二:设置断点
在 healthz
函数上设置一个断点。悬停在行号左侧,然后点击红点。设置好断点后,在浏览器中访问 http://127.0.0.1:8080/healthz
,会触发断点,GoLand 会跳到前台。点击调试相关按钮可对程序进行调试。
此外,因为我们启用了 dev.hotReload
,所以每次更改代码时,Nocalhost 将自动重新运行调试命令。这可以让我们频繁更改和调试代码时变得方便很多。
远程运行
Nocalhost 不仅仅可以远程调试,还为我们在 Kubernetes 集群中运行服务以及热加载提供了一种更简单的方式。
我们可以通过以下步骤使用 Remote Run 功能:
- 右键点击
apisix-ingress-controller
,并选择Remote Run
- Nocalhost 将会先让
apisix-ingress-controller
进入 DevMode,并运行在dev config
定义的运行命令
每次更改代码完代码后,Nocalhost 都会自动触发运行命令,将程序运行起来。
总结
通过本文,我们为大家展示了如何使用 Nocalhost 来开发和调试 Kubernetes 集群中的 Apache APISIX Ingress Controller。借助 Nocalhost 的能力,我们不再需要等待缓慢的本地开发过程,而是可以通过即时反馈和高效的云本地开发环境进行快速部署与迭代.