前言

阅读地址 http://thoreauz.com/2017/04/16/docker/Kubernetes%E9%83%A8%E7%BD%B2DNS%E5%92%8CDashboard/

Kubernetes中的dns是什么?

k8s的服务发现有两种,第一种是基于环境变量,第二种是基于DNS。

第一种环境变量

1.比如生成个pod的容器,默认情况,外部是不能访问容器内部的。

2.我们生成service的资源对象,绑定第一步的pod容器,后生成的pod容器的环境变量会增加第一步的service生成的集群IP。

3.这种方式缺点明显,第一个pod容器是找不到后面pod容器生成的service对象。

第二种基于DNS.

1.首先整个kube-dns的容器,它负责去获取service对应的服务

2.再整个kube-dnsmasq-amd64:1.4容器,它是个dns服务端

3.第一步检测的service的变化就自动更新到第二部的dns服务端

4.其他业务容器启动时的dns指定第二步容器的集群IP,我们可以通过cat /etc/resolv.conf 查看是否生效.

实战,如果按照作者的方法去做,dns一会就死了,改进版

1.线生成kube-dns和kube-dnsmasq容器的配置文件skydns-rc.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kube-dns
namespace: kube-system
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
spec:
# replicas: not specified here:
# . In order to make Addon Manager do not reconcile this replicas parameter.
# . Default is .
# . Will be tuned in real time if DNS horizontal auto-scaling is turned on.
strategy:
rollingUpdate:
maxSurge: %
maxUnavailable:
selector:
matchLabels:
k8s-app: kube-dns
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: gcr.io/google_containers/kubedns-amd64:1.9
image: registry.cn-hangzhou.aliyuncs.com/google-containers/kubedns-amd64:1.9
args:
# - --domain=cluster.local.
- --domain=cluster.local.
- --dns-port=
- --config-map=kube-dns
# This should be set to v= only after the new image (cut from 1.5) has
# been released, otherwise we will flood the logs.
- --v=
- --kube-master-url=http://192.168.122.94:8080 # 指定api
env:
- name: PROMETHEUS_PORT
value: ""
ports:
- containerPort:
name: dns-local
protocol: UDP
- containerPort:
name: dns-tcp-local
protocol: TCP
- containerPort:
name: metrics
protocol: TCP
- name: dnsmasq
# image: gcr.io/google_containers/kube-dnsmasq-amd64:1.4.
image: registry.cn-hangzhou.aliyuncs.com/google-containers/kube-dnsmasq-amd64:1.4
args:
- --cache-size=
- --no-resolv
- --server=127.0.0.1#
# - --log-facility=-
ports:
- containerPort:
name: dns
protocol: UDP
- containerPort:
name: dns-tcp
protocol: TCP
# see: https://github.com/kubernetes/kubernetes/issues/29055 for details

2.生成service,容器内部通过集群IP来访问dns,这里固定了个集群IP地址,不然会动态生成一个。配置文件名skydns-svc.yaml

apiVersion: v1
kind: Service
metadata:
name: kube-dns
namespace: kube-system
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: "KubeDNS"
spec:
selector:
k8s-app: kube-dns
# clusterIP: $DNS_SERVER_IP
clusterIP: 10.10.10.254
ports:
- name: dns
port:
protocol: UDP
- name: dns-tcp
port:
protocol: TCP

3.启动

kubectl create -f skydns-rc.yaml
kubectl create -f skydns-svc.yaml

4.修改各个node节点的kubelet配置并重启

vim /etc/kubernetes/kubelet
# 添加这一行
KUBELET_ARGS="--cluster_dns=10.254.0.100 --cluster_domain=cluster.local"
systemctl restart kubelet
 
5.验证
  所有pod容器重新生成,进入容器检测 cat /etc/resolv.conf  配置的dns是否有集群IP

最新文章

  1. [LeetCode] Triangle 三角形
  2. iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容
  3. BZOJ 1923: [Sdoi2010]外星千足虫
  4. Servlet过滤器(详询请加qq:2085920154)
  5. nuint笔记
  6. Win10 64位安装SQL2000(个人版)
  7. 批处理脚本修改hosts文件指定域名解析IP
  8. 检测是否支持HTML5中的Video标签
  9. UVa 11859 (Nim) Division Game
  10. CSS之Win8界面摸拟
  11. uvalive 4670 Dominating Patterns
  12. Android学习笔记-TextView(文本框)(二)
  13. Comparable和Comparator的差别
  14. 你不知道的JavaScript--Item9 call(),apply(),bind()与回调
  15. [翻译] Linux 内核中的位数组和位操作
  16. RocketMQ知识整理与总结
  17. python总结 + 部署简单项目 到生产
  18. kubernetes容器删除时快速释放ip的方案
  19. HDU3377 Plan
  20. jmeter使用HTTP代理服务器

热门文章

  1. (转载)《利用Python进行数据分析·第2版》电子书
  2. Kaggle 房价预测问题参考资料
  3. java 线程池的创建方式
  4. 《SQL Server 2012 T-SQL基础》读书笔记 - 3.联接查询
  5. oracle 表连接 - sort merge joins 排序合并连接
  6. 三十六、python 中subprocess介绍
  7. linux设置开机启动程序?
  8. EDM设计案例分享:6款引人入胜的夏日邮件营销模板分享
  9. AssertionError: View function mapping is overwriting an existing endpoint function: insertCase
  10. VMware 虚拟机的虚拟磁盘编程知识点扫盲之一