Kubernetes设置图像缺少资源类型'部署'

问题描述 投票:0回答:2

我正在尝试使用以下命令更新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和管道来做到这一点的,它也构建了我想要使用的图像。

有什么建议?

kubernetes kubectl bitbucket-pipelines
2个回答
3
投票

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

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

你应该对--insecure-skip-tls-verify非常小心,不仅因为它的安全卫生性差,而且因为如果kubeconfig不正确 - 这很可能就是这种情况 - 那么看到x509错误比尝试排除无效的错误要清楚得多智威汤逊。

让我相信它的指标实际上是令牌的签名,而不是它的内容,如果它是你看到RBAC消息User "[email protected]" cannot list deployments in $namespace namespace的内容,意味着apiserver解压缩JWT并发现它的断言不足以进行操作。但是如果你使用随机密钥签署JWT,JWT将不会解压缩,因为它将无法通过公钥验证并被彻底拒绝。

所以,tl; dr是双重的:

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

1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.