cloud-foundation-fabric/modules/cloud-config-container/coredns
Ludovico Magnocavallo 6941313c7d
Factories refactor (#1843)
* factories refactor doc

* Adds file schema and filesystem organization

* Update 20231106-factories.md

* move factories out of blueprints and create new factories  README

* align factory in billing-account module

* align factory in dataplex-datascan module

* align factory in billing-account module

* align factory in net-firewall-policy module

* align factory in dns-response-policy module

* align factory in net-vpc-firewall module

* align factory in net-vpc module

* align factory variable names in FAST

* remove decentralized firewall blueprint

* bump terraform version

* bump module versions

* update top-level READMEs

* move project factory to modules

* fix variable names and tests

* tfdoc

* remove changelog link

* add project factory to top-level README

* fix cludrun eventarc diff

* fix README

* fix cludrun eventarc diff

---------

Co-authored-by: Simone Ruffilli <sruffilli@google.com>
2024-02-26 10:16:52 +00:00
..
Corefile Refactor the onprem module (#55) 2020-04-06 16:27:13 +02:00
Corefile-hosts Refactor the onprem module (#55) 2020-04-06 16:27:13 +02:00
README.md Fixes related to boot_disk in compute-vm module 2023-03-16 15:58:39 +01:00
cloud-config.yaml versions.tf maintenance + copyright notice bump (#1782) 2023-10-20 18:17:47 +02:00
main.tf Replace Docker's `gcplogs` driver with the GCP COS logging agent (#977) 2022-11-15 13:19:52 +01:00
outputs.tf Copyright bump (#410) 2022-01-01 15:52:31 +01:00
variables.tf Replace Docker's `gcplogs` driver with the GCP COS logging agent (#977) 2022-11-15 13:19:52 +01:00
versions.tf Factories refactor (#1843) 2024-02-26 10:16:52 +00:00

README.md

Containerized CoreDNS on Container Optimized OS

This module manages a cloud-config configuration that starts a containerized CoreDNS service on Container Optimized OS, using the official image.

The resulting cloud-config can be customized in a number of ways:

  • a custom CoreDNS configuration can be set using the coredns_config variable
  • additional files (eg for hosts or zone files) can be passed in via the files variable
  • a completely custom cloud-config can be passed in via the cloud_config variable, and additional template variables can be passed in via config_variables

The default instance configuration inserts iptables rules to allow traffic on the DNS TCP and UDP ports, and the 8080 port for the optional HTTP health check that can be enabled via the CoreDNS health plugin.

Logging and monitoring are enabled via the Google Cloud Logging agent configured for the instance via the google-logging-enabled metadata property, and the Node Problem Detector service is started by default on boot.

The module renders the generated cloud config in the cloud_config output, to be used in instances or instance templates via the user-data metadata.

For convenience during development or for simple use cases, the module can optionally manage a single instance via the test_instance variable. If the instance is not needed the instance*tf files can be safely removed. Refer to the top-level README for more details on the included instance.

Examples

Default CoreDNS configuration

This example will create a cloud-config that uses the module's defaults, creating a simple DNS forwarder.

module "cos-coredns" {
  source = "./fabric/modules/cloud-config-container/coredns"
}

module "vm" {
  source     = "./fabric/modules/compute-vm"
  project_id = "my-project"
  zone       = "europe-west8-b"
  name       = "cos-coredns"
  network_interfaces = [{
    network    = "default"
    subnetwork = "gce"
  }]
  metadata = {
    user-data              = module.cos-coredns.cloud_config
    google-logging-enabled = true
  }
  boot_disk = {
    initialize_params = {
      image = "projects/cos-cloud/global/images/family/cos-stable"
      type  = "pd-ssd"
      size  = 10
    }
  }
  tags = ["dns", "ssh"]
}
# tftest modules=1 resources=1

Custom CoreDNS configuration

This example will create a cloud-config using a custom CoreDNS configuration, that leverages the CoreDNS hosts plugin to serve a single zone via an included hosts format file.

module "cos-coredns" {
  source         = "./fabric/modules/cloud-config-container/coredns"
  coredns_config = "./fabric/modules/cloud-config-container/coredns/Corefile-hosts"
  files = {
    "/etc/coredns/example.hosts" = {
      content     = "127.0.0.2 foo.example.org foo"
      owner       = null
      permissions = "0644"
    }
  }
}
# tftest modules=0 resources=0

Variables

name description type required default
cloud_config Cloud config template path. If null default will be used. string null
config_variables Additional variables used to render the cloud-config and CoreDNS templates. map(any) {}
coredns_config CoreDNS configuration path, if null default will be used. string null
file_defaults Default owner and permissions for files. object({…}) {…}
files Map of extra files to create on the instance, path as key. Owner and permissions will use defaults if null. map(object({…})) {}

Outputs

name description sensitive
cloud_config Rendered cloud-config file to be passed as user-data instance metadata.