Kubernetes集群部署DNS插件
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-dns
将 kube-system
命名空间的 kube-dns ServiceAccount
与 ystem: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-dns
的 ServiceAccount
所以具有访问 kube-apiserver
DNS 相关 API 的权限。其他不用配置,例如 kube-dns
的 ServiceAccount
我们默认就好。
配置 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
插件已经安装完成,相关 sevice
及 pod
都在正常工作。
检查 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 ClusterIP
是ping
不通的,ClusterIP
是根据iptables
路由到服务的endpoint
上,只有结合ClusterIP
加端口才能访问到对应的服务。
真诚赞赏,手留余香
5元
10元
50元
100元
任意金额
使用微信扫描二维码完成支付
Please enable JavaScript to view the comments powered by Disqus.
comments powered by Disqus
Kubernetes集群部署DNS插件的更多相关文章
- 基于Kubernetes集群部署skyDNS服务
目录贴:Kubernetes学习系列 在之前几篇文章的基础,(Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard.为Kubernetes集群部署本地镜像仓库 ...
- Docker学习-Kubernetes - 集群部署
Docker学习 Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通搭建 Docker学习-Docker搭建Consul集群 Docker学习-简单的私有Dock ...
- Kubernetes集群部署关键知识总结
Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...
- kubernetes 集群部署
kubernetes 集群部署 环境JiaoJiao_Centos7-1(152.112) 192.168.152.112JiaoJiao_Centos7-2(152.113) 192.168.152 ...
- kubernetes集群部署
鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,c ...
- 为Kubernetes集群部署本地镜像仓库
目录贴:Kubernetes学习系列 经过之前两篇文章:Centos7部署Kubernetes集群.基于kubernetes集群部署DashBoard,我们基本上已经能够在k8s的集群上部署一个应用了 ...
- Kubernetes 集群部署(2) -- Etcd 集群
Kubenetes 集群部署规划: 192.168.137.81 Master 192.168.137.82 Node 192.168.137.83 Node 以下在 Master 节点操作. ...
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- linux运维、架构之路-Kubernetes集群部署
一.kubernetes介绍 Kubernetes简称K8s,它是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部 ...
随机推荐
- Centos7安装Xrdp远程桌面
Xrdp是Microsoft远程桌面协议RDP的一个开源实现,它允许以图像方式控制远程系统. 测试环境 服务端: CentOS Linux release 7.7.1908 (Core) 客户端: W ...
- HDU 1257最少拦截系统[动态规划]
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1257 最 ...
- typescript 使用的几种情况
接口的创建 可以使用 type 和 interface 来创建类型 type 特有的优点: 声明基本类型别名,联合类型,元组等类型 type S = string; type IFoo = IBar ...
- Python语言学习前提:基础语法
一.变量 1.变量:存储数据.存储数据需要对应内存空间,基于变量的数据类型,解释器会分配指定内存,决定什么数据被存储到内存中. 变量数据类型:整数.小数.字符. 2.变量赋值:变量在使用前必须赋值,赋 ...
- drf框架的解析模块-异常处理模块-响应模块-序列化模块
解析模块 为什么要配置解析模块 (1).drf给我们通过了多种解析数据包方式的解析类. (2).我们可以通过配置来控制前台提交的那些格式的数据台解析,那些数据不解析. (3).全局配置就是针对一个视图 ...
- Opencv笔记(六)——把滑动条当调色板
学习目标: 学会把滑动条绑定到 OpenCV 的窗口. 学习函数:cv2.getTrackbarPos(), cv2.creatTrackbar()等. 简单演示: 通过调节滑动条来设定画板颜色.我们 ...
- 892B. Wrath#愤怒的连环杀人事件(cin/cout的加速)
题目出处:http://codeforces.com/problemset/problem/892/B 题目大意:一队人同时举刀捅死前面一些人后还活着几个 #include<iostream&g ...
- POJ-3264 Balanced Lineup(区间最值,线段树,RMQ)
http://poj.org/problem?id=3264 Time Limit: 5000MS Memory Limit: 65536K Description For the daily ...
- css3应用
画出一个禁行标志 border-radius: 50%; width: 100px; height: 100px; border: 10px solid red; background: linear ...
- vue2.0学习之路由
下载vue-router: cnpm install vue-router --save router/main.js /*引入所需要的组件*/ import VueRouter from 'vue- ...