使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller

摘要:
Nocalhost允许我们使用现有技术堆栈来顺利开发和调试类似于APISIX Express控制器的K8s应用程序。调试APISIXIIngressController以调试应用程序很麻烦。在Kubernetes集群中调试应用程序更麻烦。Nocalhost可以帮助我们在Kubernetes集群中调试程序时获得与在IDE中直接调试本地程序相同的体验。

本文作者:黄鑫鑫 - 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

免责声明:文章转载自《使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL 集群Docker简介以及安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Libevent:2设置

Libevent有一些整个进程共享的全局设置。这些设置会影响到整个的库。因此必须在调用Libevent其他函数之前进行设置,否则,LIbevent就会陷入不一致的状态。 一:Libevent中的日志信息 Libevent可以记录内部的error和warning信息,而且如果在编译时设置的话,它还可以记录debug消息。默认情况下,这些信息都会写到stde...

CodeBlocks(17.12) 代码调试基础方法&快捷方式

1       printf输出代码关键字查找bug 这个是最简单最容易想到的方法,一般初期开始接触c语言,并用其从事简单代码编辑的时候都会很容易就习惯上这种调试方法,对一些特殊情况的实用率可能是最高的(比如结构难以想象的复杂数据结构之类的) 2       用软件自带的Split view来查看   在CodeBlocks的编辑界面右键找到Split...

Kubernetes角色访问控制RBAC和权限规则(Role+ClusterRole)

文章转载自:https://blog.csdn.net/BigData_Mining/article/details/88849696 基于角色的访问控制(Role-Based Access Control, 即”RBAC”)使用”rbac.authorization.k8s.io” API Group实现授权决策,允许管理员通过Kubernetes AP...

MySQL常见问题

1、mysql如何做分页 mysql数据库做分页用limit关键字,它后面跟两个参数startIndex和pageSize 2、mysql引擎有哪些,各自的特点是什么? innodb和myisam两个引擎,两者区别是innodb支持事物,myisam不支持innodb支持外键,myisam不支持innodb不支持全文索引,myisam支持全文索引innod...

Window Services的调试和非托管dll的引用及其他一些注意问题

一个asp.net项目,客户提出需求,需要增加即时短信提醒功能;因为项目中使用到GPRS模块做无线通讯,还可以用作发送短信,就用了这个GPRS模块发短信提醒;这个即时短信提醒功能,计划用window services实现;然后修改表结构,开始window services的代码编写。代码编写完成后,开始调试。测试时才发现,window services测试...

使用VS调试时,被调试进程如何被断下来的。

不是什么新鲜的东西,很多书上写的非常详细了,不过有人问到,简要的扯下这个VS如何断下进程的。 ++++++++++++++++++++++++++ 当用VS的时候,按下F10后,为什么能够停在程序的入口处呢? 这个问题首先从windows API CreateProcess的Process Creation Flags说起。如果在创建进程的时候加了这个D...