代码之家  ›  专栏  ›  技术社区  ›  Igor Deruga

fargate错误:无法从专用子网中提取ECR中承载的容器

  •  0
  • Igor Deruga  · 技术社区  · 6 年前

    我试图创建一个如下的体系结构:一个拥有两个子网的VPC(一个子网是公共的,包含一个natgateway和一个internetgateway,另一个子网是私有的)。

    我在一个私有子网中启动了一个fargate服务,它失败并出现以下错误:

    CanNotPullContainerError:API错误(500):获取 https://XYZ.dkr.ecr.us-east-1.amazonaws.com/v2/ :NET/HTTP: 等待连接时请求被取消(超过了client.timeout 等待邮件头时)

    这是我的CloudInformation模板(服务被故意注释掉,ECR图像URL被置乱):

    Resources:
    #Network resources: VPC 
      WorkflowVpc:
        Type: AWS::EC2::VPC
        Properties:
          CidrBlock: "10.0.0.0/16"
          EnableDnsSupport: false
          Tags:
            - Key: Project
              Value: Workflow
    #PublicSubnet
      WorkflowPublicSubnet:
        Type: AWS::EC2::Subnet
        Properties:
          CidrBlock: "10.0.0.0/24"
          VpcId: 
            Ref: WorkflowVpc
      WorkflowInternetGateway:
        Type: AWS::EC2::InternetGateway
      WorkflowVCPGatewayAttachment:
        DependsOn: 
          - WorkflowInternetGateway
          - WorkflowVpc
        Type: AWS::EC2::VPCGatewayAttachment
        Properties:
          InternetGatewayId:
            Ref: WorkflowInternetGateway
          VpcId:
            Ref: WorkflowVpc
      WorkflowElasticIp:
        Type: AWS::EC2::EIP
        Properties:
          Domain: vpc
      WorkflowPublicSubnetRouteTable:
        Type: AWS::EC2::RouteTable
        Properties:
          VpcId: 
            Ref: WorkflowVpc
      PublicSubnetToRouteTable:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          RouteTableId:
            Ref: WorkflowPublicSubnetRouteTable
          SubnetId: 
            Ref: WorkflowPublicSubnet
      WorkflowInternetRoute:
        Type: AWS::EC2::Route
        Properties:
          RouteTableId:
            Ref: WorkflowPublicSubnetRouteTable
          DestinationCidrBlock: 0.0.0.0/0
          GatewayId: 
            Ref: WorkflowInternetGateway
      WorkflowNat:
        DependsOn: 
          - WorkflowVCPGatewayAttachment
          - WorkflowElasticIp
        Type: AWS::EC2::NatGateway
        Properties:
          AllocationId: 
            Fn::GetAtt:
              - WorkflowElasticIp
              - AllocationId
          SubnetId:
            Ref: WorkflowPublicSubnet
    #Private subnet          
      WorkflowPrivateSubnet:
        Type: AWS::EC2::Subnet
        Properties:
          CidrBlock: "10.0.1.0/24"
          VpcId: 
            Ref: WorkflowVpc
      WorkflowPrivateSubnetRouteTable:
        Type: AWS::EC2::RouteTable
        Properties:
          VpcId: 
            Ref: WorkflowVpc
      PrivateSubnetToRouteTable:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          RouteTableId:
            Ref: WorkflowPrivateSubnetRouteTable
          SubnetId: 
            Ref: WorkflowPrivateSubnet
      WorkflowNatRoute:
        Type: AWS::EC2::Route
        Properties:
          RouteTableId:
            Ref: WorkflowPrivateSubnetRouteTable
          DestinationCidrBlock: 0.0.0.0/0
          NatGatewayId: 
            Ref: WorkflowNat
    #Fargate:
      WorkflowFargateTask:
        Type: AWS::ECS::TaskDefinition
        Properties:
          RequiresCompatibilities: 
            - "FARGATE"
          Cpu: "256"
          Memory: "0.5GB"
          ContainerDefinitions:
            - Name: WorkflowFargateContainer
              Image: "XYZ.dkr.ecr.us-east-1.amazonaws.com/workflow:latest"
          NetworkMode: awsvpc
          ExecutionRoleArn: "arn:aws:iam::XXX:role/ecsTaskExecutionRole"
    
      WorkflowCluster:
        Type: AWS::ECS::Cluster
        Properties:
          ClusterName: WorkflowServiceCluster
    
    #  WorkflowService:
    #    DependsOn: 
    #      - WorkflowNatRoute
    #    Type: AWS::ECS::Service
    #    Properties:
    #      Cluster: 
    #        Ref: WorkflowCluster
    #      DesiredCount: 1
    #      TaskDefinition:
    #        Ref: WorkflowFargateTask
    #      NetworkConfiguration:
    #        AwsvpcConfiguration: 
    #          AssignPublicIp: DISABLED
    #          Subnets: 
    #            - Ref: WorkflowPrivateSubnet
    #      LaunchType: FARGATE
    

    我还尝试在公用子网中设置assignpublicip:enabled,它工作得很好,但这不是我的目标。

    所以,我的问题是:我的模板可以吗?这是Fargate/ECR的问题吗?

    另外,调试这种行为的最佳方法是什么?似乎CloudWatch没有关于此错误的日志…

    1 回复  |  直到 6 年前
        1
  •  0
  •   Igor Deruga    6 年前

    跟随 Steve E 的提示我已经发现互联网接入存在,唯一的问题是vpc的这个参数:

    启用dnssupport:false

    当然,当我尝试更新linux包或ping google.com时,它无法解析主机名。切换到“真”解决了问题。