使用 consul-agent 和代理作为 sidecar 容器的 ECS fargate

问题描述

我正在尝试在我的 ECS fargate 服务中实现 consul-agent 和代理作为 sidecar 容器。因此,在任务内部,将有 3 个容器在运行:

  • 核心业务服务容器
  • consul-agent-container
  • core-business-consul-proxy-container

所有容器都在 ECS 任务上启动并运行。该节点也已在 consul UI 中注册。但是,该服务未在 consul UI 中启动。

我挖掘并找到了'consul-agent-container'的日志,这是错误日志:

2021/03/12 03:33:14 [错误] http:请求 PUT /v1/agent/check/pass/greeting-fargate-proxy-ttl?note=,错误:CheckID “greeting-fargate-proxy-ttl”没有关联的 TTL 来自=127.0.0.1:43252

这里是我用来连接 consul 的命令。

  1. consul-agent-container:

"exec consul agent -ui -data-dir /consul/data -client="127.0.0.1" -bind="{{ GetPrivateIP }}" -retry-join "172.31.79.139""

  1. core-business-consul-proxy-container:

"exec consul connect proxy -register -service greeting-fargate -http-addr 127.0.0.1:8500 -listen 127.0.0.1:8080 -service-addr 127.0.0.1:3000"

解决方法

HashiCorp 最近宣布支持在 ECS 上运行 Consul 服务网格,使用 Terraform 部署代理和 sidecar 组件。您可能希望将其视为现有工作流程的替代解决方案。

此解决方案目前处于技术预览阶段。您可以在博文 https://www.hashicorp.com/blog/announcing-consul-service-mesh-for-amazon-ecs 中找到更多信息。

,

我没有设法让我的代理使用与您使用的方法相同的方法工作。但我记得在某处读到您应该在服务注册配置中声明您的 Connect 代理

  {
  "service": {
    "name": "web","port": 8080,"connect": { "sidecar_service": {} }
  }
}

完成后,我认为您可以使用以下方法启动代理:

consul connect proxy -sidecar-for <service-id>

我没有验证这一点,因为我使用的应用程序使用 Spring Cloud Consul 来注册服务,而且我没有找到在哪里注册代理,但也许这可以帮助您进一步。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...