使用|使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
本文作者:黄鑫鑫 - Nocalhost 项目核心开发者简介 本文通过使用 Nocalhost 将本地开发机无缝连接到一个远程 Kubernetes 集群, 并在本地使用 Goland 来开发和调试 Kubernetes 集群中的
腾讯云 CODING DevOps 研发工程师。硕士毕业于中山大学数据科学与计算机学院,曾负责过平安云主机及国家超算中心容器云平台等相关业务,熟悉虚拟机,容器,K8s 相关技术,专注于云原生领域
Apache APISIX ingress controller
。Nocalhost 让我们可以使用现有的技术栈来顺畅地开发和调试类似 APISIX ingress controller
的 K8s 应用。本文包括:
- 在 IDE 中部署
APISIX Ingress controller
到远程 Kubernetes 集群 - 使用 Nocalhost 开发和调试 Kubernetes 集群上的
APISIX ingress controller
- 准备一个可用的 Kubernetes 集群。 可以使用任意拥有命名空间管理权限的 Kubernetes 集群
- 确保本地已安装好 Helm v3.0+
- 集群中已安装好 APISIX (APISIX Ingress controller 的依赖)
- GoLand IDE 2020.03+
- 安装 Nocalhost JetBrains 插件
- 安装 Go 1.13 及以上版本
- 在 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 Step 1. 进入 DevMode
- 右键点击
apisix-ingress-controller
工作负载, 选择Start DevMode
- 如果已经将源码克隆到本地,请选择源代码目录。 否则通过输入
apisix-ingress-controller
的源码仓库地址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
【使用|使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller】
apisix-ingress-controller
启动后,通过 http://127.0.0.1:8080/healthz
访问服务, 并检查结果:Step 2. 修改代码并检查结果 现在我们来修改一下代码并看看效果:
- 停止
apisix-ingress-controller
进程 - 在 Goland 中搜索 healthz 并找到 router.go 文件。 将 healthzResponse 的状态代码从 ok 更改为 Hello Nocalhost
- 重新启动进程并在本地检查更改结果
Step 3. 结束开发模式 开发完毕后,我们可以通过以下步骤结束 DevMode:
- 右键点击
apisix-ingress-controller
- 选择并点击
End DevMode
apisix-ingress-controller
结束 DevMode, 并重置 apisix-ingress-controller
到其原始版本。 启用端口转发来看看结束 DevMode 后的结果: 需要注意的是,DevMode 模式下,所有代码更改都只在 开发容器 中生效。退出 DevMode 后,Nocalhost 将会将远程容器重置为原始状态(进入 DevMode 之前的版本)。 通过这种方式,在退出 DevMode 以后,在 DevMode 模式下做的修改都不会影响原有环境。调试 APISIX Ingress Controller 调试应用程序是一件麻烦的事,在 Kubernetes 集群中调试应用程序则更加麻烦。 Nocalhost 可以帮助我们在调试 Kubernetes 集群中的程序时获得和在 IDE 中直接调试本地程序同样的体验。
Step 1. 开启远程调试 我们可以通过以下方式开始远程调试:
- 右键点击
apisix-ingress-controller
并选择Remote Debug
- 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
功能:- 右键点击
apisix-ingress-controller
,并选择Remote Run
- Nocalhost 将会先让
apisix-ingress-controller
进入DevMode
, 并运行在dev config
定义的运行命令
每次更改代码完代码后,Nocalhost 都会自动触发运行命令,将程序运行起来:
总结 通过以上步骤,我们已经学会如何使用 Nocalhost 来开发和调试 Kubernetes 集群中的 APISX ingress controller。 使用 Nocalhost,我们不再需要等待缓慢的本地开发循环反馈,而是通过一种高效的云原生开发方式来得到快速的反馈。
引用
- Apache APISIX getting started guide
- Developing for Apache APISIX Ingress Controller
文章图片
推荐阅读
- 深入理解Go之generate
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件