本地开发Kubernetes微服务远程调试工具 - kubefwd

转载请注明来来源:https://janrs.com/87qz


项目地址:https://github.com/txn2/kubefwd

kubefwd帮助实现了在本地工作站上开发应用程序和服务的无缝和高效方式。在本地开发打算与Kubernetes集群中的其他服务进行交互的应用程序。

kubefwd允许具有连接字符串(如 http://elasticsearch:9200/tcp://db:3306) 的应用程序通信到远程集群。kubefwd可用于减少或消除对本地环境特定连接配置的需要。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmNHzxTH-1679715494128)(https://janrs.com/wp-content/uploads/2023/03/kubefwd.png “Kubernetes微服务开发调试工具 - kubefwd”)]

在微服务架构中开发服务会带来本地开发的挑战,特别是当你所开发的服务需要与其他服务的混合物进行交互时。微服务和其他应用程序一样,很少是自成一体的,往往需要访问数据库、认证服务和其他公共或私人API。松散耦合的应用仍然有耦合,它们发生在应用堆栈的更高一层,并且经常通过TCP网络。

kubectl port-forward

kubectl命令为使用Kubernetes集群提供了大量的功能,其中之一就是端口转发命令。将本地工作站上的一个或多个端口转发到Kubernetes服务、部署或单个pod是一个简单的命令。kubectl port-forward很可能是作为一个调试工具开发的,而且在这方面很好用。

在大多数情况下,对Kubernetes服务进行端口转发是合理的。一个Kubernetes服务可以监听并转发到相关Pod的一个或多个端口。服务是一种持久的资源,因为它们提供了一种一致的方式来到达一个Pod。Pod可以来来去去,而服务可以持续存在并在有Pod时找到合适的Pod。

下面是一个Kubectl端口转发命令的例子,将本地工作站的8080端口转发到ok服务的8080,另外将本地工作站的8081端口转发到ok服务的80端口,在命名空间the-project中执行命令:


kubectl port-forward service/ok 8080:8080 8081:80 -n the-project

#

通过 http://localhost:8081/http://localhost:8080/ 访问该服务。额外的服务可以通过后台命令或打开新的终端并发出更多的kubectl端口转发命令来进行端口转发。

kubectl port-forward可以方便地对服务、部署或直接对集群中的Pod进行一次性的快速端口转发访问。你的应用程序可以使用环境变量或配置文件,以及设置所有需要的转发的脚本来启动你的本地应用程序。kubectl port-forward对于调试来说是很好的,但是作为一个开发工具来说,就显得有些不足。

kubefwd

kubefwd是作为一个命令行工具开发的,用于转发Kubernetes服务,因为它们出现在一个命名空间内。运行kubefwd允许你从本地工作站访问任何服务,就像你从集群上同一命名空间的另一个Pod中访问一样。

在下面的例子中,我从-项目命名空间转发服务:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPN3tolW-1679715494130)(https://janrs.com/wp-content/uploads/2023/03/kubefwd_ani.gif “kubernetes微服务开发调试工具 - kubefwd”)]

上面的例子发出了以下命令:


sudo kubefwd services -n the-project

#

需要sudo来允许kubefwd访问本地工作站的/etc/hosts。当kubefwd运行时,DNS条目被临时放置在/etc/hosts中,将名称空间中发现的所有服务名称指向本地工作站的回环网络接口。sudo也被要求允许绑定低端口号,如分配给本地工作站的IP地址上的80端口。如果你没有本地工作站的管理员权限或者不希望使用sudo,你可以在docker容器中运行kubefwd。我将在本文中进一步阐述Docker的具体细节。

在kubefwd开始从命名空间转发服务后,它们可以直接在本地工作站上访问。上面的例子说明了使用curl调用80端口的HTTP服务ok,以及9200端口的Elasticsearch。

在本地访问远程Kubernetes集群上project命名空间的80端口上监听的名为ok的服务:


curl http://ok:80

#

本地访问一个名为elasticsearch的服务,该服务在远程Kubernetes集群的project命名空间的9200端口上监听:


curl http://elasticsearch:9200

#

kubefwd给每个服务转发自己的IP地址,允许多个服务使用相同的端口,就像他们在集群中可能使用的那样。你可能有几个服务响应80或8080端口,或者有多个数据库,如 db-customer:3306db-auth:3306

安装kubefwd

MacOs

在MacOs上安装kubefwd很简单,只需使用homebrew即可:


brew install txn2/tap/kubefwd
#

Linux

请查看Github上的kubefwd发布部分,了解基于Linux操作系统或Docker容器的.deb、.rpm、.snap和.tar.gz等预编译的二进制发行版本。

Windows

kubefwd还没有在Windows上进行测试。

Docker 安装

将kubefwd添加到现有的docker容器中,用Github上的kubefwd发行版中的一个二进制发行版来安装它。你也可以使用容器txn2/kubefwd作为其他项目的基础容器。

txn2/kubefwd基于Alpine linux 3.7,只包含kubefwd linux二进制文件和curl工具(可选)。如果你感到好奇,请看txn2/kubefwd的源Docker文件。

kubefwd不需要kubectl来运行。然而,kubefwd确实需要kubectl的配置来连接到集群。


docker run --name fwd -it --rm \     -v $HOME/.kube/config:/root/.kube/config \     txn2/kubefwd services -n the-project
#

用其内置的curl命令测试正在运行的Docker容器:


docker exec fwd curl -s http://ok

#

转载请注明来来源:https://janrs.com/87qz

你可能感兴趣的:(kubernetes,微服务,docker)