在 Kubernetes 中使用 Nocalhost 开发 APISIX Ingress Controller
关 注 微 信 公 众 号 《 云 原 生 C T O 》 更 多 云 原 生 干 货 等 你 来 探 索
专 注 于 云原生技术
分 享
提 供 优 质 云原生开发
视 频 技 术 培 训
面试技巧
, 及 技 术 疑 难 问 题 解答
云 原 生 技 术 分 享 不 仅 仅 局 限 于 Go
、 Rust
、 Python
、 Istio
、 containerd
、 CoreDNS
、 Envoy
、 etcd
、 Fluentd
、 Harbor
、 Helm
、 Jaeger
、 Kubernetes
、 Open Policy Agent
、 Prometheus
、 Rook
、 TiKV
、 TUF
、 Vitess
、 Argo
、 Buildpacks
、 CloudEvents
、 CNI
、 Contour
、 Cortex
、 CRI-O
、 Falco
、 Flux
、 gRPC
、 KubeEdge
、 Linkerd
、 NATS
、 Notary
、 OpenTracing
、 Operator Framework
、 SPIFFE
、 SPIRE
和 Thanos
等
在 Kubernetes 中使用 Nocalhost 开发 APISIX Ingress Controller
本文将引导您使用 Nocalhost
将本地开发机器无缝连接到远程 Kubernetes
集群,从而允许您使用 IDE
开发和调试 Apache APISIX Ingress Controller
。使您能够使用现有技能轻松开发和调试远程应用程序。
先决条件
-
在您的工作站中准备一个可用的
Kubernetes
集群。您可以使用您拥有命名空间管理员权限的任何Kubernetes
集群。 -
已安装
Helm v3.0+
-
GoLand IDE 2020.03+
(在本文中使用GoLand 2021.2
) -
安装
Nocalhost JetBrains
插件 -
安装
Go 1.13
或更高版本
部署 Apache APISIX 入口控制器
我将通过 Nocalhost
在 GoLand
中部署 Apache APISIX Ingress Controller
:
-
在
GoLand
中打开Nocalhost
插件 -
使用集群检查器选择要部署的命名空间。
-
右键单击选定的命名空间,选择
Deploy Application
,然后选择Helm Repo
作为安装方法。 -
在以下对话框中,输入:
apisix-ingress-controllerasName
和https://charts.apiseven.comas Chart URL
。

让我们 apisix-ingress-controller
通过在 IDE
中启用端口转发来测试部署后:
-
在集群检查器中找到
apisix-ingress-controller
工作负载,右键单击并选择Port Forward
-
添加端口转发
8080:8080
-
访问
http://127.0.0.1:8080/healthz
本地并检查结果

开始开发
第 1 步:启动开发模式
-
apisix-ingress-controller
在集群检查器中右键单击部署,选择Start DevMode
-
如果您已经在本地克隆,请选择您的源代码目录,或者通过输入
apache/apisix-ingress-controller
存储库URL
让Nocalhost
为您克隆源代码 -
等待操作,
Nocalhost
进入DevMode
后会在IDE
内打开远程终端
现在 apisix-ingress-controller
通过在远程终端中输入以下命令来启动该过程:
go run main.go ingress --config-path conf/config-default.yaml
启动后,通过访问本地访问服务并检查结果。 apisix-ingress-controllerhttp://127.0.0.1:8080/healthz
第 2 步:更改代码并检查结果
现在我将进行一些代码更改并检查结果。
-
停止
apisix-ingress-controller
进程 -
搜索
healthz
并找到该router.go
文件。healthzResponse
将状态码从更改ok
为Hello Nocalhost
-
再次启动该过程并在本地检查更改结果
步骤 3. 结束 DevMode
现在关闭开发窗口并结束 DevMode
。
-
右键单击
apisix-ingress-controller
集群检查器中的 -
选择
End DevMode
Nocalhost
将apisix-ingress-controller
结束开发模式,并将apisix-ingress-controllerPod
重置为其原始版本。启用端口转发并在结束DevMode
后检查结果。

代码变更:开发模式下的所有代码变更只会在开发容器中生效。
退出开发模式后, Nocalhost
会将远程容器重置为原始状态(代码修改前)。这样,退出开发模式后,代码的修改不会对原有环境造成任何改变或影响。
调试
调试一个应用程序并不容易,在 Kubernetes
集群中调试一个应用程序就更难了。 Nocalhost
可提供与在远程 Kubernetes
集群中调试时在 IDE
中使用的相同的调试体验来提供帮助。
第一步:开始远程调试
我们可以通过以下方式开始远程调试:
-
右键单击
apisix-ingress-controller
并选择Remote Debug
-
Nocalhost
将apisix-ingress-controller
进入DevMode
并运行dev config
自动定义的调试命令

第 2 步:单步执行断点
healthz
现在在函数上设置一个断点。将鼠标悬停在行号左侧,然后单击红点。设置好后, http://127.0.0.1:8080/healthz
在本地浏览器中访问, GoLand
应该会弹出到前台。单击播放按钮关闭请求,进度应继续加载。
另外,由于我启用了 dev.hotReload
,所以每次更改代码时, Nocalhost
都会自动重新运行调试命令。这在您频繁更改和调试代码时非常有用。
远程运行
不仅仅是远程调试, Nocalhost
还提供了一种在 Kubernetes
集群中运行 Go
服务的简单方法,以及热重载!
您可以通过以下方式使用远程运行功能:
-
右键单击
apisix-ingress-controller
集群检查器,选择Remote Run
-
Nocalhost
将apisix-ingress-controller
进入开发模式并dev config
自动运行定义的启动命令
现在每次进行代码更改时, Nocalhost
都会自动触发运行命令。您现在无需复杂配置即可享受 Go
的热重载。
结论
我们已经学习了如何使用 Nocalhost
在 Kubernetes
中开发和调试 APISIX Ingress Controller
。现在,我们可以通过即时反馈循环和高效的云原生开发环境快速迭代,而不是等待缓慢的本地开发过程。
Apache APISIX
Apache APISIX
是一个云原生微服务 API
网关
参考地址 [1]
参考资料
参考地址: https://apisix.apache.org
- 云原生下一步的发展方向是什么?
- 用更云原生的方式做诊断|大规模 K8s 集群诊断利器深度解析
- 多个维度分析k8s多集群管理工具,到底哪个才真正适合你
- 使用 Kube-capacity CLI 查看 Kubernetes 资源请求、限制和利用率
- 使用 Go 在 Kubernetes 中构建自己的准入控制器
- 云原生数仓如何破解大规模集群的关联查询性能问题?
- 云原生趋势下的迁移与灾备思考
- 2022 年不容错过的六大云原生趋势!
- 使用 Prometheus 监控 Golang 应用程序
- 云原生时代下的机遇与挑战 DevOps如何破局
- 如何在云原生格局中理解Kubernetes合规性和安全框架
- 设计云原生应用程序的15条基本原则
- 使用 Operator SDK 为 Pod 标签编写Controller
- Kubernetes Visitor 模式
- 为什么云原生是第二次云革命
- 构建云原生安全的六个重要能力
- 扩展云原生策略的步骤有哪些?
- 七个值得关注的开源云原生工具
- K8S - 创建一个 kube-scheduler 插件
- 如何诊断 Kubernetes 应用程序中的 OOMKilled 错误