【问题标题】:AWS EKS fargate coredns ImagePullBackOffAWS EKS fargate coredns ImagePullBackOff
【发布时间】:2021-07-03 20:52:48
【问题描述】:

我正在尝试将一个简单的教程应用部署到一个基于 Fargate 的新 kubernetes 集群。

不幸的是,我被困在 coredns pod 的 ImagePullBackOff 上:

Events:
  Type     Reason           Age                  From               Message
  ----     ------           ----                 ----               -------
  Warning  LoggingDisabled  5m51s                fargate-scheduler  Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found
  Normal   Scheduled        4m11s                fargate-scheduler  Successfully assigned kube-system/coredns-86cb968586-mcdpj to fargate-ip-172-31-55-205.eu-central-1.compute.internal
  Warning  Failed           100s                 kubelet            Failed to pull image "602401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/coredns:v1.8.0-eksbuild.1": rpc error: code = Unknown desc = failed to pull and unpack image "602

401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/coredns:v1.8.0-eksbuild.1": failed to resolve reference "602401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/coredns:v1.8.0-eksbuild.1": failed to do request: Head "https://602401143452.dkr.

ecr.eu-central-1.amazonaws.com/v2/eks/coredns/manifests/v1.8.0-eksbuild.1": dial tcp 3.122.9.124:443: i/o timeout
  Warning  Failed           100s                 kubelet            Error: ErrImagePull
  Normal   BackOff          99s                  kubelet            Back-off pulling image "602401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/coredns:v1.8.0-eksbuild.1"
  Warning  Failed           99s                  kubelet            Error: ImagePullBackOff
  Normal   Pulling          87s (x2 over 4m10s)  kubelet            Pulling image "602401143452.dkr.ecr.eu-central-1.amazonaws.com/eks/coredns:v1.8.0-eksbuild.1"

在谷歌搜索时我发现https://aws.amazon.com/premiumsupport/knowledge-center/eks-ecr-troubleshooting/ 它包含以下列表:

To resolve this error, confirm the following:

 - The subnet for your worker node has a route to the internet. Check the route table associated with your subnet.
 - The security group associated with your worker node allows outbound internet traffic.
 - The ingress and egress rule for your network access control lists (ACLs) allows access to the internet.

由于我手动创建了私有子网及其 NAT 网关,因此我尝试在此处找到问题,但找不到任何东西。它们以及安全组和 ACL 在我看来都很好。

我什至将 AmazonEC2ContainerRegistryReadOnly 添加到我的 EKS 角色中,但在发出命令 kubectl rollout restart -n kube-system deployment coredns 后,不幸的是结果相同:ImagePullBackOff

不幸的是,我的想法已经用完了,我被困住了。任何可以帮助我解决此问题的帮助将不胜感激。 ~谢谢


编辑>

在@mreferre 在他的评论中建议通过 *eksctl 创建新集群后,我收到带有链接的 RBAC 错误:https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting_iam.html#security-iam-troubleshoot-cannot-view-nodes-or-workloads

我不确定发生了什么,因为我已经有了


编辑>>

通过 AWS 控制台(Web 界面)创建的集群没有 configmap aws-auth 我使用命令 kubectl edit configmap aws-auth -n kube-system 检索了下面的 configmap

apiVersion: v1
data:
  mapRoles: |
    - groups:
      - system:bootstrappers
      - system:nodes
      - system:node-proxier
      rolearn: arn:aws:iam::370179080679:role/eksctl-tutorial-cluster-FargatePodExecutionRole-1J605HWNTGS2Q
      username: system:node:{{SessionName}}
kind: ConfigMap
metadata:
  creationTimestamp: "2021-04-08T18:42:59Z"
  name: aws-auth
  namespace: kube-system
  resourceVersion: "918"
  selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth
  uid: d9a21964-a8bf-49e9-800f-650320b7444e

【问题讨论】:

  • 我要检查的第一件事是,您分配给 Fargate 配置文件的子网是否与您正在部署的 namespace+tags 匹配,是否有通往 Internet 的路由。如果它们是私有的(它们应该),请确保它们的路由表可以访问 Internet(通过 NAT GW)。您可能还想测试在该子网上部署 EC2 以检查它是否有通往 Internet 的路由,或者您是否在配置中遗漏了某些内容。
  • 您可能想要尝试的另一件事是使用eksctl 实用程序(例如eksctl create cluster --fargate)部署一个新的EKS/Fargate 集群以进行测试和比较。这将创建一个具有全新 EKS 集群的专用 VPC,该集群具有用于 kube-systemdefault 命名空间的 Fargate 配置文件,并且 coredns pod 应自动启动。您可以让他们将您的设置与这个工作设置(显然是您手动创建的)进行比较,看看是否存在特定差异。
  • 是的,这是因为您登录到控制台的用户与您用于使用 eksctl 部署集群的用户(或角色)不同(请参阅 here 了解如何来解决这个问题)。使用控制台用户的访问密钥重新创建集群可能更容易(这将使您无需执行任何操作即可在 CLI 和控制台上进行访问)。
  • 很抱歉给您带来麻烦。仅供参考安装集群的用户does not appear in aws-auth。奇怪的是,如果它是同一用户,您会被拒绝访问。 PS 使用root 用户不是最佳实践,我建议您创建一个单独的管理员用户。
  • 避免这些不匹配的最简单方法是使用您的用户(最好不是root)登录控制台并启动CloudShell 来安装/使用eksctl。 CloudShell 将启动模拟控制台用户。

标签: amazon-web-services kubernetes kubernetes-pod docker-registry aws-fargate


【解决方案1】:

创建一个答案来总结评论中认为可以接受的讨论。设置具有 Fargate 支持的 EKS 集群的最常见(并且可以说更简单)的方法是使用 EKSCTL 并使用 eksctl create cluster --fargate 设置集群。这将为您构建所有管道,您将获得一个没有 EC2 实例或托管节点组的集群,其中两个 CoreDNS pod 部署在两个 Fargate 实例上。请注意,当您通过命令行部署 EKSCTL 时,您最终可能会在 CLI 和控制台之间使用不同的角色/用户。这可能会导致访问被拒绝问题。最好的做法是使用非 root 用户登录 AWS 控制台并使用 CloudShell 使用 EKSCTL 进行部署(CloudShell 将继承相同的控制台用户身份)。 {更多信息在 cmets}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2020-09-03
    • 2020-03-15
    • 1970-01-01
    • 2019-06-25
    • 2020-06-28
    • 2021-11-21
    相关资源
    最近更新 更多