const ( // CoreDNSService is the CoreDNS Service manifest CoreDNSService = ` apiVersion: v1 kind: Service metadata: labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" kubernetes.io/name: "CoreDNS" name: kube-dns namespace: kube-system annotations: prometheus.io/port: "9153" prometheus.io/scrape: "true" # Without this resourceVersion value, an update of the Service between versions will yield: # Service "kube-dns" is invalid: metadata.resourceVersion: Invalid value: "": must be specified for an update resourceVersion: "0" spec: clusterIP: {{ .DNSIP }} ports: - name: dns port: 53 protocol: UDP targetPort: 53 - name: dns-tcp port: 53 protocol: TCP targetPort: 53 - name: metrics port: 9153 protocol: TCP targetPort: 9153 selector: k8s-app: kube-dns ` // CoreDNSDeployment is the CoreDNS Deployment manifest CoreDNSDeployment = ` apiVersion: apps/v1 kind: Deployment metadata: name: {{ .DeploymentName }} namespace: kube-system labels: k8s-app: kube-dns spec: replicas: {{ .Replicas }} strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 selector: matchLabels: k8s-app: kube-dns template: metadata: labels: k8s-app: kube-dns spec: priorityClassName: system-cluster-critical serviceAccountName: coredns affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: ["kube-dns"] topologyKey: kubernetes.io/hostname tolerations: - key: CriticalAddonsOnly operator: Exists - key: {{ .ControlPlaneTaintKey }} effect: NoSchedule nodeSelector: kubernetes.io/os: linux containers: - name: coredns image: {{ .Image }} imagePullPolicy: IfNotPresent resources: limits: memory: 170Mi requests: cpu: 100m memory: 70Mi args: [ "-conf", "/etc/coredns/Corefile" ] volumeMounts: - name: config-volume mountPath: /etc/coredns readOnly: true ports: - containerPort: 53 name: dns protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP - containerPort: 9153 name: metrics protocol: TCP livenessProbe: httpGet: path: /health port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe: httpGet: path: /ready port: 8181 scheme: HTTP securityContext: allowPrivilegeEscalation: false capabilities: add: - NET_BIND_SERVICE drop: - ALL readOnlyRootFilesystem: true dnsPolicy: Default volumes: - name: config-volume configMap: name: coredns items: - key: Corefile path: Corefile ` // CoreDNSConfigMap is the CoreDNS ConfigMap manifest CoreDNSConfigMap = ` apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system data: Corefile: | .:53 { errors health { lameduck 5s } ready kubernetes {{ .DNSDomain }} in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 } cache 30 loop reload loadbalance } ` // CoreDNSClusterRole is the CoreDNS ClusterRole manifest CoreDNSClusterRole = ` apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:coredns rules: - apiGroups: - "" resources: - endpoints - services - pods - namespaces verbs: - list - watch - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch ` // CoreDNSClusterRoleBinding is the CoreDNS Clusterrolebinding manifest CoreDNSClusterRoleBinding = ` apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:coredns roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:coredns subjects: - kind: ServiceAccount name: coredns namespace: kube-system ` // CoreDNSServiceAccount is the CoreDNS ServiceAccount manifest CoreDNSServiceAccount = ` apiVersion: v1 kind: ServiceAccount metadata: name: coredns namespace: kube-system ` )
func DeployedDNSAddon(client clientset.Interface) (string, error)
DeployedDNSAddon returns the image tag of the DNS addon currently deployed
func EnsureDNSAddon(cfg *kubeadmapi.ClusterConfiguration, client clientset.Interface, out io.Writer, printManifest bool) error
EnsureDNSAddon creates the CoreDNS addon
func GetCoreDNSInfo(client clientset.Interface) (*v1.ConfigMap, string, string, error)
GetCoreDNSInfo gets the current CoreDNS installed and the current Corefile Configuration of CoreDNS.