kube-dns 官方的 yaml 文件其实在我们先前下载的 kubernetes server 软件包内,具体路径为:/srv/kubernetes/cluster/addons/dns

我是把 kuberntes 解压到了 /srv/ 目录下

准备 kube-dns 相关镜像

kube-dns 插件直接使用 kubernetes 部署,官方的配置文件中包含以下镜像:

[[email protected] dns]# cat kube-dns.yaml.base | grep image
image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8
image: gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8
image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8
[[email protected] dns]# pwd
/srv/kubernetes/cluster/addons/dns

因为墙的原因,这些镜像我们需要翻墙下载,很是不方便,我下载了所需要的镜像,并上传到了时速云镜像仓库欢迎大家下载使用:

index.tenxcloud.com/yeaheo/k8s-dns-dnsmasq-nanny-amd64:1.14.8
index.tenxcloud.com/yeaheo/k8s-dns-kube-dns-amd64:1.14.8
index.tenxcloud.com/yeaheo/k8s-dns-sidecar-amd64:1.14.8

我们 pull 下来相关镜像后建议上传到私有仓库中,这样下载速度会更快,更方便,私有仓库部署参见 harbor私有镜像仓库部署

准备 kube-dns 相关 yaml 文件

默认情况下 kube-dns 插件的 yaml 文件在对应目录下已经存在,我们只需复制一份到指定目录下即可:

[[email protected] dns]# pwd
/srv/kubernetes/cluster/addons/dns
[[email protected] dns]# cp kube-dns.yaml.base /opt/k8s-addons/dns/kube-dns.yaml

然后需要我们修改相关 yaml 文件。

这里我们用源文件 kube-dns.yaml.base 做修改,修改后的 kube-dns.yaml 与源文件的区别如下所示,而这些正式我们需要修改的:

[[email protected] dns]# diff kube-dns.yaml kube-dns.yaml.base
33c33
< clusterIP: 10.254.0.2
---
> clusterIP: __PILLAR__DNS__SERVER__
97c97
< image: 192.168.8.69/library/k8s-dns-kube-dns-amd64:1.14.8
---
> image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8
127c127
< - --domain=cluster.local.
---
> - --domain=__PILLAR__DNS__DOMAIN__.
148c148
< image: 192.168.8.69/library/k8s-dns-dnsmasq-nanny-amd64:1.14.8
---
> image: gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8
168c168
< - --server=/cluster.local./127.0.0.1#10053
---
> - --server=/__PILLAR__DNS__DOMAIN__/127.0.0.1#10053
187c187
< image: 192.168.8.69/library/k8s-dns-sidecar-amd64:1.14.8
---
> image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8
200,201c200,201
< - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local.,5,SRV
< - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local.,5,SRV
---
> - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.__PILLAR__DNS__DOMAIN__,5,SRV
> - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.__PILLAR__DNS__DOMAIN__,5,SRV

yaml 配置文件中使用的是私有镜像仓库中的镜像。这些文件都是统一成为一个文件,当然也可以做分离,这样更直观些。

修改好的 kube-dns 相关 yaml 文件参见 kube-dns.yaml

系统预定义的 RoleBinding

预定义的 RoleBinding system:kube-dnskube-system 命名空间的 kube-dns ServiceAccountystem:kube-dns Role 绑定, 该 Role 具有访问 kube-apiserver DNS 相关 API 的权限;

[[email protected] ~]# kubectl get clusterrolebindings system:kube-dns -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: 2018-04-06T09:06:30Z
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:kube-dns
resourceVersion: "87"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/system%3Akube-dns
uid: cbda2173-3979-11e8-8d8b-525400472b24
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:kube-dns
subjects:
- kind: ServiceAccount
name: kube-dns
namespace: kube-system

kube-dns.yaml 里定义的 pods 时使用了 kube-dnsServiceAccount 所以具有访问 kube-apiserver DNS 相关 API 的权限。其他不用配置,例如 kube-dnsServiceAccount 我们默认就好。

配置 kube-dns 相关服务

之前我们在修改 kube-dns.yaml 文件的时候,有如下一处修改:

33c33
< clusterIP: 10.254.0.2
---
> clusterIP: __PILLAR__DNS__SERVER__

spec.clusterIP = 10.254.0.2,明确指定了 kube-dns Service IP,这个 IP 需要和 kubelet 的 --cluster-dns 参数值一致,否则启动 kube-dns 的时候会报错;

执行 kube-dns 定义文件:

大专栏  Kubernetes集群部署DNS插件"language-bash">[[email protected] ~]# cd /opt/k8s-addons/dns/
[[email protected] dns]# ll
total 8
-rw-r--r-- 1 root root 6051 Apr 26 10:47 kube-dns.yaml
[[email protected] dns]# kubectl create -f kube-dns.yaml

验证 kube-dns 相关服务

[[email protected] dns]# kubectl get pods -n kube-system | grep dns
kube-dns-559bc869fb-tzc2b 3/3 Running 0 15d [[email protected] dns]# kubectl get svc -n kube-system | grep dns
kube-dns ClusterIP 10.254.0.2 <none> 53/UDP,53/TCP 15d

可以看出, kube-dns 插件已经安装完成,相关 sevicepod 都在正常工作。

检查 kube-dns 功能

kube-dns 插件安装完成后我们需要验证一下 kube-dns 的相关功能。

新建一个 deployment 验证 kube-dns 功能:

[[email protected] nginx]# cat my-nginx.yaml 

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: 192.168.8.69/library/nginx:1.11.2
ports:
- containerPort: 80

export 该 deployment, 生成 my-nginx 服务:

# kubectl create -f my-nginx.yaml
deployment "my-nginx" created
# kubectl expose deploy my-nginx
service "my-nginx" exposed
# kubectl get services --all-namespaces |grep my-nginx
default my-nginx ClusterIP 10.254.196.99 <none> 80/TCP 6s

创建另一个 pod,查看 /etc/resolv.conf 是否包含 kubelet 配置的 --cluster-dns--cluster-domain,是否能够将服务 my-nginx 解析到 Cluster IP 10.254.196.99

$ kubectl create -f nginx-pod.yaml
$ kubectl exec nginx -i -t -- /bin/bash
[email protected]:/# cat /etc/resolv.conf
nameserver 10.254.0.2
search default.svc.cluster.local. svc.cluster.local. cluster.local. jimmysong.io
options ndots:5 [email protected]:/# ping my-nginx
PING my-nginx.default.svc.cluster.local (10.254.196.99): 56 data bytes
76 bytes from 119.147.223.109: Destination Net Unreachable
^C--- my-nginx.default.svc.cluster.local ping statistics --- [email protected]:/# ping kubernetes
PING kubernetes.default.svc.cluster.local (10.254.0.1): 56 data bytes
^C--- kubernetes.default.svc.cluster.local ping statistics ---
11 packets transmitted, 0 packets received, 100% packet loss [email protected]:/# ping kube-dns.kube-system.svc.cluster.local
PING kube-dns.kube-system.svc.cluster.local (10.254.0.2): 56 data bytes
^C--- kube-dns.kube-system.svc.cluster.local ping statistics ---
6 packets transmitted, 0 packets received, 100% packet loss

从结果来看,service 名称可以正常解析, 说明 kube-dns 可以正常工作。

直接 ping ClusterIPping 不通的,ClusterIP 是根据 iptables 路由到服务的 endpoint上,只有结合 ClusterIP加端口才能访问到对应的服务。

×

真诚赞赏,手留余香

2元
5元
10元
50元
100元
任意金额
2元

使用微信扫描二维码完成支付



Please enable JavaScript to view the comments powered by Disqus.
comments powered by Disqus

Kubernetes集群部署DNS插件的更多相关文章

  1. 基于Kubernetes集群部署skyDNS服务

    目录贴:Kubernetes学习系列 在之前几篇文章的基础,(Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard.为Kubernetes集群部署本地镜像仓库 ...

  2. Docker学习-Kubernetes - 集群部署

    Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...

  3. Kubernetes集群部署关键知识总结

    Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...

  4. kubernetes 集群部署

    kubernetes 集群部署 环境JiaoJiao_Centos7-1(152.112) 192.168.152.112JiaoJiao_Centos7-2(152.113) 192.168.152 ...

  5. kubernetes集群部署

    鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,c ...

  6. 为Kubernetes集群部署本地镜像仓库

    目录贴:Kubernetes学习系列 经过之前两篇文章:Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard,我们基本上已经能够在k8s的集群上部署一个应用了 ...

  7. Kubernetes 集群部署(2) -- Etcd 集群

    Kubenetes 集群部署规划: 192.168.137.81  Master 192.168.137.82  Node 192.168.137.83  Node 以下在 Master 节点操作. ...

  8. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  9. linux运维、架构之路-Kubernetes集群部署

    一.kubernetes介绍        Kubernetes简称K8s,它是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部 ...

随机推荐

  1. LAMP环境搭建,防火墙开启,数据库挂载在逻辑卷

    具体要求: 1. 源码部署 LAMP 环境, 和生产保持一致 2. 静态资源文件同步生产环境 3. 需要同时部署 2 个 web 网站 步骤: 一. 需要的安装包. 提前准备好. apr-util-1 ...

  2. Django框架(六):模型(二) 字段查询、查询集

    1. 字段查询 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询. 函数名 功能 返回值 说明 get 返回表中满足条件的一条且只能有一条数据. 返回值是一个模型类对象. ...

  3. msgfmt - 翻译汉化

    说明 目前大部分自由软件实现国际化使用的是gettext. 国际化就是让程序可以使用多国语言来显示程序里的字符串. 程序里一般都有很多字符串,菜单名也好,错误信息也好,都是字符串.假设字符串为stri ...

  4. 吴裕雄--天生自然TensorFlow高层封装:Keras-TensorFlow API

    # 1. 模型定义. import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist_ ...

  5. [思路笔记]WEB安全之漏洞挖掘

    记录自己在实际渗透测试以及漏洞挖掘中会用到的思路和方法.不断完善,尽量以系统的方式展现程序化式的漏洞挖掘.由于各种原因,不便公开. 通用策略 1.信息搜集 : 数据挖掘.业务挖掘 数据: 邮箱.手机号 ...

  6. shell day01总结

    ,Iptables –Z 清空再计数 内存是如何工作的?是干什么的? 随机存取存储器又称作“随机存储器”,是与CPU直接交换的内部存储器,也叫主存.它可以随时读写,而且速度很快,通常作为操作系统或其他 ...

  7. 36)PHP,获取数据库数据并在html中显示(晋级3)

    首先展示我的html代码和php文件的位置关系: 然后我的php文件: <?php class db { public $host ;//= "localhost";//定义 ...

  8. Leetcode13_罗马数字转整数

    题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1. ...

  9. 作业:for循环,迭代法和穷举法

                                                    for()循环 四要素:初始条件,循环条件,状态改变,循环体. 执行过程:初始条件--循环条件--循环体 ...

  10. python语法基础-基础-控制语句

    ###############    if条件控制语句    ############### # 以下实例 x 为 0-99 取一个数,y 为 0-199 取一个数,如果 x>y 则输出 x,如 ...