【问题标题】:Run kubernetes build from terraform从 terraform 运行 kubernetes 构建
【发布时间】:2019-04-26 12:46:47
【问题描述】:

我正在尝试进行一个简单的测试,以在 terraform 的 kubernetes 上构建一个简单的 nginx。 这是第一次使用 terraform。

这是基本的 terraform 文件:

provider "kubernetes" {
  host = "https://xxx.xxx.xxx.xxx:8443"

  client_certificate     = "${file("~/.kube/master.server.crt")}"
  client_key             = "${file("~/.kube/master.server.key")}"
  cluster_ca_certificate = "${file("~/.kube/ca.crt")}"

  username = "xxxxxx"
  password = "xxxxxx"

}

resource "kubernetes_service" "nginx" {
  metadata {
    name = "nginx-example"
  }
  spec {
    selector {
      App = "${kubernetes_pod.nginx.metadata.0.labels.App}"
    }
    port {
      port = 80
      target_port = 80
    }

    type = "LoadBalancer"
  }
}

resource "kubernetes_pod" "nginx" {
  metadata {
    name = "nginx-example"
    labels {
      App = "nginx"
    }
  }

  spec {
    container {
      image = "nginx:1.7.8"
      name  = "example"

      port {
        container_port = 80
      }
    }
  }
}

运行 terraform apply 后出现以下错误。

错误:应用计划时出错:

发生了 1 个错误:

  • kubernetes_pod.nginx:发生 1 个错误:

  • kubernetes_pod.nginx:服务器已要求客户端提供凭据(发布 pod)

Terraform 在遇到错误时不会自动回滚。 相反,您的 Terraform 状态文件已部分更新为任何 成功完成的资源。请解决上面的错误 并再次申请以逐步更改您的基础架构。

我拥有 kubernetes 的管理员权限,并且一切正常。 但由于某种原因,我收到了这个错误。

我做错了什么?

谢谢

关于@matthew-l-daniel 的问题

当我只使用用户名/密码时,我收到此错误:

错误:应用计划时出错:

发生了 1 个错误:

Terraform 在遇到错误时不会自动回滚。 相反,您的 Terraform 状态文件已部分更新为任何 成功完成的资源。请解决上面的错误 并再次申请以逐步更改您的基础架构。

我尝试使用服务器名称或服务器 ip 并且每次都得到相同的错误。

使用证书时,我从原始帖子中收到了关于“凭据”的错误

我忘了说这是一个 openshift 安装。我不相信它最终会产生任何影响,但我认为我应该提及它。

【问题讨论】:

  • 同时拥有 TLS 身份验证和 HTTP 基本“用户名”和“密码”非常非常奇怪;您是否为您的集群配置了任何此类身份验证,您希望用户名+密码可以执行某些操作?
  • 为什么不用helm-charts来部署nginx呢?似乎比terraform 容易得多?

标签: kubernetes terraform


【解决方案1】:

解决方案相当简单,我在 terraform 上使用来自 openshift 的主 crt 和密钥。 然后我使用 openshift 中的管理员 crt 和密钥对其进行了测试,并且成功了。

【讨论】:

    【解决方案2】:

    除了 official kubernetes provider documentation 建议只需要证书 基本(用户/通行证)之外,这听起来像是一个 OpenShift 问题。您是否能够从 OpenShift 集群中获取任何日志?

    一些搜索将您看到的消息链接到 Kubernetes 中的一些不稳定错误,其中 kubelet 在重新启动后无法正确注册。在您尝试部署之前,我会手动确认节点在 OpenShift 中显示为 Ready,因为在这种情况发生之前,Terraform 将无法与其交互。

    如果事实上该节点不是Ready,Terraform 只是显示了从 OpenShift 传回的底层错误。

    另外,您在尝试使用纯证书参数进行身份验证时看到的错误表明配置错误。在Kubernetes GitHub 上提出了类似的问题,并建议调查加载到集群上的证书颁发机构。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2018-09-28
      • 2021-04-01
      • 2022-08-04
      • 2019-08-16
      • 2019-11-26
      • 2021-11-19
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多