AWS Fargate 无法解析私有 DNS Route 53
AWS Fargate can't resolve Private DNS Route 53
我有一个在 ECS 集群上创建 AWS Fargate 的 Cloudformation,以这种方式:
TaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
RequiresCompatibilities:
- FARGATE
Cpu: !Ref ContainerCpu
Memory: !Ref ContainerMemory
ExecutionRoleArn: !Ref ExecutionRole
TaskRoleArn: !Ref ExecutionRole
ContainerDefinitions:
- Name: !Sub ${ContainerName}
Image: 'image-url-here'
Essential: true
HealthCheck:
Command: ["CMD-SHELL", "test -f hc.log"]
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: !Sub '${AWS::Region}'
awslogs-group: !Sub '${FeatureName}-${MicroServiceName}'
awslogs-stream-prefix: !Ref MicroServiceName
Family: !Sub 'family-${FeatureName}-${MicroServiceName}'
NetworkMode: awsvpc
DependsOn: CloudWatchLogGroup
ExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Join ['', [!Ref MicroServiceName, ExecutionRole]]
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: ecs-tasks.amazonaws.com
Action: 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy'
我的 ECS 任务 Fargate 需要访问 EC2 中的 API 即 运行,因此我创建了一个具有以下地址的 DNS 私有托管区域:api.localaccount。但是,当我尝试从我的 Fargate 访问此 API 时,出现以下错误:
System.Net.Http.HttpRequestException: Name or service not known
我知道这个错误是因为我的 AWS Fargate 无法解析 DNS,但我不知道为什么。如果我从 EC2 访问同一个 DNS (api.localaccount),一切正常,所以我认为我的 DNS Route 53 没问题。
要使用私有托管区域,您必须将以下 Amazon VPC 设置设为 true:
- 启用 Dns 主机名
- 启用DnsSupport
ECS 服务默认无法解析 DNS。您必须在服务创建部分明确启用它。启用后,您可以选择 select 命名空间和记录类型。
*所有这些都应该在设置 Route53 和 VPC 配置后完成。在这种情况下,您已经完成了这些。
根据评论。
问题是由于在应用程序中使用了错误的link。因此,这是应用程序级别的问题,而不是 ECS Farage 问题。
我有一个在 ECS 集群上创建 AWS Fargate 的 Cloudformation,以这种方式:
TaskDefinition:
Type: 'AWS::ECS::TaskDefinition'
Properties:
RequiresCompatibilities:
- FARGATE
Cpu: !Ref ContainerCpu
Memory: !Ref ContainerMemory
ExecutionRoleArn: !Ref ExecutionRole
TaskRoleArn: !Ref ExecutionRole
ContainerDefinitions:
- Name: !Sub ${ContainerName}
Image: 'image-url-here'
Essential: true
HealthCheck:
Command: ["CMD-SHELL", "test -f hc.log"]
LogConfiguration:
LogDriver: awslogs
Options:
awslogs-region: !Sub '${AWS::Region}'
awslogs-group: !Sub '${FeatureName}-${MicroServiceName}'
awslogs-stream-prefix: !Ref MicroServiceName
Family: !Sub 'family-${FeatureName}-${MicroServiceName}'
NetworkMode: awsvpc
DependsOn: CloudWatchLogGroup
ExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Join ['', [!Ref MicroServiceName, ExecutionRole]]
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: ecs-tasks.amazonaws.com
Action: 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy'
我的 ECS 任务 Fargate 需要访问 EC2 中的 API 即 运行,因此我创建了一个具有以下地址的 DNS 私有托管区域:api.localaccount。但是,当我尝试从我的 Fargate 访问此 API 时,出现以下错误:
System.Net.Http.HttpRequestException: Name or service not known
我知道这个错误是因为我的 AWS Fargate 无法解析 DNS,但我不知道为什么。如果我从 EC2 访问同一个 DNS (api.localaccount),一切正常,所以我认为我的 DNS Route 53 没问题。
要使用私有托管区域,您必须将以下 Amazon VPC 设置设为 true:
- 启用 Dns 主机名
- 启用DnsSupport
ECS 服务默认无法解析 DNS。您必须在服务创建部分明确启用它。启用后,您可以选择 select 命名空间和记录类型。
*所有这些都应该在设置 Route53 和 VPC 配置后完成。在这种情况下,您已经完成了这些。
根据评论。
问题是由于在应用程序中使用了错误的link。因此,这是应用程序级别的问题,而不是 ECS Farage 问题。