go - 同一网络中的应用程序和服务器之间的通信

标签 go kubernetes continuous-integration circleci

<分区>

我正在开发将在 kubernetes 上运行的 CI/CD 工具。该应用程序将负责创建一个 k8s 作业对象,该对象将被视为一个slave 以运行管道。

图像,slave 将运行完全取决于用户,所以我无法控制它,除了它会在与 CI/CD 应用程序相同的本地网络中运行。

我的问题是;在这种情况下,如何使 CI/CD 工具与从属之间进行通信?

为了为此添加更多上下文,我想创建类似于 Jenkins 的东西。 Jenkins 与 kubernetes 插件一起在 kubernetes 上运行并创建 pod,这些 pod 被视为从属(代理)以运行管道。将在从站中运行的图像完全取决于用户。从站有一个 JNLP 作为 side-car 容器,用于建立连接。如何在 golang 或 python 中实现相同的架构?

到目前为止我做了什么?

我曾尝试对此进行研究,发现 Jenkins 使用套接字建立连接。但是,为了使用套接字,我必须在两侧都有套接字;在服务器端和客户端。据我所知,Jenkins 使用我作为用户提供给它在从站中使用的图像,并且它没有有服务器端套接字。那么它是如何建立连接的呢?

最佳答案

由于 Kubernetes 本身就是 Go,我认为这可以通过 Golang 解决方案轻松实现。假设您将解决方案作为 Kubernetes 服务运行,下面列出了一些我可以开箱即用的值得研究的事情:

  1. 研究 Kubernetes 运算符。运算符(operator)将帮助您轻松扩展 Kubernetes 功能。 https://github.com/operator-framework/getting-started
  2. 木筏。 Raft 是一种旨在易于理解的共识算法。这可以用来实现领导者选举之类的事情,以防您需要实现一个。 https://raft.github.io/
  3. Golang 有原生的 SSH 库,所以这应该使你使用 SSH 的想法变得非常可行。但是,我认为可能有其他替代方案,例如使用 RPC 进行主从之间的通信,因为我可以想象管理不同的证书以对主从进行身份验证可能是一场噩梦。

关于go - 同一网络中的应用程序和服务器之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57757892/

相关文章:

go - 在go lang中使用一个函数的变量在另一个函数中

linux - 即使文件存在,Jenkins 构建也因缺少文件错误而失败

go - Uber Zap 记录器不在日志语句中打印调用者信息

reflection - 如何使用反射制作 map 指针?

loops - 如何填充 map

selenium - 为什么此行必须与Selenium和Docker Swarm一起使用?

google-app-engine - 即使修改了 html 页面,应用程序引擎也返回 304

docker - 使用Docker和Azure Kubernetes(AKS)托管的Angular Application的SSL证书配置

windows - 如何从 docker 容器中的文件到 Windows 容器中的主机

ios - 如何使用预定的机器人在 Xcode 中执行测试操作?