【发布时间】: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-system和default命名空间的 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