/
configmap.go
111 lines (98 loc) · 2.44 KB
/
configmap.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
Copyright 2020 The Kubermatic Kubernetes Platform contributors.
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.
*/
package nodelocaldns
import (
"bytes"
"html/template"
"k8c.io/kubermatic/v2/pkg/resources"
"k8c.io/reconciler/pkg/reconciling"
corev1 "k8s.io/api/core/v1"
)
const (
addonManagerModeKey = "addonmanager.kubernetes.io/mode"
reconcileModeValue = "Reconcile"
)
// ConfigMapReconciler returns a ConfigMap containing the config for Node Local DNS cache.
func ConfigMapReconciler(dnsClusterIP string) reconciling.NamedConfigMapReconcilerFactory {
return func() (string, reconciling.ConfigMapReconciler) {
return resources.NodeLocalDNSConfigMapName, func(cm *corev1.ConfigMap) (*corev1.ConfigMap, error) {
if cm.Labels == nil {
cm.Labels = map[string]string{}
}
cm.Labels[addonManagerModeKey] = reconcileModeValue
t, err := template.New("config").Parse(configTemplate)
if err != nil {
return nil, err
}
configBuf := bytes.Buffer{}
if err := t.Execute(&configBuf, struct{ DNSClusterIP string }{dnsClusterIP}); err != nil {
return nil, err
}
if cm.Data == nil {
cm.Data = map[string]string{}
}
cm.Data["Corefile"] = configBuf.String()
return cm, nil
}
}
}
const (
configTemplate = `
cluster.local:53 {
errors
cache {
success 9984 30
denial 9984 5
}
reload
loop
bind 169.254.20.10
forward . {{ .DNSClusterIP }} {
force_tcp
}
prometheus :9253
health 169.254.20.10:8080
}
in-addr.arpa:53 {
errors
cache 30
reload
loop
bind 169.254.20.10
forward . {{ .DNSClusterIP }} {
force_tcp
}
prometheus :9253
}
ip6.arpa:53 {
errors
cache 30
reload
loop
bind 169.254.20.10
forward . {{ .DNSClusterIP }} {
force_tcp
}
prometheus :9253
}
.:53 {
errors
cache 30
reload
loop
bind 169.254.20.10
forward . /etc/resolv.conf
prometheus :9253
}
`
)