【问题标题】:How to modify a file in a Docker container when deploying with Terraform and Kubernetes?使用 Terraform 和 Kubernetes 部署时如何修改 Docker 容器中的文件?
【发布时间】:2020-11-16 04:04:45
【问题描述】:

作为更大模块的一部分,我想部署一个nginx 容器并替换其默认的nginx.conf。新配置应使用部署时生成的 Terraform resources 数据构建。有办法吗?

【问题讨论】:

  • 使用 terraform 资源数据创建文件并将其作为卷挂载到 nginx 部署。
  • ...可能将实际文件放在 Kubernetes ConfigMap 中。
  • @DavidMaze 是的,这就是我想出的解决方案,稍后我会发布一个详细的答案

标签: docker kubernetes terraform


【解决方案1】:

我设法按照以下步骤将标准的 nginx.conf 替换为动态生成的:

  1. 为动态数据创建一个带有占位符的模板配置文件
  2. 使用 Terraform 的 template_file 解析文件数据源
  3. 将解析后的数据存储在 ConfigMap 中,并将映射挂载为 Nginx 容器的卷

一步一步:

创建名为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};
    }
  }
}

使用以下 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}"
  }
}

创建一个 ConfigMap 并使用 nginx.conf 键将解析后的模板存储在那里:

resource "kubernetes_config_map" "nginx" {
  metadata {
    name = "nginx"
  }
  data = {
    "nginx.conf" = data.template_file.nginx.rendered
  }
}

最后,将 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"
      }
    }
  }
}
# ...

就是这样。 Nginx 服务器将开始使用提供的配置。

有用的链接:Kubernetes ConfigMap as volumeTerraform temple_file data source doc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2021-06-24
    • 2020-06-18
    • 2020-02-19
    相关资源
    最近更新 更多