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. Linux inode 理解

    inode 硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB).操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性读取一 ...

  2. Win10用Windows照片查看程序(照片查看器)打开图片

    以上方法只能一个个添加,也有人说不好使,这里给出一个我写的批处理程序,反正我一直用着很好.   ::复制以下内容到记事本: @echo off&cd\&color 0a&cls ...

  3. UML-词汇表

    样例:

  4. tensorflow(五)

    一.单机编程框架 单机程序是指启动和运行都在一台机器的一个进程中完成,因为没有网络开销,非常适合参数不多.计算量小的模型. 步骤,创建单机数据流图,创建并运行单机会话. saver = tf.trai ...

  5. vue axios从服务器加载图片并显示

    使用场景: 后台传给前端一个图片二进制流,但是要添加httpp header,但是在传统的用img标签查看图片,无法添加http header this.$axios({ method: 'get', ...

  6. pycharm、Django+node.js、vue搭建web项目

    参考文章:https://www.wandouip.com/t5i35466/  在此感谢 本篇接着上一篇:windows10使用npm安装vue.vue-cli 首先Django项目是搭建好的,就是 ...

  7. Exchange Onine 公用文件夹

    公用文件夹专为共享访问设计,为收集.组织信息及工作组织中的其他人共享信息提供提供了一种轻松.有效的方式.公用文件夹帮助以易于浏览的层次结构来组织内容. 一.公用文件夹的适用环境 公用文件夹在以下out ...

  8. SAP PM:设备主数据常用BAPI

    如下参考: STATUS_CHANGE_EXTERN BAPI_EQMT_MODIFY BAPI_EQUI_CHANGE PM BAPI: Change Equipment BAPI_EQUI_CRE ...

  9. StartDT AI Lab | 视觉智能引擎——从Face ID说起,浅析顾客数字化

    “顾客就是上帝”,这句西谚揭示了顾客占据着商业活动中心地位这一客观规律.为了能更好地服务顾客,优化商家自身的服务与产品,对顾客的分析与需求调研一直是商业经营分析中的重中之重. 在商业互联网化.社会数字 ...

  10. 62)PHP,提示跳转

    由于就是一个普通的页面展示,提示的样式,可以轻松定制! 语法: Header()后的代码会执行,因此在处理好跳转相关操作后,脚本也应该被DIE掉! 案例中实现跳转 封装一个可以完成跳转的方法,需要时, ...