
本文共 6420 字,大约阅读时间需要 21 分钟。
《Kubernetes 1.5.2 版本下的 DNS 配置与优化》
本文全面介绍 Kubernetes 1.5.2 版本下 DNS 的部署方案以及相关配置方法。基于实际应用场景,本文将从规划、部署、服务发现等多个层面,详细阐述 Kubernetes 集群中 DNS 的配置实现方式。
1. 前言
Kubernetes 集群中 DNS 是一个关键组成部分,负责集群内部的域名解析与服务发现。本文针对 Kubernetes 1.5.2 版本,基于实际应用案例,整理了 DNS 的部署方案与优化方法。
2. DNS 部署方案
Kubernetes 1.5.2版本的 DNS 部署主要采用 Kỳá прорcha(SkyDNS)+kube2dns+Etcd 的组合方案。在 Kubernetes 1.3 以后,这一方案得到了改进,将 SkyDNS 和 kube2dns 转移至一个统一的容器镜像中,弃用 Etcd,改用内存存储 DNS 解析结果。同时,引入了 dnsmasq 以提高缓存效率。
3. DNS 的容器化部署
在 Kubernetes 1.5.2 版本中,DNS 的部署采用了容器化的方式,具体包括以下步骤:
3.1 downloading YAML 配置文件
分别 downloadingSkyDNS、kube2dns 和 dnsmasq 的 YAML 配置文件。配置文件中包含了 DNS 相关的重要参数,如域名、端口及后台配置等。
# SkyDNS 配置文件示例apiVersion: extensions/v1beta1kind: DaemonSetmetadata: name: kube-dns namespace: kube-system labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true"spec: template: metadata: labels: k8s-app: kube-dns annotations: scheduler.alpha.kubernetes.io/critical-pod: '' scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly","operator":"Exists"}]' spec: containers: - name: kubedns image: docker.io/googlecontainer/kubedns-amd64:1.9 imagePullPolicy: IfNotPresent resources: limits: memory: 170Mi requests: cpu: 100m memory: 70Mi livenessProbe: httpGet: path: /healthz-kubedns port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe: httpGet: path: /readiness port: 8081 scheme: HTTP initialDelaySeconds: 3 timeoutSeconds: 5 args: - --domain=lykops.net. - --dns-port=10053 - --config-map=kube-dns - --kube-master-url=http://192.168.20.128:8080 - --v=0 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 - name: dnsmasq image: docker.io/googlecontainer/kube-dnsmasq-amd64:1.4.1 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /healthz-dnsmasq port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 args: - --cache-size=1000 - --no-resolv - --server=127.0.0.1#10053 ports: - containerPort: 53 name: dns protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP - name: dnsmasq-metrics image: docker.io/googlecontainer/dnsmasq-metrics-amd64:1.0.1 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /metrics port: 10054 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 args: - --v=2 - --logtostderr ports: - containerPort: 10054 name: metrics protocol: TCP - name: healthz image: docker.io/googlecontainer/exechealthz-amd64:1.2 imagePullPolicy: IfNotPresent resources: limits: memory: 50Mi requests: cpu: 10m memory: 50Mi args: - --cmd=nslookup kubernetes.default.svc.lykops.net 127.0.0.1>/dev/null - --url=/healthz-dnsmasq - --cmd=nslookup kubernetes.default.svc.lykops.net 127.0.0.1:10053>/dev/null - --url=/healthz-kubedns - --port=8080 - --quiet ports: - containerPort: 8080 protocol: TCP
3.2 端口配置
在 Kubernetes 1.5.2 中,DNS 容器镜像默认提供了多个关键端口。如:
- 10053 端口(TCP/UDP):用于 DNS 服务
- 10055 端口(TCP):用于 Prometheus 会收集指标
- 8080 端口(TCP):用于健康检查
3.3 安装命令
将配置文件传递给 kubectl 进行安装:
kubectl create -f skydns-rc.yaml
4. HTTPS 访问 API Server
为了实现 HTTPS 访问 Kubernetes API Server,需对相应的配置文件进行修改。主要修改点包括:
- 修改
--kube-master-url
为 HTTPS 格式 - 挂载密钥文件与证书文件
具体配置如下:
# skydns-rc.yaml配置示例apiVersion: extensions/v1beta1kind: DaemonSetmetadata: name: kube-dns namespace: kube-system labels: k8s-app: kube-dns spec: template: metadata: labels: k8s-app: kube-dns annotations: [... triangle] spec: containers: - name: kubedns image: docker.io/googlecontainer/kubedns-amd64:1.9 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /healthz-kubedns port: 8080 scheme: HTTP resources: limits: memory: 170Mi requests: cpu: 100m memory: 70Mi args: - --domain=lykops.net. - --dns-port=10053 - --config-map=kube-dns - --kube-master-url=https://192.168.20.128:6443 - --kubecfg-file=/etc/kubernetes/kubelet-config - --v=0 volumeMounts: - name: config mountPath: /etc/kubernetes/kubelet-config readOnly: True - name: certs mountPath: /etc/ssl/kube readOnly: True [... triangle]
5. 服务配置
在实际应用中,需要配置服务以确保 DNS 解析正常工作。主要有以下步骤:
5.1 配置服务文件
创建或修改 skydns-svc.yaml
文件:
# skydns-svc.yaml 配置示例apiVersion: v1kind: Servicemetadata: name: kube-dns namespace: kube-system labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" kubernetes.io/name: "KubeDNS"spec: clusterIP: 172.17.114.114 ports: - name: dns port: 53 protocol: UDP - name: dns-tcp port: 53 protocol: TCPkubectl create -f skydns-svc.yaml
5.2 检查服务状态
完成服务配置后,执行以下命令验证其是否正常运行:
telnet 172.17.114.114 53
如能成功ablish,可知 DNS 服务已顺利配置。
6. Kubelet 配置与服务发现
在集群宿主机上,需对 Kubelet 进行相应配置,以实现服务发现:
6.1 权重要 напом事项
在部署完成后,需进行以下操作:
修改
/etc/kubernetes/kubelet
文件,加入 DNS 相关配置:KUBELET_ARGS="--cluster-domain=lykops.net --cluster_dns=172.17.114.114"
重启 Kubelet 服务:
service kubelet restart
6.2 服务发现过程
Kubernetes 核心在启动 kubelet 时,会根据配置文件自动发现集群内的服务。默认情况下,kube-dns
服务将作为 Cluster DNS 提供。
7. 指标收集与观察
通过 dnsmasq-metrics 容器,可以实现 DNS 相关的指标收集与观察。访问指标地址:
http://localhost:10054/metrics
8. 附录与进一步信息
如需了解详细的部署过程或遇到问题,可参考以下资料:
通过以上步骤,完全可以在 Kubernetes 1.5.2 版本下实现企业级的 DNS 配置与管理。
发表评论
最新留言
关于作者
