Nomad系列-Nomad网络模式

打印 上一主题 下一主题

主题 517|帖子 517|积分 1551

系列文章

概述

Nomad 的网络和 Docker 的也有很大不同, 和 K8s 的有很大不同. 另外, Nomad 不同版本(Nomad 1.3 版本前后)或是否集成 Consul 及 CNI 等不同组件也会导致网络模式各不相同. 本文详细梳理一下 Nomad 的主要几种网络模式
在Nomad 1.3发布之前,它自身并不支持发现集群中运行的其他应用程序。在集群中调度任务时,这是一个非常基本的要求。Nomad依赖于Consul来发现其他“服务”,并为注册和获取服务记录提供一流的支持,这使得事情变得更容易。Consul通过各种机制提供记录,例如REST API,DNS和Consul模板,这些模板在可以注入到应用程序中的Go模板中呈现服务的确切IP/端口。
学习 Nomad 的一个难点在于, Nomad 往往和 Consul 一起运行, 那么对于这种情况来说,一个主要的学习曲线是,我们必须首先了解Consul是如何工作的,部署一个Consul集群, 同时要融会贯通 2 个软件就很难了。Nomad 1.3 解决了这个问题的一部分(即不需要运行Consul就可以进行基本的服务发现),非常适合刚刚开始使用基于Nomad的网络。
场景一: 在主机上公开应用


从最简单的用例开始:你有一个 redis 容器,你想把它暴露给主机。 相当于我们想要做的docker run是 :
  1. docker run --rm -p=6379 redis
复制代码
此命令公开主机上的动态端口。要查看端口号到底是什么,您可以执行 docker ps 并在 PORTS 下找到类似于 0.0.0.0:49153->6379/tcp 的输出。
  1. $ redis-cli -p 49153               
  2. 127.0.0.1:49153> ping
  3. PONG
复制代码
那么, 在 Nomad 中相同的操作如何实现?
  1. job "redis" {
  2.   type        = "service"
  3.   group "redis" {
  4.     network {
  5.       mode = "host"
  6.       port "redis" {
  7.         to = 6379
  8.       }
  9.     }
  10.     task "redis" {
  11.       driver = "docker"
  12.       config {
  13.         image = "redis"
  14.         ports = ["redis"]
  15.       }
  16.     }
  17.   }
  18. }
复制代码
在几行配置中,我们有一个正在运行的Docker容器,它公开了一个动态端口 30627:

我们可以通过主机上的 redis-cli 连接到它:
  1. $ redis-cli -p 30627
  2. 127.0.0.1:30627> ping
  3. PONG
复制代码
<blockquote>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表