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开源的容器集群管理系统(谷歌内部 ...
随机推荐
- 金蝶cloud成本核算流程
- GO、 智能合约、cannot use transactionRecordId + strconv.Itoa(id) (type string) as type byte in append
1.报错详情 2.在写fabric go智能合约发送的错误,像我这样的新手就是踩坑踩坑踩坑 3.下面是代码片段 4.研究了一下append用法.也看了下GO语言官网文章: var test_str [ ...
- java去掉数字后面的0
有些财务业务场景是需要把数字多余的0去掉的. 可以这么写 private String getRealData(BigDecimal num) { if (num == null) { return ...
- ionic3 修改页面切换动画
在app.module.ts中 配置pageTransition属性 [ BrowserModule, IonicModule.forRoot(MyApp, { pageTransition: 'io ...
- layui表格自动对齐
正常情况table应该是这样展示的 但是却展示成了这样 格子没对齐,找了半天原因发现是在table.render中的cols参数多了一个"," 不细心一点真看不出来 正常结构应是 ...
- 基于css完成网页的国际化
css完成国际化 前提 在日常处理国际化的时候,通常是将key通过类似intl.xx(key)转换为对应环境的文案,可是如果需要在css中加入对应逻辑应该怎么做呢(比如在after的伪元素中显示不同的 ...
- POJ 3617 Best Cow Line 字典序最小
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #inc ...
- Office 365管理员添加自定义域名
添加自定义域,以便Office 365允许更短.更熟悉的的电子邮件或用户ID用于服务 一.Office 365小型企业版添加自定义域名 1.使用Office 365管理员账户登陆到由世纪互联运营的Of ...
- 文本输入框input将输入转换为统一大小写
转载地址:http://blog.csdn.net/yieryi_/article/details/52078596 文本输入框input将输入转换为统一大小写,通常有两种方法:JS和CSS方法. 1 ...
- windows下面apache配置虚拟目录(测试使用,发布网站不建议目录访问)
windows下面是这样简单设置 1 Apache虚拟目录: 针对某一目录可以这么设置: Alias /aidd2008 "D:/php/web/aidd2008" <Dir ...