Kubernetes-dns

作者: 我的喵叫初六 | 来源:发表于2019-05-07 14:25 被阅读0次

    kubernetes中的dns主要用于服务发现,当创建service后可以通过service名称进行通信,例如:

    下图的service创建后,其他pod就可以通过域名c.codeus解析出这个service下pod的ip

    搭建dns需要下面三个镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-sidecar-amd64:1.14.5

    docker pull registry.cn-hangzhou.aliyuncs.com/wonders/k8s-dns-kube-dns-amd64:1.14.5

    docker pull registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-dnsmasq-nanny-amd64:1.14.5

    创建kubedns-controller.yaml

    # cat kubedns-controller.yaml

    apiVersion: extensions/v1beta1

    kind: Deployment

    metadata:

      name: kube-dns

      namespace: kube-system

      labels:

        k8s-app: kube-dns

        kubernetes.io/cluster-service: "true"

        addonmanager.kubernetes.io/mode: Reconcile

    spec:

      # replicas: not specified here:

      # 1. In order to make Addon Manager do not reconcile this replicas parameter.

      # 2. Default is 1.

      # 3. Will be tuned in real time if DNS horizontal auto-scaling is turned on.

      strategy:

        rollingUpdate:

          maxSurge: 10%

          maxUnavailable: 0

      selector:

        matchLabels:

          k8s-app: kube-dns

      template:

        metadata:

          labels:

            k8s-app: kube-dns

          annotations:

            scheduler.alpha.kubernetes.io/critical-pod: ''

        spec:

          tolerations:

          - key: "CriticalAddonsOnly"

            operator: "Exists"

          volumes:

          - name: kube-dns-config

            configMap:

              name: kube-dns

              optional: true

          imagePullSecrets:

          - name: registry-key

          containers:

          - name: kubedns

            image: registry.cn-hangzhou.aliyuncs.com/wonders/k8s-dns-kube-dns-amd64:1.14.5

            resources:

              # TODO: Set memory limits when we've profiled the container for large

              # clusters, then set request = limit to keep this container in

              # guaranteed class. Currently, this container falls into the

              # "burstable" category so the kubelet doesn't backoff from restarting it.

              limits:

                memory: 170Mi

              requests:

                cpu: 100m

                memory: 70Mi

            livenessProbe:

              httpGet:

                path: /healthcheck/kubedns

                port: 10054

                scheme: HTTP

              initialDelaySeconds: 60

              timeoutSeconds: 5

              successThreshold: 1

              failureThreshold: 5

            readinessProbe:

              httpGet:

                path: /readiness

                port: 8081

                scheme: HTTP

              # we poll on pod startup for the Kubernetes master service and

              # only setup the /readiness HTTP server once that's available.

              initialDelaySeconds: 3

              timeoutSeconds: 5

            args:

            - --domain=cluster.local

            - --dns-port=10053

            - --config-dir=/kube-dns-config

            - --v=2

            env:

            - name: PROMETHEUS_PORT

              value: "10055"

            ports:

            - containerPort: 10053

              name: dns-local

              protocol: UDP

            - containerPort: 10053

              name: dns-tcp-local

              protocol: TCP

            - containerPort: 10055

              name: metrics

              protocol: TCP

            volumeMounts:

            - name: kube-dns-config

              mountPath: /kube-dns-config

          - name: dnsmasq

            image: registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-dnsmasq-nanny-amd64:1.14.5

            livenessProbe:

              httpGet:

                path: /healthcheck/dnsmasq

                port: 10054

                scheme: HTTP

              initialDelaySeconds: 60

              timeoutSeconds: 5

              successThreshold: 1

              failureThreshold: 5

            args:

            - -v=2

            - -logtostderr

            - -configDir=/etc/k8s/dns/dnsmasq-nanny

            - -restartDnsmasq=true

            - --

            - -k

            - --cache-size=1000

            - --no-negcache

            - --log-facility=-

            - --server=/cluster.local/127.0.0.1#10053

            - --server=/in-addr.arpa/127.0.0.1#10053

            - --server=/ip6.arpa/127.0.0.1#10053

            ports:

            - containerPort: 53

              name: dns

              protocol: UDP

            - containerPort: 53

              name: dns-tcp

              protocol: TCP

            # see: https://github.com/kubernetes/kubernetes/issues/29055 for details

            resources:

              requests:

                cpu: 150m

                memory: 20Mi

            volumeMounts:

            - name: kube-dns-config

              mountPath: /etc/k8s/dns/dnsmasq-nanny

          - name: sidecar

            image: registry.cn-hangzhou.aliyuncs.com/inspur_research/k8s-dns-sidecar-amd64:1.14.5

            livenessProbe:

              httpGet:

                path: /metrics

                port: 10054

                scheme: HTTP

              initialDelaySeconds: 60

              timeoutSeconds: 5

              successThreshold: 1

              failureThreshold: 5

            args:

            - --v=2

            - --logtostderr

            - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,A

            - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A

            ports:

            - containerPort: 10054

              name: metrics

              protocol: TCP

            resources:

              requests:

                memory: 20Mi

                cpu: 10m

          dnsPolicy: Default  # Don't use cluster DNS.

          serviceAccountName: kube-dns

    创建kubedns-svc.yaml

    下面的 clusterIP: 10.0.0.2配置为自定义配置,跟集群ip处于同一个网段,通过以下命令查看集群ip后自定义

    # kubectl get svc

    NAME        TYPE        CLUSTER-IP  EXTERNAL-IP  PORT(S)  AGE

    kubernetes  ClusterIP  10.0.0.1    <none>        443/TCP  34d

    # cat kubedns-svc.yaml

    apiVersion: v1

    kind: Service

    metadata:

      name: kube-dns

      namespace: kube-system

      labels:

        k8s-app: kube-dns

        kubernetes.io/cluster-service: "true"

        addonmanager.kubernetes.io/mode: Reconcile

        kubernetes.io/name: "KubeDNS"

    spec:

      selector:

        k8s-app: kube-dns

      clusterIP: 10.0.0.2

      ports:

      - name: dns

        port: 53

        protocol: UDP

      - name: dns-tcp

        port: 53

        protocol: TCP

    创建kubedns-cm.yaml

    # cat kubedns-cm.yaml

    apiVersion: v1

    kind: ConfigMap

    metadata:

      name: kube-dns

      namespace: kube-system

      labels:

        addonmanager.kubernetes.io/mode: EnsureExists

    创建kubedns-sa.yaml

    # cat kubedns-sa.yaml

    apiVersion: v1

    kind: ServiceAccount

    metadata:

      name: kube-dns

      namespace: kube-system

      labels:

        kubernetes.io/cluster-service: "true"

        addonmanager.kubernetes.io/mode: Reconcile

    启动

    kubectl create -f kubedns-controller.yaml --validate=false

    kubectl create -f kubedns-cm.yaml

    kubectl create -f kubedns-sa.yaml

    kubectl create -f kubedns-svc.yaml

    成功后重启已经启动的容器,容器中的dns配置会自动指向dns-pod的ip

    dns-pod中的dns指向是所在宿主机的dns配置

    可通过查看容器中的cat /etc/resolv.conf查看

    原文地址:https://blog.csdn.net/wangjunsheng/article/details/86095544

    kubectl create -f kubedns-controller.yaml --validate=false

    kubectl create -f kubedns-cm.yaml

    kubectl create -f kubedns-sa.yaml

    kubectl create -f kubedns-svc.yaml

    ---------------------

    作者:乃不知有汉

    来源:CSDN

    原文:https://blog.csdn.net/wangjunsheng/article/details/86095544

    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

        本文标题:Kubernetes-dns

        本文链接:https://www.haomeiwen.com/subject/hzteoqtx.html