Lattice 中的 TCP 路由

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

Lattice 是一个开源项目,用于在集群上运行容器化工作负载。 Lattice 包括内置的 http 负载平衡、集群调度程序、带日志流的日志聚合和健康管理。它是使用 Cloud Foundry 组件构建的,即 diego (CF 的下一代运行时)、 gorouter (http 路由器)、 loggregator

到目前为止,Lattice 只支持 http 路由/负载平衡。这将部署在 Lattice 上的应用程序/微服务(工作负载)限制为仅使用 http/s 协议。然而,随着 0.4.0 版本的发布,我们为 Lattice 添加了 tcp 路由/负载平衡功能。现在,您部署在 Lattice 上的应用程序/微服务可以通过任何基于 tcp 的协议获取流量。

在这篇文章中,我将展示一个典型的开发人员使用 Lattice 的工作流程,特别关注如何使用 tcp 路由。以下所有说明都考虑到您使用的是 Lattice 0.4.0 及更高版本。

转到 https://github.com/cloudfoundry-incubator/lattice/releases 并下载特定于您的操作系统的包(目前仅支持 linux 和 OSX)。确保安装了 Vagrant 1.6+ 并执行以下操作:


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

这会启动一个可通过 192.168.11.11 访问的虚拟环境。

您可以使用 Lattice CLI ( ltc ) 与此环境交互,它在您下载的包中可用。要使用这个新部署的 Lattice 环境:


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

到目前为止有什么错误吗?如果是,请参考 https://github.com/cloudfoundry-incubator/lattice#troubleshooting ,如果不是,让我们看看如何在 Lattice 中部署您的应用程序/微服务。

从这里开始,我将假设您已将 ltc 放入您的 PATH 中,以便我们可以从任何目录执行 ltc 命令。

Lattice 适用于 docker 图像(它也支持 droplet,但这是另一篇文章的主题)。因此,构建您要部署的应用程序的 docker 镜像并将其上传到 docker hub(Lattice 目前不支持本地 docker 镜像,但它确实支持私有 docker 注册表 - http://lattice.cf/docs/private-泊坞窗注册表/ )。然后,您可以通过如下运行命令来启动此图像(应用程序)(我将使用 rabbitmq docker 图像):


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

让我们分解一下:

create :命令告诉莱迪思它需要创建/启动一个应用程序
rabbit :您要启动的应用程序的名称
rabbitmq :用于启动应用程序的 docker 镜像。这应该是 docker 镜像格式。
--run-as-root :以 root 用户身份启动正在执行的命令。默认情况下,Lattice 使用在容器创建时创建的非根用户。
--tcp-routes 5672:5672 : (--tcp-routes EXTERNAL_PORT:CONTINER_PORT) 指示 Lattice 保留外部端口并将对外部端口的请求转发到关联的容器端口。容器端口必须在使用 --ports 或 EXPOSE Docker 镜像指令指定的那些端口中。一些外部端口是保留的,不应该用于应用程序。可以 在此处 找到这些端口的列表。

通过以上命令,我们取得的成果如下:

  1. Lattice 创建由 docker 镜像的根 fs 支持的容器
  2. 运行在 Docker 镜像的元数据中编码的命令
  3. 将 192.168.11.11 上的外部端口 (5672) 映射到容器端口

现在你的应用程序在 Lattice 上运行,可以在你使用 --tcp-routes 保留的外部端口的 192.168.11.11 访问。您的应用程序的客户端可以通过任何协议连接并与您的应用程序交互,而不仅仅是 http/s。在 rabbitmq 的情况下,该协议将是 amqp。

现在让我们看看我们还能用 Lattice 做什么。

您可以通过运行以下命令列出在 Lattice 集群上运行的所有应用程序:


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

您可以查看有关您的应用程序在 Lattice 上运行的详细信息,如下所示:


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

Lattice 还允许您在启动应用程序后更新您的 tcp 路由。这可以按如下方式完成:


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

使用此 Lattice 将外部端口 15672 映射到 rabbitmq 的容器端口 5672。 rabbitmq 的客户端现在通过 192.168.11.11:15672 连接到 rabbitmq。

最后,您可以删除在 Lattice 上运行的应用程序,如下所示:


 unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

这是关于如何使用 Lattice 运行需要支持非 http 协议的应用程序的旋风之旅。如果您是莱迪思的新手,您可以在 http://lattice.cf/docs 阅读更多关于莱迪思的信息

我鼓励您尝试 Lattice 和它提供的大量功能,包括 tcp 路由。我们一直在寻求反馈,以使该产品更好,对社区更有用。您可以通过 cf-Lattice 邮件列表 ( https://lists.cloudfoundry.org/archives/list/cf-lattice@lists.cloudfoundry.org/ ) 或 cf-dev 邮件列表 ( https://lists.cloudfoundry .org/archives/list/cf-dev@lists.cloudfoundry.org/ )。