diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md
index df7f14ca..2e09aeb1 100644
--- a/modules/gke-cluster/README.md
+++ b/modules/gke-cluster/README.md
@@ -97,6 +97,32 @@ module "cluster-autopilot" {
}
# tftest modules=1 resources=1 inventory=autopilot.yaml
```
+
+### Cloud DNS
+
+This example shows how to [use Cloud DNS as a Kubernetes DNS provider](https://cloud.google.com/kubernetes-engine/docs/how-to/cloud-dns) for GKE Standard clusters.
+
+```hcl
+module "cluster-1" {
+ source = "./fabric/modules/gke-cluster"
+ project_id = var.project_id
+ name = "cluster-1"
+ location = "europe-west1-b"
+ vpc_config = {
+ network = var.vpc.self_link
+ subnetwork = var.subnet.self_link
+ secondary_range_names = { pods = "pods", services = "services" }
+ }
+ enable_features = {
+ dns = {
+ provider = "CLOUD_DNS"
+ scope = "CLUSTER_SCOPE"
+ domain = "gke.local"
+ }
+ }
+}
+# tftest modules=1 resources=1 inventory=dns.yaml
+```
## Variables
@@ -110,7 +136,7 @@ module "cluster-autopilot" {
| [cluster_autoscaling](variables.tf#L17) | Enable and configure limits for Node Auto-Provisioning with Cluster Autoscaler. | object({…})
| | null
|
| [description](variables.tf#L38) | Cluster description. | string
| | null
|
| [enable_addons](variables.tf#L44) | Addons enabled in the cluster (true means enabled). | object({…})
| | {…}
|
-| [enable_features](variables.tf#L68) | Enable cluster-level features. Certain features allow configuration. | object({…})
| | {…}
|
+| [enable_features](variables.tf#L68) | Enable cluster-level features. Certain features allow configuration. | object({…})
| | {…}
|
| [issue_client_certificate](variables.tf#L107) | Enable issuing client certificate. | bool
| | false
|
| [labels](variables.tf#L113) | Cluster resource labels. | map(string)
| | null
|
| [logging_config](variables.tf#L124) | Logging configuration. | list(string)
| | ["SYSTEM_COMPONENTS"]
|
diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf
index 83604c00..9480e42a 100644
--- a/modules/gke-cluster/main.tf
+++ b/modules/gke-cluster/main.tf
@@ -1,5 +1,5 @@
/**
- * Copyright 2022 Google LLC
+ * Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -170,11 +170,11 @@ resource "google_container_cluster" "cluster" {
}
dynamic "dns_config" {
- for_each = var.enable_features.cloud_dns != null ? [""] : []
+ for_each = var.enable_features.dns != null ? [""] : []
content {
- cluster_dns = enable_features.cloud_dns.cluster_dns
- cluster_dns_scope = enable_features.cloud_dns.cluster_dns_scope
- cluster_dns_domain = enable_features.cloud_dns.cluster_dns_domain
+ cluster_dns = var.enable_features.dns.provider
+ cluster_dns_scope = var.enable_features.dns.scope
+ cluster_dns_domain = var.enable_features.dns.domain
}
}
diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf
index ecfa11c9..a51ff208 100644
--- a/modules/gke-cluster/variables.tf
+++ b/modules/gke-cluster/variables.tf
@@ -1,5 +1,5 @@
/**
- * Copyright 2022 Google LLC
+ * Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -70,7 +70,7 @@ variable "enable_features" {
type = object({
autopilot = optional(bool, false)
binary_authorization = optional(bool, false)
- cloud_dns = optional(object({
+ dns = optional(object({
provider = optional(string)
scope = optional(string)
domain = optional(string)
diff --git a/tests/modules/gke_cluster/examples/dns.yaml b/tests/modules/gke_cluster/examples/dns.yaml
new file mode 100644
index 00000000..53792e05
--- /dev/null
+++ b/tests/modules/gke_cluster/examples/dns.yaml
@@ -0,0 +1,28 @@
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+values:
+ module.cluster-1.google_container_cluster.cluster:
+ dns_config:
+ - cluster_dns: CLOUD_DNS
+ cluster_dns_domain: gke.local
+ cluster_dns_scope: CLUSTER_SCOPE
+ ip_allocation_policy:
+ - cluster_secondary_range_name: pods
+ services_secondary_range_name: services
+ location: europe-west1-b
+ name: cluster-1
+
+counts:
+ google_container_cluster: 1