# Deploy a per-cluster CoreDNS

local kube = import "../../../kube/kube.libsonnet";

{
    Environment: {
        local env = self,
        local cfg = env.cfg,
        cfg:: {
            image: "coredns/coredns:1.3.0",
            namespace: "kube-system",
            upstream_server: "185.236.240.1",
            cluster_domains: [
                "cluster.local",
            ],
            reverse_cidrs: ["in-addr.arpa", "ip6.arpa"],
            clusterIP: "10.10.12.254",
        },

        sa: kube.ServiceAccount("coredns") {
            metadata+: {
                namespace: cfg.namespace,
            },
        },

        cr: kube.ClusterRole("system:coredns") {
            metadata+: {
                labels: {
                    "kubernetes.io/bootstrapping": "rbac-defaults",
                },
            },
            rules: [
                {
                    apiGroups: [""],
                    resources: ["endpoints", "services", "pods", "namespaces"],
                    verbs: ["list", "watch"],
                },
                {
                    apiGroups: [""],
                    resources: ["nodes"],
                    verbs: ["get"],
                },
            ],
        },

        crb: kube.ClusterRoleBinding("system:coredns") {
            metadata+: {
                labels: {
                    "kubernetes.io/bootstrapping": "rbac-defaults",
                },
                annotations+: {
                    "rbac.authorization.kubernetes.io/autoupdate": "true",
                },
            },
            roleRef: {
                apiGroup: "rbac.authorization.k8s.io",
                kind: "ClusterRole",
                name: env.cr.metadata.name,
            },
            subjects: [
                {
                    kind: "ServiceAccount",
                    name: env.sa.metadata.name,
                    namespace: env.sa.metadata.namespace,
                },
            ],
        },

        cm: kube.ConfigMap("coredns") {
            local map = self,

            upstream_server:: cfg.upstream_server,
            cluster_domains:: std.join(" ", cfg.cluster_domains),
            reverse_cidrs:: std.join(" ", cfg.reverse_cidrs),

            metadata+: {
                namespace: cfg.namespace,
            },
            data: {
                Corefile: |||
                     .:53 {
                        log
                        errors
                        health
                        kubernetes %s %s {
                            pods insecure
                            upstream
                            fallthrough in-addr.arpa ip6.arpa
                        }
                        rewrite name suffix .svc.k0.hswaw.net .svc.cluster.local
                        prometheus :9153
                        proxy . %s
                        cache 30
                        loop
                        reload
                        loadbalance
                     }
                ||| % [map.cluster_domains, map.reverse_cidrs, map.upstream_server]
            },
        },

        deployment: kube.Deployment("coredns") {
            metadata+: {
                namespace: cfg.namespace,
                labels+: {
                    "k8s-app": "coredns",
                },
            },
            spec+: {
                replicas: 2,
                strategy: {
                    type: "RollingUpdate",
                    rollingUpdate: { maxUnavailable: 1 },
                },
                template+: {
                    spec+: {
                        serviceAccountName: env.sa.metadata.name,
                        tolerations: [
                            { key: "CriticalAddonsOnly", operator: "Exists" },
                        ],
                        dnsPolicy: "Default",
                        volumes_: {
                            config: {
                                configMap: {
                                    name: env.cm.metadata.name,
                                    items: [ { key: "Corefile", path: "Corefile" } ],
                                },
                            },
                        },
                        containers_: {
                            coredns: kube.Container("coredns") {
                                local container = self,

                                image: cfg.image,
                                args: [
                                    "-conf", "%s/Corefile" % container.volumeMounts[0].mountPath,
                                ],
                                imagePullPolicy: "IfNotPresent",
                                resources: {
                                    limits: { memory: "170Mi" },
                                    requests: { memory: "70Mi", cpu: "100m" },
                                },
                                volumeMounts_: {
                                    config: {
                                        mountPath: "/etc/coredns",
                                    },
                                },
                                ports_: {
                                    dns: {
                                        containerPort: 53,
                                        protocol: "UDP",
                                    },
                                    "dns-tcp": {
                                        containerPort: 53,
                                        protocol: "TCP",
                                    },
                                    metrics: {
                                        containerPort: 9153,
                                        protocol: "TCP",
                                    },
                                },
                                securityContext: {
                                    allowPrivilegeEscalation: false,
                                    capabilities: {
                                        add: ["NET_BIND_SERVICE"],
                                        drop: ["all"],
                                    },
                                    readOnlyRootFilesystem: true,
                                },
                                livenessProbe: {
                                    httpGet: {
                                        path: "/health",
                                        port: 8080,
                                        scheme: "HTTP",
                                    },
                                    initialDelaySeconds: 60,
                                    timeoutSeconds: 5,
                                    successThreshold: 1,
                                    failureThreshold: 5,
                                },
                            },
                        },
                    },
                },
            },
        },
        svc: kube.Service("coredns") {
            local svc = self,
            metadata+: {
                namespace: cfg.namespace,
            },
            target_pod: env.deployment.spec.template,
            spec+: {
                ports: [ { name: p.name, port: p.containerPort, protocol: p.protocol } for p in svc.target_pod.spec.containers[0].ports ],
                clusterIP: cfg.clusterIP,
            },
        },
    },
}
