0

我的 AWS ECS Fargate 集群上运行了多个微服务。在一个任务(pod)中,会有多个容器(1 个用于核心业务服务的容器和另外 3 个 sidecar 容器)。以下是这些容器的列表:

  • 核心业务服务容器(在特定端口上运行核心业务服务)
  • consul-agent 容器(运行 consul-agent 并将其与 consul-master 连接)
  • consul-template 容器(从 consul 获取服务信息并更新 haproxy.cfg)
  • haproxy 容器(从 consul-template 获取 haproxy.cfg 并运行)

所有这些容器都已启动并运行良好。问题是重新加载haproxy。由于 consul-template 负责更新 haproxy.cfg 文件,我是否需要在 consul-template 本身上添加一些配置来更新 haproxy?

这是我目前用于 consul-template 的命令:

consul-template -consul-addr=xx.xx.xx.xx:8500 -template /etc/consul-template/data/haproxy.cfg.ctmpl:/etc/consul-template/data/haproxy.cfg

我可以尝试什么来实现这一目标?

4

1 回答 1

1

我目前有完全相同的问题,但对于 Nginx。

根据我的研究,没有好的解决方案。似乎可行的方法是安装卷

-v /var/run/docker.sock:/var/run/docker.sock

在领事模板容器上。

我看到你正在使用:

consul-template -consul-addr=xx.xx.xx.xx:8500 -template /etc/consul-template/data/haproxy.cfg.ctmpl:/etc/consul-template/data/haproxy.cfg

为了在 consul-template 呈现新的配置文件后运行命令,请使用以下内容:

consul-template -consul-addr=xx.xx.xx.xx:8500 -template /etc/consul-template/data/haproxy.cfg.ctmpl:/etc/consul-template/data/haproxy.cfg:docker run haproxy-container command-to-reload-haproxy

暗示

我发现使用 consul-template 配置文件更具可读性,这里的语言非常明确: https ://github.com/hashicorp/consul-template/blob/master/docs/configuration.md 。

使用这种方法,您将拥有一个用于 consul-template 的配置文件(例如 consul_template_config.hcl),例如:

consul {
  address = "consul-address:8500"
}

template {
  source = "/etc/consul-template/data/haproxy.cfg.ctmpl"
  destination = "/etc/consul-template/data/haproxy.cfg"
  command = "docker run haproxy-container command-to-reload-haproxy"
}

然后,您运行 consul-template 容器使用

consul-template -config /path/to/consul_template_config.hcl

或使用

consul-template -config /path/to/folder/containing->consul_template_config.hcl (This approach is more advanced, and lets you have consul-template-configs across multiple files, and not only in 1 like consul_template_config.hcl)

我知道使用这个 docker 卷(安全警告)不是一个好的解决方案,但这是我能找到的关于我们的用例的内容。

于 2021-06-17T12:12:12.227 回答