Kubernetes 如何在Terraform中重用SSH隧道

Kubernetes 如何在Terraform中重用SSH隧道,kubernetes,terraform,ssh-tunnel,Kubernetes,Terraform,Ssh Tunnel,我必须通过Terraform创建一个k8s作业,并以某种方式组织等待该作业完成的机制(因为Terraform无法做到这一点)。我发现没有什么比使用空资源和等待k8s作业的命令(即kubectl wait)更好的了。这些内容将在CI上的Docker容器中执行。此外,我需要穿过堡垒才能到达k8s集群。为此,我使用SSH隧道: provider "ssh" { port = .... } provider "kubernetes" { config_context = "...

我必须通过Terraform创建一个k8s作业,并以某种方式组织等待该作业完成的机制(因为Terraform无法做到这一点)。我发现没有什么比使用空资源和等待k8s作业的命令(即
kubectl wait
)更好的了。这些内容将在CI上的Docker容器中执行。此外,我需要穿过堡垒才能到达k8s集群。为此,我使用SSH隧道:

provider "ssh" {
  port = ....
}
provider "kubernetes" {
  config_context         = "..."
  config_context_cluster = "..."
  host                   = "api.${k8s_host}:${data.ssh_tunnel.k8s.port}"
}

data "ssh_tunnel" "k8s" {
  host           = "bastion.....com"
  local_address  = "localhost:0"
  remote_address = "api.${k8s_host}:443"
}
所有k8s资源都已成功创建,因此我假设SSH隧道工作正常。但是如何将它用于空资源呢? 这是:

resource "null_resource" "wait" {
  provisioner "local-exec" {
    connection {
      type = "ssh"
      bastion_host = data.ssh_tunnel.k8s.host
      bastion_private_key = file("~/.ssh/id_rsa")
      bastion_port = data.ssh_tunnel.k8s.port
      host = "api.${k8s_host}"
      port = 443
    }
    command = "kubectl wait ...."
  }
  triggers = {
    job_ids = join(", ", kubernetes_job.a-job.*.id)
  }
}
但是没有运气,我得到了“到服务器api的连接。${k8s_host}被拒绝-您指定了正确的主机或端口吗?”

因此有两个问题: 1.如何以不同的方式等待工作 2.如果1是不可能的(我肯定是的),那么如何以正确的方式重用SSH隧道


是的,我读了文档,但我肯定错了。

我想出了如何重用Terraform打开的SSH隧道:

resource "null_resource" "wait" {
provisioner "local-exec" {
  command = "kubectl wait --server=https://api.${k8s_host}:${data.ssh_tunnel.k8s.port} --for=condition=complete --timeout=3000s job/a-job"
  }
  triggers = {
    job_ids = join(", ", kubernetes_job.a-job.*.id)
  }
}

我想出了如何重用Terraform打开的SSH隧道:

resource "null_resource" "wait" {
provisioner "local-exec" {
  command = "kubectl wait --server=https://api.${k8s_host}:${data.ssh_tunnel.k8s.port} --for=condition=complete --timeout=3000s job/a-job"
  }
  triggers = {
    job_ids = join(", ", kubernetes_job.a-job.*.id)
  }
}

你在使用自定义ssh隧道提供程序吗?@AlexVorona,我想是的。也许有一个根本原因?只是不清楚定制隧道提供商的实际隧道是如何发生的。请用您正在使用的ssh隧道提供程序的详细信息更新您的问题。您正在使用自定义ssh隧道提供程序吗?@AlexVorona,我想是的。也许有一个根本原因?只是不清楚定制隧道提供商的实际隧道是如何发生的。请用您正在使用的ssh隧道提供程序的详细信息更新您的问题。