diff --git a/cmd/minikube/cmd/config/config.go b/cmd/minikube/cmd/config/config.go index 9f4e2d78c9..601774e701 100644 --- a/cmd/minikube/cmd/config/config.go +++ b/cmd/minikube/cmd/config/config.go @@ -137,6 +137,12 @@ var settings = []Setting{ validations: []setFn{IsValidAddon}, callbacks: []setFn{EnableOrDisableAddon}, }, + { + name: "coredns", + set: SetBool, + validations: []setFn{IsValidAddon}, + callbacks: []setFn{EnableOrDisableAddon}, + }, { name: "kube-dns", set: SetBool, diff --git a/deploy/addons/coredns/coreDNS-clusterrole.yaml b/deploy/addons/coredns/coreDNS-clusterrole.yaml new file mode 100644 index 0000000000..195db30238 --- /dev/null +++ b/deploy/addons/coredns/coreDNS-clusterrole.yaml @@ -0,0 +1,18 @@ +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + labels: + kubernetes.io/bootstrapping: rbac-defaults + addonmanager.kubernetes.io/mode: Reconcile + name: system:coredns +rules: +- apiGroups: + - "" + resources: + - endpoints + - services + - pods + - namespaces + verbs: + - list + - watch \ No newline at end of file diff --git a/deploy/addons/coredns/coreDNS-configmap.yaml b/deploy/addons/coredns/coreDNS-configmap.yaml new file mode 100644 index 0000000000..05069f2450 --- /dev/null +++ b/deploy/addons/coredns/coreDNS-configmap.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: coredns + namespace: kube-system + labels: + addonmanager.kubernetes.io/mode: EnsureExists +data: + Corefile: | + .:53 { + errors + log stdout + health + kubernetes cluster.local + prometheus + proxy . /etc/resolv.conf + cache 30 + } diff --git a/deploy/addons/coredns/coreDNS-controller.yaml b/deploy/addons/coredns/coreDNS-controller.yaml new file mode 100644 index 0000000000..4d48ce8bc4 --- /dev/null +++ b/deploy/addons/coredns/coreDNS-controller.yaml @@ -0,0 +1,58 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: coredns + namespace: kube-system + labels: + k8s-app: coredns + kubernetes.io/name: "CoreDNS" + addonmanager.kubernetes.io/mode: Reconcile +spec: + replicas: 1 + selector: + matchLabels: + k8s-app: coredns + template: + metadata: + labels: + k8s-app: coredns + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]' + spec: + serviceAccountName: coredns + containers: + - name: coredns + image: coredns/coredns:latest + imagePullPolicy: Always + args: [ "-conf", "/etc/coredns/Corefile" ] + volumeMounts: + - name: config-volume + mountPath: /etc/coredns + 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 + dnsPolicy: Default + volumes: + - name: config-volume + configMap: + name: coredns + items: + - key: Corefile + path: Corefile \ No newline at end of file diff --git a/deploy/addons/coredns/coreDNS-crbinding.yaml b/deploy/addons/coredns/coreDNS-crbinding.yaml new file mode 100644 index 0000000000..db85292c80 --- /dev/null +++ b/deploy/addons/coredns/coreDNS-crbinding.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + annotations: + rbac.authorization.kubernetes.io/autoupdate: "true" + labels: + kubernetes.io/bootstrapping: rbac-defaults + addonmanager.kubernetes.io/mode: EnsureExists + name: system:coredns +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:coredns +subjects: +- kind: ServiceAccount + name: coredns + namespace: kube-system \ No newline at end of file diff --git a/deploy/addons/coredns/coreDNS-sa.yaml b/deploy/addons/coredns/coreDNS-sa.yaml new file mode 100644 index 0000000000..48208008bb --- /dev/null +++ b/deploy/addons/coredns/coreDNS-sa.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: coredns + namespace: kube-system + labels: + addonmanager.kubernetes.io/mode: Reconcile \ No newline at end of file diff --git a/deploy/addons/coredns/coreDNS-svc.yaml b/deploy/addons/coredns/coreDNS-svc.yaml new file mode 100644 index 0000000000..2d88b7ce8e --- /dev/null +++ b/deploy/addons/coredns/coreDNS-svc.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: coredns + namespace: kube-system + labels: + k8s-app: coredns + kubernetes.io/name: "CoreDNS" + addonmanager.kubernetes.io/mode: Reconcile +spec: + selector: + k8s-app: coredns + clusterIP: 10.0.0.10 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP + - name: metrics + port: 9153 + protocol: TCP \ No newline at end of file diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go index 496d198389..b5366b3f71 100644 --- a/pkg/minikube/assets/addons.go +++ b/pkg/minikube/assets/addons.go @@ -82,6 +82,38 @@ var Addons = map[string]*Addon{ "storageclass.yaml", "0640"), }, true, "default-storageclass"), + "coredns": NewAddon([]*BinDataAsset{ + NewBinDataAsset( + "deploy/addons/coreDNS/coreDNS-controller.yaml", + constants.AddonsPath, + "coreDNS-controller.yaml", + "0640"), + NewBinDataAsset( + "deploy/addons/coreDNS/coreDNS-configmap.yaml", + constants.AddonsPath, + "coreDNS-configmap.yaml", + "0640"), + NewBinDataAsset( + "deploy/addons/coreDNS/coreDNS-svc.yaml", + constants.AddonsPath, + "coreDNS-svc.yaml", + "0640"), + NewBinDataAsset( + "deploy/addons/coreDNS/coreDNS-crbinding.yaml", + constants.AddonsPath, + "coreDNS-crbinding.yaml", + "0640"), + NewBinDataAsset( + "deploy/addons/coreDNS/coreDNS-sa.yaml", + constants.AddonsPath, + "coreDNS-sa.yaml", + "0640"), + NewBinDataAsset( + "deploy/addons/coreDNS/coreDNS-clusterrole.yaml", + constants.AddonsPath, + "coreDNS-clusterrole.yaml", + "0640"), + }, false, "coredns"), "kube-dns": NewAddon([]*BinDataAsset{ NewBinDataAsset( "deploy/addons/kube-dns/kube-dns-controller.yaml",