【问题标题】:Kubernetes set image missing resource type 'deployment'Kubernetes 设置图像缺少资源类型“部署”
【发布时间】:2019-01-23 06:25:51
【问题描述】:

我正在尝试使用以下命令更新 Kubernetes 中的映像:

kubectl set image deployment/ms-userservice ms-userservice=$DOCKER_REGISTRY_NAME/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT --insecure-skip-tls-verify

但是当我收到以下错误时:

error: the server doesn't have a resource type "deployment"

我检查了我是否在正确的命名空间中,并且具有该名称的 pod 存在并且正在运行。

我找不到与此错误有关的任何有意义的资源。

旁注:我正在通过 Bitbucket 和管道执行此操作,该管道还构建了我想要使用的图像。

有什么建议吗?

【问题讨论】:

  • kubectl get deploy 的输出是什么?
  • 当我尝试运行 kubectl get deploy 时,我收到了类似的错误:error: the server doesn't have a resource type "deploy"。我怀疑它与用户有关 - 错误消息没有太大帮助。
  • 您有管理员角色吗? kubectl auth can-i get deploy ?

标签: kubernetes kubectl bitbucket-pipelines


【解决方案1】:

我怀疑它与用户有关 - 错误消息没有太大帮助。

@TietjeDK 是正确的,它只是一个误导性的错误消息。这意味着正在发生两件事之一(或者可能两者都发生):kubectl 二进制文件比集群支持的版本范围更新(例如:对 v1.8 集群使用 v1.11 二进制文件)或前提是 JWT 签名错误。

你应该非常小心--insecure-skip-tls-verify,不仅因为它的安全卫生很差,而且因为如果 kubeconfig 不正确——很可能是这里的情况——那么看到 x509 错误比看到 x509 错误更清楚尝试对无效的 JWT 进行故障排除。

让我相信它实际上是令牌的签名,而不是它的内容的指标是,如果它是内容,你会看到一个 RBAC 消息User "foo@example.com" cannot list deployments in $namespace namespace,这意味着 apiserver 确实解压了 JWT 并找到了它的断言不足以进行操作。但是,如果您使用随机密钥签署 JWT,JWT 将不会解包,因为它将无法通过公钥验证并被彻底拒绝。

所以,tl;dr 是双重的:

  1. 修复 kubeconfig 以实际包含集群的正确证书颁发机构 (CA),因此不需要 --insecure-skip-tls-verify
  2. 在修复 kubeconfig 时,为 (User | ServiceAccount) 发出一个新令牌,该令牌来自旨在与之交互的集群

【讨论】:

    【解决方案2】:

    我已通过将命名空间显式设置为参数来修复此错误,例如:

    kubectl set image -n foonamespace deployment/ms-userservice.....
    

    https://www.mankier.com/1/kubectl-set-image#--namespace

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      相关资源
      最近更新 更多