k8s-dns

部署kubernetes dns 服务

k8s中的service分配的虚拟IP是固定的,而pod异常后新生成的pod ip会发生变化,可以通过service做代理关联到后端的pod。
通过设置k8s中的dns服务可以直接解析service的名字,得到对应service的ip,可以实现服务在集群内部互相访问。

本文档操作前提:
1.建立私有仓库,将etcd、skydns 和kube2sky 镜像上传到私有仓库
2.k8s中的网络已经打通

修改每个node上的kubelet配置文件

–cluster_dns=10.254.0.3 为DNS服务的ClusterIP地址
–cluster_domain=cluster.local 为DNS服务中设置的域名

$ vi /etc/kubernetes/kubelet KUBELET_ARGS="--cluster_dns=10.254.0.3 --cluster_domain=cluster.local "
重启kubelet

创建dns rc和service

#######定义yaml文件

1.skydns-rc.yaml
分别定义了三个容器:etcd、kube2sky、skydns
一个pod中包含三个容器。
可以通过kubectl describe pod pod-name --namespace=ns-name 查看详细pod的详细信息

apiVersion: v1
kind: ReplicationController
metadata:
 name: kube-dns-v9
 namespace: kube-system
 labels:
   k8s-app: kube-dns
   version: v9
   kubernetes.io/cluster-service: "true"
spec:
 replicas: 1
 selector:
   k8s-app: kube-dns
   version: v9
 template:
   metadata:
     labels:
       k8s-app: kube-dns
       version: v9
       kubernetes.io/cluster-service: "true"
   spec:
     containers:
     - name: etcd
       image: test-registry:5000/etcd
       resources:
         limits:
           cpu: 100m
           memory: 50Mi
       command:
       - /usr/local/bin/etcd
       - -data-dir
       - /var/etcd/data
       - -listen-client-urls
       - http://127.0.0.1:2379,http://127.0.0.1:4001
       - -advertise-client-urls
       - http://127.0.0.1:2379,http://127.0.0.1:4001
       - -initial-cluster-token
       - skydns-etcd
       volumeMounts:
       - name: etcd-storage
         mountPath: /var/etcd/data
     - name: kube2sky
       image: test-registry:5000/kube2sky
       resources:
         limits:
           cpu: 100m
           memory: 50Mi
       args:
       - -domain=cluster.local                        #设置k8s集群中Service所属的域名
       - -kube_master_url=http://192.168.30.60:8080   #k8s中master的ip地址和apiserver中配置的端口号
     - name: skydns
       image: test-registry:5000/skydns
       resources:
         limits:
           cpu: 100m
           memory: 50Mi
       args:
       - -machines=http://localhost:4001
       - -addr=0.0.0.0:53
       - -domain=cluster.local
       ports:
       - containerPort: 53
         name: dns
         protocol: UDP
       - containerPort: 53
         name: dns-tcp
         protocol: TCP
     volumes:
     - name: etcd-storage
       emptyDir: {}

2.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: 10.254.0.3           #/etc/kubernetes/kubelet中已经设定好clusterIP
 ports:
 - name: dns
   port: 53
   protocol: UDP
 - name: dns-tcp
   port: 53
   protocol: TCP
创建rc和service

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

检查服务

kubectl get svc --all-namespaces kubectl get rc --all-namespaces kubectl get pods --all-namespaces

排错

pod启动失败
1.检查镜像是否可以docker pull
2.检查镜像是否正常,docker run -it imageID sh
3.检查私有仓库
curl http://test-registry:5000/v2/_catalog
查看私有仓库里面的镜像

4.删除rc,检查kubelet 中的配置,然后重新启动
5.查看pod中的某个容器日志
kubectl logs pod-name -c container-name --all-namespaces
kubectl logs pod-name -c container-name --namespace=name
.......
.......

验证服务

1.创建一个名为redis-master的Service

apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    name: redis-master
spec:
  selector:
    name: redis-master
  ports:
  - port: 6379
    targetPort: 6379

kubectl create -f redis-service.yaml 创建服务
2.创建一个带有nslookup工具的pod

apiVersion: v1
kind: Pod
metadata:
    name: busybox
    namespace: default
spec:
    containers:
      - image: docker.io/busybox
        command:
          - sleep
          - "3600"
        imagePullPolicy: IfNotPresent
        name: busybox
    restartPolicy: Always

使用kubectl create -f busybox.yaml创建

3.进入busybox中解析服务

[root@k8s-master conf]# kubectl  exec -it busybox sh
/ # nslookup redis-master
Server:    10.254.0.3
Address 1: 10.254.0.3

Name:      redis-master
Address 1: 10.254.222.213

k8s dns原理

图片.png

(1)etcd:DNS的存储
(2)kube2sky:将k8s master中的Service(服务)注册到etcd中
(3)skyDNS:提供DNS域名解析服务

1.在kube2sky容器中需要指定访问k8s master的地址,获取k8s集群中的服务。
2.kube2sky容器和skydns容器的启动参数-domain,设置Kubernetes集群中Service所属的域名,本例中为cluster.local。启动后,kube2sky会监听Kubernetes,当有新的Service创建时,就会使用kubelet配置的-cluster_dns=10.254.0.3 --cluster_domain=cluster.local,在创建的资源中指定使用对应的dns服务器,并且生成相应的记录并保存到etcd中。kube2sky为每个Service生成两条记录,例如:
redis-master.default.cluster.local
redis-master.default.svc.cluster.local
3.skydns从etcd中获取dns的数据,然后解析服务。
4.etcd的数据来自kube2sky容器,kube2sky通过监听k8s master 中API获取集群所有Service的信息。然后将Service的信息保存到etcd容器中,提供给skydns使用

资料参考:权威指南第二版P153

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • kubernetes 简介 一个迅速过一遍kubernetes 非常不错的资源:基于Kubernetes构建Doc...
    bradyjoestar阅读 15,277评论 2 7
  • docker实现了更便捷的单机容器虚拟化的管理, docker的位置处于操作系统层与应用层之间; 相对传统虚拟化(...
    Harvey_L阅读 19,883评论 3 44
  • 1.Pod Pod是k8s的最基本的操作单元,包含一个或多个紧密相关的容器,类似于豌豆荚的概念。一个Pod可以被一...
    jony456123阅读 7,396评论 0 5
  • Kubernetes作为容器应用的管理中心,通过对Pod的数量进行监控,并且根据主机或容器失效的状态将新的Pod调...
    辉耀辉耀阅读 4,590评论 0 13
  • 今天听书三毛《梦里花落知多少》大概内容:三毛和荷西相隔六年后的重逢之后,仅仅七个月就结婚了。然后荷西第一次见了三毛...
    Rainbow小雪阅读 225评论 1 1