Ant*_*ton 4 docker kubernetes terraform
作为更大模块的一部分,我想部署一个nginx容器并替换其默认的nginx.conf. 新配置应使用部署时生成的Terraform资源数据来构建。有办法做到吗?
我设法按照以下步骤将标准 nginx.conf 替换为动态生成的:
template_file 一步步:
创建名为nginx-conf.tpl的 nginx.conf 模板:
events {
worker_connections 4096; ## Default: 1024
}
http {
server {
listen 80;
listen [::]:80;
server_name ${server_name};
location /_plugin/kibana {
proxy_pass https://${elasticsearch_kibana_endpoint};
}
location / {
proxy_pass https://${elasticsearch_endpoint};
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下 Terraform 代码解析nginx-conf.tpl模板:
data "template_file" "nginx" {
template = "${file("${path.module}/nginx-conf.tpl")}"
vars = {
elasticsearch_endpoint = "${aws_elasticsearch_domain.example-name.endpoint}"
elasticsearch_kibana_endpoint = "${aws_elasticsearch_domain.example-name.kibana_endpoint}"
server_name = "${var.server_name}"
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个 ConfigMap 并将解析后的模板与nginx.confkey 一起存储在其中:
resource "kubernetes_config_map" "nginx" {
metadata {
name = "nginx"
}
data = {
"nginx.conf" = data.template_file.nginx.rendered
}
}
Run Code Online (Sandbox Code Playgroud)
最后,将 ConfigMap 键挂载为容器卷:
# ...
spec {
# ...
container {
# ...
volume_mount {
name = "nginx-conf"
mount_path = "/etc/nginx"
}
}
volume {
name = "nginx-conf"
config_map {
name = "nginx"
items {
key = "nginx.conf"
path = "nginx.conf"
}
}
}
}
# ...
Run Code Online (Sandbox Code Playgroud)
就是这样。Nginx 服务器将开始使用提供的配置。
有用的链接:Kubernetes ConfigMap 作为卷,Terraform Temple_file 数据源文档。
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |