使用Gefyra在Kubernetes中实现本地程序开发


在本文中,您将了解如何使用Gefyra简化和加速 Kubernetes 上的本地应用程序开发。Gefyra 为开发人员提供了多种有用的功能。首先,它允许在外部 Kubernetes 集群上运行容器并与内部服务交互。此外,我们可以将 Kubernetes 集群内部服务与本地 Docker 上运行的容器叠加。因此,我们可以同时跨多个开发人员利用单个开发集群。

Gefyra 是Telepresence的替代:不过,这两款工具之间存在一些重大差异:

  • Gefyra 将 Docker 作为必备依赖项,而Telepresence则可选 Docker。
  • 另一方面,Telepresence使用侧载sidecar模式注入代理容器来拦截流量。Gefyra 只是用 "carrier载体 "镜像替换镜像。

 GitHub 存储库。本文中使用的代码可以在 dev 分支中找到。

先决条件:
在 Docker 桌面上使用 Kubernetes。

$ kubectx -c docker-desktop

安装 Gefyra
第一步,我们需要安装 gefyra CLI。文档中有不同环境的安装说明。安装 CLI 后,可以使用以下命令进行验证:

$ gefyra version
[INFO] Gefyra 客户端版本:1.1.2

之后,我们就可以在 Kubernetes 集群上安装 Gefyra 了。下面是在 Docker Desktop Kubernetes 上安装的命令:

$ gefyra up --host=kubernetes.docker.internal

它会使用操作符安装 Gefyra。让我们验证一下 gefyra 命名空间中正在运行的 pod 列表:

$ kubectl get po -n gefyra
name ready status restarts age
gefyra-operator-7ff447866b-7gzkd 1/1 运行中 0 1h
gefyra-stowaway-bb96bccfd-xg7ds 1/1 运行中 0 1h

如果看到正在运行的 pod,说明工具已成功安装。现在,我们可以在 Kubernetes 上使用 Gefyra 开发应用程序了。

Gefyra 在 Kubernetes 上的案例
我们将使用与有关网真和 Skaffold 的文章中完全相同的一组应用程序和用例。首先,让我们分析一下该案例。有三个微服务:first-service、caller-service 和 callme-service。它们都暴露了一个 REST 端点 GET /ping,该端点返回每个微服务的基本信息。为了创建应用程序,我使用了 Spring Boot 框架。我们的架构如下图所示。第一个服务正在调用调用者服务暴露的端点。然后,调用者服务调用 callme-service 暴露的端点。当然,我们将在 Kubernetes 集群上部署所有微服务。

现在,假设我们正在实施一个新版本的调用者服务。我们希望与集群上运行的其他两个应用程序一起轻松地进行测试。因此,我们的目标是将发送到 Kubernetes 集群上调用者服务的流量转发到运行在 Docker 上的本地实例。另一方面,调用者服务的本地实例应调用运行在 Kubernetes 集群上的调用者服务实例所暴露的端点。

详细点击标题