【问题标题】:kube-dns container crashes due to "Failed to create a kubernetes client: open /var/run/secrets/kubernetes.io/serviceaccount/token: permission denied"由于“无法创建 kubernetes 客户端:打开 /var/run/secrets/kubernetes.io/serviceaccount/token:权限被拒绝”,kube-dns 容器崩溃
【发布时间】:2023-03-28 14:50:02
【问题描述】:

在来自快速通道的 1.16.6-gke.12 版本的 GKE 集群中,kube-dns-... 服务的 kubedns 容器由于以下原因而永久失败

kubedns     15 Mar 2020, 21:43:54   F0315 20:43:54.029575 1 server.go:61] Failed to create a kubernetes client: open /var/run/secrets/kubernetes.io/serviceaccount/token: permission denied
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029539 1 dns.go:48] version: 1.15.8
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029524 1 flags.go:52] FLAG: --vmodule=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029517 1 flags.go:52] FLAG: --version="false"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029512 1 flags.go:52] FLAG: --v="2"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029506 1 flags.go:52] FLAG: --stderrthreshold="2"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029500 1 flags.go:52] FLAG: --profiling="false"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029495 1 flags.go:52] FLAG: --nameservers=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029490 1 flags.go:52] FLAG: --logtostderr="true"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029485 1 flags.go:52] FLAG: --log-flush-frequency="5s"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029479 1 flags.go:52] FLAG: --log-dir=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029466 1 flags.go:52] FLAG: --log-backtrace-at=":0"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029460 1 flags.go:52] FLAG: --kubecfg-file=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029439 1 flags.go:52] FLAG: --kube-master-url=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029432 1 flags.go:52] FLAG: --initial-sync-timeout="1m0s"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029426 1 flags.go:52] FLAG: --healthz-port="8081"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029419 1 flags.go:52] FLAG: --federations=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029412 1 flags.go:52] FLAG: --domain="cluster.local."
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029404 1 flags.go:52] FLAG: --dns-port="10053"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029398 1 flags.go:52] FLAG: --dns-bind-address="0.0.0.0"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029390 1 flags.go:52] FLAG: --config-period="10s"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029382 1 flags.go:52] FLAG: --config-map-namespace="kube-system"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029373 1 flags.go:52] FLAG: --config-map=""
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029363 1 flags.go:52] FLAG: --config-dir="/kube-dns-config"
kubedns     15 Mar 2020, 21:43:54   I0315 20:43:54.029288 1 flags.go:52] FLAG: --alsologtostderr="false"

是否有解决方法。我应该在哪里报告?

版本信息:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:14:22Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-gke.12", GitCommit:"74e2d6182ba7947983ec6d59776c38c53b086a37", GitTreeState:"clean", BuildDate:"2020-02-27T18:38:03Z", GoVersion:"go1.13.4b4", Compiler:"gc", Platform:"linux/amd64"}

【问题讨论】:

标签: kubernetes dns google-kubernetes-engine kubernetes-1.16


【解决方案1】:

新的 GKE 集群现在默认使用 Kubernetes 版本 1.14。 GKE 现在提供 Kubernetes 1.17 预览版,需要从 Google Cloud 请求访问才能使用。类似地,如果将发布将使用 Kubernetes 1.18 的 GKE - 这解决了服务帐户的问题 (kubernetes.io/docs/setup/release/notes - “修复了集群中的服务帐户令牌准入错误不要运行服务帐户令牌控制器-admission) - 此 GKE 版本将同时解决您的问题。

请参阅:kubernetes-1.18new-kubernetes-release

【讨论】:

  • 感谢您的意见。我在 GKE 上遇到了这个问题,其中无法操作 manifests afaik。我为automountServiceAccountToken 尝试了truefalse(在kube-dns 部署的spec.template.spec 上),但是新创建的pod 由于相同的问题而失败(容器kubedns 由于相同的错误而崩溃)。
  • 我已经更新了我的答案,请看第3点。有帮助吗?
  • 感谢您的想法。我为我正在使用的服务帐户成功创建了 clusterrolebinding,并为服务帐户 kube-system:kube-dns 创建了另一个。问题仍然存在。我还删除了 kube-dns 部署,然后由 GKE 重新创建:结果相同。关于命令顺序,提示指的是(一个 cert-manager 安装命令):这似乎并不重要,因为一旦集群接受 kubectl 命令,kube-dns 部署就已经开始了。
  • 您将不得不等待 gke v1.18 的发布。看看:kubernetes.io/docs/setup/release/notes - “修复了不运行服务帐户令牌控制器的集群中的服务帐户令牌准入错误(#87029,@liggitt)”。您需要更多信息吗?
  • 谢谢。如果您在问题中引用了问题和 k8s 版本并说明了它解决问题的原因,我可以将其标记为已解决。
猜你喜欢
  • 2018-05-23
  • 2017-09-08
  • 2011-10-28
  • 1970-01-01
  • 2020-01-03
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
相关资源
最近更新 更多