我正在尝试使用以下命令更新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和管道进行此操作,该管道还会生成我要使用的图像。
有什么建议吗?
答案 0 :(得分:2)
我怀疑它与用户有关-错误消息没有太多帮助。
@TietjeDK是正确的,它只是一个误导性的错误消息。这意味着正在发生两种情况之一(或可能同时发生):kubectl
二进制文件比集群支持的版本范围新(例如:对v1.8集群使用v1.11二进制文件)或提供的JWT签名不正确。
您应该非常小心地使用--insecure-skip-tls-verify
,不仅因为它的安全卫生状况很差,而且还因为如果kubeconfig不正确(在这种情况下很可能就是这样),那么看x509错误就更加清楚了指示,而不是尝试对无效的JWT进行故障排除。
让我相信它实际上是令牌的签名而不是其内容的指标是,如果内容是令牌,则您会看到RBAC消息User "foo@example.com" cannot list deployments in $namespace namespace
,这意味着apiserver确实解压缩了JWT,并且发现它的断言不足以进行这项操作。但是,如果您使用随机密钥对JWT进行签名,则JWT不会解压缩,因为它将导致公钥验证失败并被彻底拒绝。
因此,tl; dr有两个:
--insecure-skip-tls-verify
User
| ServiceAccount
)发出一个新令牌,该令牌来自与之交互的群集答案 1 :(得分:1)
我已通过将命名空间明确设置为参数来解决此错误,例如:
kubectl set image -n foonamespace deployment/ms-userservice.....