【问题标题】:kubernetes "unauthorized: authentication required"kubernetes“未经授权:需要身份验证”
【发布时间】:2018-10-16 11:48:27
【问题描述】:

我有一个 GKE 集群,它使用 AWS ECR 存储库来拉取 docker 映像。这些是我遵循的步骤。

使用此命令创建了一个秘密

# cat > /tmp/image-pull-secret.yaml << EOF
apiVersion: v1
kind: Secret
metadata:
  name: myregistrykey
data:
  .dockerconfigjson: $(aws ecr get-authorization-token --output json | jq -n 'input.authorizationData | {auths: (reduce .[]  as $d ({}; . + {($d.proxyEndpoint|sub("https?://";"")): {auth:$d.authorizationToken}}))}' | (base64 -w0 2>/dev/null || base64) )
type: kubernetes.io/dockerconfigjson
EOF

# kubectl apply -f /tmp/image-pull-secret.yaml

已创建部署但出现错误

# cat abc_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: abc-deployment
  labels:
    app: abc
    env: development
spec:
  replicas: 3
  selector:
    matchLabels:
      app: abc
      env: development
  template:
    metadata:
      labels:
        app: abc
        env: development
    spec:
      containers:
      - name: abc
        image: 34235354354.dkr.ecr.us-east-1.amazonaws.com/dev-abc:1.1.1
        ports:
        - containerPort: 8080
      imagePullSecrets:
        - name: myregistrykey

我得到的错误 ++++++++++++++++++++

  Normal   Pulling                1m (x2 over 1m)  kubelet, gke-puppy-default-pool-e701eb52-6gdp  pulling image "34235354354.dkr.ecr.us-east-1.amazonaws.com/dev-abc:1.1.1"
  Warning  Failed                 1m (x2 over 1m)  kubelet, gke-puppy-default-pool-e701eb52-6gdp  Failed to pull image "34235354354.dkr.ecr.us-east-1.amazonaws.com/dev-abc:1.1.1": rpc error: code = Unknown desc = unauthorized: authentication required
  Warning  Failed                 1m (x2 over 1m)  kubelet, gke-puppy-default-pool-e701eb52-6gdp  Error: ErrImagePull
  Normal   BackOff                1m (x6 over 1m)  kubelet, gke-puppy-default-pool-e701eb52-6gdp  Back-off pulling image "34235354354.dkr.ecr.us-east-1.amazonaws.com/dev-abc:1.1.1"
  Warning  Failed                 1m (x6 over 1m)  kubelet, gke-puppy-default-pool-e701eb52-6gdp  Error: ImagePullBackOff

我们如何解决这个错误?

【问题讨论】:

标签: amazon-web-services docker kubernetes google-cloud-platform google-kubernetes-engine


【解决方案1】:

技术上您将 docker auth 令牌放入 imagePullSecret 的方法应该可行 - 这也是 Kubernetes documentation on integrating a private registry 推荐的方法。

问题是 ECR is only valid for 12 hours 的 docker auth 令牌。也许认证错误只是在那段时间之后才发生?

您可以做的是创建一个 CronJob 来刷新 docker auth 令牌并重新创建 imagePullSecret(您可以找到有关它的更多信息 hereherehere)。

也有为此目的预先构建的 docker 镜像,例如ecr-kube-helperk8s-ecr-login-renew

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2019-12-19
    • 1970-01-01
    • 2018-06-13
    • 2018-07-09
    相关资源
    最近更新 更多