【问题标题】:Kubernetes pod secrets /var/run/secrets missingKubernetes pod 机密 /var/run/secrets 缺失
【发布时间】:2018-06-10 15:19:29
【问题描述】:

TL;DR:

通过 terraform 创建的 Kubernetes pod 没有 /var/run/secrets 文件夹,但根据 hello-minikube 教程创建的 pod 有 - 为什么会这样,我该如何修复它

动机:我需要 traefik 才能与 k8s 集群通信。

详情

我已经建立了一个带有 minikube 的本地 Kubernetes 集群,并设置了 terraform 以使用该集群。

要设置 traefik,您需要创建一个 Ingress 和一个 Deployment,它们是 not yet supported by terraform。根据该问题中发布的解决方法,我使用一个更简单的模块通过 terraform 执行 yaml 文件:

# A tf-module that can create Kubernetes resources from YAML file descriptions.
variable "name" {}
variable "file_name" { }
resource "null_resource" "kubernetes_resource" {
  triggers {
    configuration = "${var.file_name}"
  }
  provisioner "local-exec" {
    command = "kubectl apply -f ${var.file_name}"
  }
}

以这种方式创建的资源正确显示在 k8s 仪表板中。

但是,入口控制器的 pod 日志:

time="2017-12-30T13:49:10Z" 
level=error 
msg="Error starting provider *kubernetes.Provider: failed to create in-cluster
    configuration: open /var/run/secrets/kubernetes.io/serviceaccount/token:
    no such file or directory" 

(为便于阅读添加了换行符)

/bin/bash 进入 pod,我意识到 没有一个 有路径 /var/run/secrets,除了来自 minikube tutorialhello-minikube pod,它仅由两个 @ 创建987654337@ 命令:

$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
$ kubectl expose deployment hello-minikube --type=NodePort

与 terraform 问题中的脚本相比,我删除了 kubectl 之类的 --certificate-authority=${var.cluster_ca_certificate} 参数,但话又说回来,我在设置 hello-minikube 时也没有提供此参数,并且原始脚本不能作为-是,因为我不知道如何从 terraform 中的~/.kube/config 访问提供者详细信息。

我试图找出 hello-minikube 是否在做一些花哨的事情,但我找不到它的源代码。

我是否必须做一些特定的事情才能使令牌可用?根据traefic issue 611 的说法,InCluster 配置应该是自动化的,但就目前而言,我被卡住了。

版本

主机系统是一台 Windows 10 机器

> minikube version
minikube version: v0.24.1

> kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"0b9efaeb34a2fc51ff8e4d34ad9bc6375459c4a4", GitTreeState:"clean", BuildDate:"2017-11-29T22:43:34Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}

相关

有一些相关的问题和github问题,但它们也没有帮助我解决问题。

【问题讨论】:

  • 最重要的是,感谢您撰写了一个令人惊叹的问题;我会用这个问题作为其他人应该如何提问的模板!你能检查PodSpec中的automountServiceAccountToken字段,看看是不是true吗?我知道的唯一其他建设性问题是它的serviceAccountName 是否指向现有的 S.A.;我希望一个假的会轰炸部署,但不确定在这种情况下会发生什么
  • 非常感谢!!设置automountServiceAccountToken 立即解决了这个问题。我正盯着它看,但我只是没有看到发生了什么;)愿意将其发布为答案吗?它只是部署而没有抱怨的事实确实使这一点更难确定,但我想这是 traefik 图像的问题?
  • 我猜这是 traefik 图像的问题未知,但检查他们的问题跟踪器并看看我们是否不能改善下一个人的体验似乎是合理的,因为这是图像可以防范的 100%

标签: kubernetes terraform minikube traefik


【解决方案1】:

首先,感谢您写出一个惊人的问题;我会用这个问题作为其他人应该如何提问的模板!

你能检查PodSpec中的automountServiceAccountToken字段,看看是不是true吗?

我知道的唯一其他建设性问题是它的serviceAccountName 是否指向现有的 S.A.;我希望一个假的会轰炸部署,但不确定在这种情况下会发生什么

【讨论】:

  • 如果您通过删除一些闲聊/质疑部分并专注于实际解决问题的内容,将这种类似评论的答案转换为真实答案可能会更好。它看起来像中间段落,但没有任何 K8s 知识,我不知道 automountServiceAccountToken 在 Terraform 资源中的设置位置(或者仅此而已)。整理这些内容将有助于将来也遇到此问题的人。
  • 对于这种行为造成的混乱,我们深表歉意。只是在这里添加一些上下文:github.com/terraform-providers/terraform-provider-kubernetes/…
猜你喜欢
  • 2018-05-23
  • 2021-08-28
  • 2017-06-23
  • 2021-05-22
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
相关资源
最近更新 更多