gpt4 book ai didi

kubernetes - 如何在Terraform中重用SSH隧道

转载 作者:行者123 更新时间:2023-12-02 12:28:10 28 4
gpt4 key购买 nike

我必须通过Terraform创建一个k8s作业,并以某种方式组织等待该作业完成的机制(因为Terraform无法执行此https://github.com/terraform-providers/terraform-provider-kubernetes/issues/534)。我发现没有什么比在等待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隧道。

P.S是的,我阅读了 https://www.terraform.io/docs/provisioners/connection.html文档,但我肯定做错了。

最佳答案

我想出了如何重用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)
}
}

关于kubernetes - 如何在Terraform中重用SSH隧道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61174233/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com