Tar*_*ung 6 service-discovery amazon-web-services amazon-ecs devops
我正在尝试使2个服务通过AWS ECS服务中的服务发现终端节点进行通信。
例:
Service1:运行任务定义以运行nginx和phpfpm
Service2:运行任务定义以运行Redis
现在,我需要使service1容器与service2容器通信
根据互联网上的文档和资源。这是我所做的,无法满足需要。
现在,当使用服务发现端点时,通常采用以下格式
service_discovery_service_name.service_discovery_namespace.
错误日志显示,无法解析名称。
Imr*_*ran 13
根据我们的谈话,这里是正在发生的事情的一些摘要。
nginx在您的情况下)需要使用 AWS ServiceDiscovery 选项与Service2 ( redis)交互并使用SRV记录,则Service1需要知道它需要执行 DNSSRV查找而不是 DNS A(地址)查找。您在这里有多种选择。首先,如果你想继续使用SRV记录,然后使用您的客户端的nginx需要代理的Redis与选择上游服务器service和resolve它们是可用的只有在高端nginx的版本。检查我在有效答案底部测试过的示例 nginx 配置。
还要确保您创建了带有前缀的 AWS 服务发现名称,_http._tcp否则,我resolve/service在没有前缀的 nginx 配置中遇到了配置 SRV选项的问题。
SRV记录而是转到标准A记录查找,那么您将必须使用awsvpc容器模式并选择A选项。service_discovery_service_name.service_discovery_namespace将正常工作。示例 nginx DNS SRV 选项配置:
stream {
resolver 172.31.0.2;
upstream redis {
zone tcp_servers 64k;
server redisservice.local service=_http._tcp resolve;
}
server {
listen 12345;
status_zone tcp_server;
proxy_pass redis;
}
}
Run Code Online (Sandbox Code Playgroud)
一些参考——
https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/ https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html
我想详细阐述@Imran 的详细答案,因为大多数答案都讨论SRVDNS 记录类型并仅显示 Nginx 高级版本的 Nginx 示例(以及SRV)。
如果您使用 ECS Fargate 并配置了ADNS 记录。最重要的是配置一个合适的resolver.
来自文档:
\n\n\n配置名称服务器,用于将上游服务器的名称解析为\n地址,例如:
\n解析器 127.0.0.1 [::1]:5353;
\n
\n\n该地址可以指定为\n域名或 IP 地址,并带有可选端口。如果未指定端口,则使用端口 53。名称服务器以循环方式\n进行查询。
\n
话虽如此,解析器必须解析私有 DNS。因此,我们需要使用NSDNS 记录。\n使用8.8.8.8 n用作解析器将不起作用,因为此 DNS 无法解析专用 DNS。
\n\nNS 代表 \xe2\x80\x98 名称服务器\xe2\x80\x99,此记录指示哪个 DNS 服务器对该域具有权威性(哪个服务器包含实际的 DNS 记录)。一个域通常会有多个 NS 记录,这些记录可以表示该域的主名称服务器和备份名称服务器。
\n
为了获取 DNS 解析器,请运行以下命令:
\naws route53 list-resource-record-sets --hosted-zone-id %HOSTED_ZONE_ID% --query "ResourceRecordSets[?Type == \'NS\']"\nRun Code Online (Sandbox Code Playgroud)\n选择一条资源记录并将其放入 Nginx resolver(包括尾随.)。
Nginx基本模板:
\nevents {\n worker_connections 768;\n}\n\nhttp {\n # DNS Resolver\n resolver ns-###.awsdns-####.com. valid=10s;\n gzip on;\n gzip_proxied any;\n gzip_types text/plain application/json;\n gzip_min_length 1000;\n fastcgi_buffers 16 16k; \n fastcgi_buffer_size 32k;\n\n server {\n\n listen 80;\n \n location / {\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header Host $host;\n proxy_redirect off;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n # This is the important part\n proxy_pass http://ecs-fargate-svc.local:8080;\n }\n\n location = /health-check {\n return 200 \'all good\';\n }\n\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n需要考虑的几点:
\n8080)。我的服务发现:
\n\n文档:
\n\n\n| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |