问题描述
我正在尝试在我的 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 的命令。
- consul-agent-container:
"exec consul agent -ui -data-dir /consul/data -client="127.0.0.1" -bind="{{ GetPrivateIP }}" -retry-join "172.31.79.139""
- 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 来注册服务,而且我没有找到在哪里注册代理,但也许这可以帮助您进一步。