diff --git a/docs/addons.md b/docs/addons.md index cafff96880..9eeb694fb3 100644 --- a/docs/addons.md +++ b/docs/addons.md @@ -119,6 +119,22 @@ spec: managed: false ``` +##### DNS nameserver configuration for cert-manager pod +{{ kops_feature_table(kops_added_default='1.23.3', k8s_min='1.16') }} + +Optional list of DNS nameserver IP addresses for the cert-manager pod to use. +This is useful if you have a public and private DNS zone for the same domain to ensure that cert-manager can access ingress, or DNS01 challenge TXT records at all times. + +You can set pod DNS nameserver configuration for cert-manager like so: +```yaml +spec: + certManager: + enabled: true + nameservers: + - 1.1.1.1 + - 8.8.8.8 +``` + Read more about cert-manager in the [official documentation](https://cert-manager.io/docs/) diff --git a/k8s/crds/kops.k8s.io_clusters.yaml b/k8s/crds/kops.k8s.io_clusters.yaml index eece5a4967..c522d12e87 100644 --- a/k8s/crds/kops.k8s.io_clusters.yaml +++ b/k8s/crds/kops.k8s.io_clusters.yaml @@ -297,6 +297,12 @@ spec: by kOps. The deployment of cert-manager is skipped if this is set to false. type: boolean + nameservers: + description: 'nameservers is a list of nameserver IP addresses + to use instead of the pod defaults. Default: none' + items: + type: string + type: array type: object channel: description: The Channel we are following diff --git a/pkg/apis/kops/componentconfig.go b/pkg/apis/kops/componentconfig.go index 766bc73eec..1a0e4ad309 100644 --- a/pkg/apis/kops/componentconfig.go +++ b/pkg/apis/kops/componentconfig.go @@ -1050,6 +1050,10 @@ type CertManagerConfig struct { // defaultIssuer sets a default clusterIssuer // Default: none DefaultIssuer *string `json:"defaultIssuer,omitempty"` + + // nameservers is a list of nameserver IP addresses to use instead of the pod defaults. + // Default: none + Nameservers []string `json:"nameservers,omitempty"` } // AWSLoadBalancerControllerConfig determines the AWS LB controller configuration. diff --git a/pkg/apis/kops/v1alpha2/componentconfig.go b/pkg/apis/kops/v1alpha2/componentconfig.go index cede3d2004..54f9c2fa9b 100644 --- a/pkg/apis/kops/v1alpha2/componentconfig.go +++ b/pkg/apis/kops/v1alpha2/componentconfig.go @@ -1076,6 +1076,10 @@ type CertManagerConfig struct { // defaultIssuer sets a default clusterIssuer // Default: none DefaultIssuer *string `json:"defaultIssuer,omitempty"` + + // nameservers is a list of nameserver IP addresses to use instead of the pod defaults. + // Default: none + Nameservers []string `json:"nameservers,omitempty"` } // AWSLoadBalancerControllerConfig determines the AWS LB controller configuration. diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index 073405284a..6d3adb8fd1 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -1886,6 +1886,7 @@ func autoConvert_v1alpha2_CertManagerConfig_To_kops_CertManagerConfig(in *CertMa out.Managed = in.Managed out.Image = in.Image out.DefaultIssuer = in.DefaultIssuer + out.Nameservers = in.Nameservers return nil } @@ -1899,6 +1900,7 @@ func autoConvert_kops_CertManagerConfig_To_v1alpha2_CertManagerConfig(in *kops.C out.Managed = in.Managed out.Image = in.Image out.DefaultIssuer = in.DefaultIssuer + out.Nameservers = in.Nameservers return nil } diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index d983f068ad..f60d397cc0 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -519,6 +519,11 @@ func (in *CertManagerConfig) DeepCopyInto(out *CertManagerConfig) { *out = new(string) **out = **in } + if in.Nameservers != nil { + in, out := &in.Nameservers, &out.Nameservers + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/pkg/apis/kops/v1alpha3/componentconfig.go b/pkg/apis/kops/v1alpha3/componentconfig.go index 654042a888..5517db385f 100644 --- a/pkg/apis/kops/v1alpha3/componentconfig.go +++ b/pkg/apis/kops/v1alpha3/componentconfig.go @@ -1047,6 +1047,10 @@ type CertManagerConfig struct { // defaultIssuer sets a default clusterIssuer // Default: none DefaultIssuer *string `json:"defaultIssuer,omitempty"` + + // nameservers is a list of nameserver IP addresses to use instead of the pod defaults. + // Default: none + Nameservers []string `json:"nameservers,omitempty"` } // AWSLoadBalancerControllerConfig determines the AWS LB controller configuration. diff --git a/pkg/apis/kops/v1alpha3/zz_generated.conversion.go b/pkg/apis/kops/v1alpha3/zz_generated.conversion.go index a1a3ee5f42..ad708b779e 100644 --- a/pkg/apis/kops/v1alpha3/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha3/zz_generated.conversion.go @@ -1912,6 +1912,7 @@ func autoConvert_v1alpha3_CertManagerConfig_To_kops_CertManagerConfig(in *CertMa out.Managed = in.Managed out.Image = in.Image out.DefaultIssuer = in.DefaultIssuer + out.Nameservers = in.Nameservers return nil } @@ -1925,6 +1926,7 @@ func autoConvert_kops_CertManagerConfig_To_v1alpha3_CertManagerConfig(in *kops.C out.Managed = in.Managed out.Image = in.Image out.DefaultIssuer = in.DefaultIssuer + out.Nameservers = in.Nameservers return nil } diff --git a/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go index d64f580b50..bbaaf308c0 100644 --- a/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go @@ -536,6 +536,11 @@ func (in *CertManagerConfig) DeepCopyInto(out *CertManagerConfig) { *out = new(string) **out = **in } + if in.Nameservers != nil { + in, out := &in.Nameservers, &out.Nameservers + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index ced51ac76f..7caaf3d202 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -535,6 +535,11 @@ func (in *CertManagerConfig) DeepCopyInto(out *CertManagerConfig) { *out = new(string) **out = **in } + if in.Nameservers != nil { + in, out := &in.Nameservers, &out.Nameservers + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/upup/models/cloudup/resources/addons/certmanager.io/k8s-1.16.yaml.template b/upup/models/cloudup/resources/addons/certmanager.io/k8s-1.16.yaml.template index 7b1d665bab..20eb528623 100644 --- a/upup/models/cloudup/resources/addons/certmanager.io/k8s-1.16.yaml.template +++ b/upup/models/cloudup/resources/addons/certmanager.io/k8s-1.16.yaml.template @@ -5217,6 +5217,14 @@ spec: - matchExpressions: - key: node-role.kubernetes.io/master operator: Exists + {{ if .CertManager.Nameservers }} + dnsConfig: + nameservers: + {{ range $nameserver := .CertManager.Nameservers }} + - "{{ $nameserver }}" + {{ end }} + dnsPolicy: None + {{ end }} priorityClassName: system-cluster-critical serviceAccountName: cert-manager securityContext: