K8S DNS服务搭建和配置 |
您所在的位置:网站首页 › k8s的service与dns › K8S DNS服务搭建和配置 |
DNS服务在k8s发展过程中经历了3个阶段 在k8s 1.2版本时,DNS服务由SkyDNS提供 在k8s 1.4版本时,SkyDNS组件被KubeDNS替换 从k8s 1.11版本开始,K8S集群的DNS服务由CoreDNS提供。是用Go语言实现的高性能、插件式、易扩展的DNS服务端。 CoreDNS支持自定义DNS记录及配置upstream DNS Server,可以统一管理K8S基于服务的内部DNS和数据中心的物理DNS。 在创建DNS服务之前修改每个Node上 kubelet 的启动参数,加上以下两个参数: DNS服务的ClusterIP地址:--cluster-dns=169.169.0.100 在DNS服务中设置的域名:--cluster-domain=cluster.local 然后重启kubelet服务 创建CoreDNS应用 在部署CoreDNS应用前,至少需要创建一个ConfigMap、一个Deployment和一个Service 共三个资源对象。 在启用了RBAC的集群中,还可以设置ServiceAccount、ClusterRole、ClusterRoleBinding 对CoreDNS容器进行权限设置。 ConfigMap“”coredns“”主要设置CoreDNS的主配置文件Corefile的内容。 其中可以定义各种域名的解析方式和使用的插件。 Deployment“”coredns“”主要设置CoreDNS容器应用的内容。 其中,replicas副本的数量通常应该根据集群的规模和服务数量来确定,如果单个CoreDNS进程不足以支撑整个集群的DNS查询,则可以通过水平扩展提高查询能力。由于DNS服务是K8S集群的关键核心服务,所以建议为其Deployment设置自动扩缩容控制器,自动管理其副本数量。另外,对资源限制部分(CPU限制和内存限制)的设置也应根据实际环境进行调整。 Service“”kube-dns“”是DNS服务的配置。 这个服务需要设置固定的 ClusterIP,也需要将所有node上的 kubelet启动参数 --cluster-dns设置为这个ClusterIP。 vim coredns.yaml apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube-system labels: addonmanager.kubernetes.io/mode: EnsureExists data: Corefile: | cluster.local { errors health kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } . { cache 30 loadbalance forward . /etc/resolv.conf } --- apiVersion: apps/v1 kind: Deployment metadata: name: coredns namespace: kube-system labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/name: "CoreDNS" spec: replicas: 1 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 selector: matchLabels: k8s-app: kube-dns template: metadata: labels: k8s-app: kube-dns annotations: seccomp.security.alpha.kubernetes.io/pod: 'docker/default' spec: priorityClassName: system-cluster-critical tolerations: - key: "CriticalAddonsOnly" operator: "Exists" nodeSelector: beta.kubernetes.io/os: linux containers: - name: coredns image: coredns/coredns:1.3.1 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 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 --- apiVersion: v1 kind: Service metadata: name: kube-dns namespace: kube-system annotations: prometheus.io/port: "9153" prometheus.io/scrape: "true" labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile kubernetes.io/name: "CoreDNS" spec: selector: k8s-app: kube-dns clusterIP: 169.169.0.100 ports: - name: dns port: 53 protocol: UDP - name: dns-tcp port: 53 protocol: TCP - name: metrics port: 9153 protocol: TCP 通过 kubectl create 完成CoreDNS服务的创建: kubectl create -f coredns.yaml |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |