簡體   English   中英

ECS 服務:如果未將公共 ip 分配給服務任務,則無法從 ECR 注冊表中提取 docker 映像

[英]ECS Service: can't pull docker image from ECR registry without assign public ip to service tasks

我有以下定義ECS 服務的 cloudformation 堆棧:

ApiService:
    Type: AWS::ECS::Service
    DependsOn:
     - LoadBalancerListener80
     - LoadBalancerListener443
    Properties:
      Cluster: !Ref EcsClusterArn
      DeploymentConfiguration:
        MaximumPercent: 200
        MinimumHealthyPercent: 100
      DeploymentController:
        Type: ECS
      DesiredCount: 1
      HealthCheckGracePeriodSeconds: 10
      LaunchType: FARGATE
      LoadBalancers:
        - ContainerName: !Join ['-', ['container', !Ref AWS::StackName]]
          ContainerPort: !Ref Port
          TargetGroupArn: !Ref LoadBalancerTargetGroup
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED # <-- if disabled, pulling from ecr registry fails
          SecurityGroups:
            - !Ref ApiServiceContainerSecurityGroup
          Subnets: !Ref Subnets
      SchedulingStrategy: REPLICA
      ServiceName: !Ref AWS::StackName
      TaskDefinition: !Ref ApiServiceTaskDefinition

我注意到,如果不啟用公共 IP 自動分配,服務任務無法從 ECR 注冊表中提取 docker 映像。 我不明白為什么我需要容器擁有公共 ip 來從注冊表中提取圖像......服務安全組允許所有出站流量,子網可以通過互聯網網關訪問互聯網,並且 IAM 角色允許從ECR ...那么為什么需要公共 ip? 我不希望我的容器有公共 ip,它們應該只能在 VPC 內部訪問。 或者我誤解了,這只是將收到公共 ip 的任務(無論出於何種原因),而容器在 VPC 內仍然是私有的?

“IAM 角色允許從 ECR 中提取”

IAM 角色只是授予它權限,它不提供網絡連接。

“子網可以通過互聯網網關訪問互聯網”

我想您會發現 Internet 網關僅提供對分配給它們的公共 IP 資源的 Internet 訪問。

ECR 是一項存在於您的 VPC 之外的服務,因此您需要以下其中一項才能建立到 ECR 的網絡連接:

  1. 公共 IP。

  2. NAT 網關,帶有到子網中 NAT 網關的路由。

  3. ECR 接口 VPC 終端節點,帶有到子網中終端節點的路由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM