是否有一些python/go库可以从JSON文件生成Terraform代码,或者是否有模板语言来生成Terraform代码。在
用例:
我需要在我的集群上,在外部负载平衡器上注册所有类型为node port的Kubernetes服务,并且有一个外部负载平衡器的terraform提供程序,它接受服务和名称空间名称以及其他一些参数,并在池中注册服务,一旦池使用正确的服务和命名空间名称创建,然后负载平衡器会自动发现nodeports和node-ip,并随时更新池。目前,我必须手动编辑terraform代码来添加服务名称和其他内容,更新负载平衡器配置,为k8s服务创建池。在
一旦我弄清楚了如何从给定的集群状态生成/更新terraform文件,我将把这个进程作为集群守护进程放在一个pod中,它将每隔X个时间间隔运行脚本,以便在用户创建和删除k8s服务时更新负载平衡器。在
地形文件中的示例记录:
# Pool automatically populated by K8s Service Discovery
resource "vtm_pool" "<cluster name>_<k8s namsepace>_<k8s service name>" {
name = ""<cluster name>_<k8s namsepace>_<service name>""
monitors = ["Ping"]
service_discovery_enabled = "true"
service_discovery_interval = "15"
service_discovery_plugin = "${var.k8s_discovery_plugin}"
service_discovery_plugin_args = "-s <k8s service name > -n <k8s namsepace> -c <kubeconf file name>"
}
Terraform有几个钩子点可能对你有用。在
你所建议的整体方法可能会很好地发挥作用。HCL语法本身没有那么复杂,你可以直接写出来。Hashicorp的a Go library可以读写它。在
地形也是directly supports JSON input。语法很难手工编写,但可能更容易由机器生成。HCL语法如何转换为JSON有一些微妙之处,可能值得通读整个页面(甚至HCL部分),但这可能是最容易机器生成的。在
如果我必须这样做,我可能会得到一个地形external data source。它可以运行任何生成JSON输出的程序,但是一旦你有了它,它就“本机”地存在于Terraform空间中。你可以这样写(未经测试):
(在过去,我遇到过Terraform非常关注特定索引的问题,因此,如果您执行类似操作,
kubectl
输出以不同的顺序返回服务对象,它可能需要关闭并交换哪个负载平衡器是哪个;或者,如果删除了某个负载平衡器,则可能会重新分配其他负载平衡器。)“最正确”(但最难)的答案是向Kubernetes教授云负载平衡器。您可以实现一个标准(Go)k8s.io/cloud-provider接口,在Kubernetes主源代码树中有一个handful of providers。我想fake cloud provider是一个很好的起点。在
相关问题 更多 >
编程相关推荐