我正在尝试使用以下命令更新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和管道来做到这一点的,它也构建了我想要使用的图像。
有什么建议?
我怀疑它与用户有关 - 错误消息没有多大帮助。
@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是双重的:
--insecure-skip-tls-verify
User
| ServiceAccount
)发出一个新标记,该标记来自它旨在与之交互的集群我通过显式设置名称空间作为参数来修复此错误,例如:
kubectl set image -n foonamespace deployment/ms-userservice.....