Kubernetes将图像设置为缺少资源类型'deployment'

时间:2018-08-16 10:11:59

标签: kubernetes kubectl bitbucket-pipelines

我正在尝试使用以下命令更新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和管道进行此操作,该管道还会生成我要使用的图像。

有什么建议吗?

2 个答案:

答案 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有两个:

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

答案 1 :(得分:1)

我已通过将命名空间明确设置为参数来解决此错误,例如:

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

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