本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复【K8s实战】获取

介绍


项目地址:https://github.com/coredns/coredns

CoreDNS是一个Go语言实现的链式插件DNS服务端,是CNCF成员,是一个高性能、易扩展的DNS服务端。可以很方便的部署在k8s集群中,用来代替kube-dns。

下载coredns 编排


[root@master-01 ]#mkdir /opt/coredns && cd /opt/coredns[root@master-01 coredns]# wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/coredns.yaml.sed[root@master-01 coredns]# wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/deploy.sh

修改编排文件


主要用到了deploy.sh和coredns.yam.sed,由于不是从kube-dns转到coredns,所以要注释掉kubectl相关操作,修改REVERSE_CIDRS、DNS_DOMAIN、CLUSTER_DNS_IP等变量为实际值

[root@master-01 coredns]# chmod +x deploy.sh[root@master-01 coredns]# ./deploy.sh -s -r 10.254.0.0/16 -i 10.254.0.10 -d cluster.local > coredns.yaml[root@master-01 coredns]# diff coredns.yaml coredns.yaml.sed 58c58< kubernetes cluster.local 10.254.0.0/16 {---> kubernetes CLUSTER_DOMAIN REVERSE_CIDRS {62c62< }---> }FEDERATIONS64c64< forward . /etc/resolv.conf---> forward . UPSTREAMNAMESERVER69c69< }---> }STUBDOMAINS171c171< clusterIP: 10.254.0.10---> clusterIP: CLUSTER_DNS_IP

部署coredns


[root@master-01 coredns]# kubectl create -f coredns.yamlserviceaccount/coredns createdclusterrole.rbac.authorization.k8s.io/system:coredns createdclusterrolebinding.rbac.authorization.k8s.io/system:coredns createdconfigmap/coredns createddeployment.apps/coredns createdservice/kube-dns created

测试功能


查看svc地址

[root@master-02 kubernetes]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.254.0.1 <none> 443/TCP 19hnginx NodePort 10.254.58.237 <none> 80:34542/TCP 15h

起个busybox测试

[root@master-01 coredns]# kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools1If you don't see a command prompt, try pressing enter.dnstools# lsbin dev etc home lib media mnt proc root run sbin srv sys tmp usr vardnstools# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:2F:02 inet addr:172.17.47.2 Bcast:172.17.47.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:656 (656.0 B) TX bytes:0 (0.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)dnstools# nslookup kubernetesServer: 10.254.0.10Address: 10.254.0.10#53Name: kubernetes.default.svc.cluster.localAddress: 10.254.0.1dnstools# nslookup nginxServer: 10.254.0.10Address: 10.254.0.10#53Name: nginx.default.svc.cluster.localAddress: 10.254.58.237dnstools# cat /etc/resolv.conf nameserver 10.254.0.10search default.svc.cluster.local. svc.cluster.local. cluster.local.options ndots:5dnstools# dnstools# ping baidu.comPING baidu.com (123.125.115.110): 56 data bytes64 bytes from 123.125.115.110: seq=0 ttl=127 time=36.423 ms64 bytes from 123.125.115.110: seq=1 ttl=127 time=35.546 ms

至此coredns部署完成,接下来安装dashboard组件

dashboard部署


由于国内不能下载gcr.io下的镜像,所以使用阿里云的

下载编排文件

[root@master-01]#mkdir /opt/dashboard &&cd /opt/dashboard[root@master-01dashboard]#wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

修改其中image地址为阿里云的地址

spec:containers:- name: kubernetes-dashboardimage: registry.cn-beijing.aliyuncs.com/minminmsn/kubernetes-dashboard:v1.10.1

修改其中Service配置,将type: ClusterIP改成NodePort,便于通过Node端口访问

# ------------------- Dashboard Service ------------------- kind: ServiceapiVersion: v1metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-systemspec:type: NodePortports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard

生产自定义证书


[root@master-01 dashboard]# openssl req -nodes -newkey rsa:2048 -keyout dashboard.key -out dashboard.csr -subj "/C=/ST=/L=/O=/OU=/CN=kubernetes-dashboardGenerating a 2048 bit RSA private key...................+++................................................+++writing new private key to 'dashboard.key'-----No value provided for Subject Attribute C, skippedNo value provided for Subject Attribute ST, skippedNo value provided for Subject Attribute L, skippedNo value provided for Subject Attribute O, skippedNo value provided for Subject Attribute OU, skipped[root@master-01 dashboard]# openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crtSignature oksubject=/CN=kubernetes-dashboardGetting Private key[root@master-01 dashboard]# kubectl create secret generic kubernetes-dashboard-certs --from-file=. -n kube-systemsecret/kubernetes-dashboard-certs created

如果有购买证书的话,直接创建srcret即可

[root@master-01 dashboard]# kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kube-systemsecret/kubernetes-dashboard-certs created

开始创建kubernetes-dashboard

[root@master-01 dashboard]# kubectl apply -f kubernetes-dashboard.yaml Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl applysecret/kubernetes-dashboard-certs configuredsecret/kubernetes-dashboard-csrf createdserviceaccount/kubernetes-dashboard createdrole.rbac.authorization.k8s.io/kubernetes-dashboard-minimal createdrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal createddeployment.apps/kubernetes-dashboard createdservice/kubernetes-dashboard created

查看服务状态

[root@master-01 dashboard]# kubectl get pod -nkube-system -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEScoredns-5d668bd598-dt4qm 1/1 Running 0 96m 172.17.79.3 192.168.209.132 <none> <none>coredns-5d668bd598-f5g96 1/1 Running 1 14h 172.17.44.2 192.168.209.131 <none> <none>kubernetes-dashboard-cb55bd5bd-gc84g 1/1 Running 0 55s 172.17.47.2 192.168.209.133 <none> <none>[root@master-01 dashboard]# kubectl -nkube-system get ep -owideNAME ENDPOINTS AGEkube-controller-manager <none> 20hkube-dns 172.17.44.2:53,172.17.79.3:53,172.17.44.2:53 + 3 more... 14hkube-scheduler <none> 20hkubernetes-dashboard 172.17.47.2:8443 97s[root@master-01 dashboard]# kubectl -nkube-system get svc -owideNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORkube-dns ClusterIP 10.254.0.10 <none> 53/UDP,53/TCP,9153/TCP 14h k8s-app=kube-dnskubernetes-dashboard NodePort 10.254.65.137 <none> 443:49365/TCP 101s k8s-app=kubernetes-dashboard

浏览器访问


选择token访问,token获取方法如下

获取token

[root@master-01 dashboard]# cat /k8s/yaml/admin-token.yaml kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata:name: adminannotations:rbac.authorization.kubernetes.io/autoupdate: "true"roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.iosubjects:- kind: ServiceAccountname: adminnamespace: kube-system---apiVersion: v1kind: ServiceAccountmetadata:name: adminnamespace: kube-systemlabels:kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile[root@master-01 dashboard]# kubectl apply -f admin-token.yaml clusterrolebinding.rbac.authorization.k8s.io/admin createdserviceaccount/admin created[root@master-01 dashboard]# kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-systemName: admin-token-7lxxtNamespace: kube-systemLabels: <none>Annotations: kubernetes.io/service-account.name: adminkubernetes.io/service-account.uid: a913db42-4473-11e9-8484-000c29721372Type: kubernetes.io/service-account-tokenData====ca.crt: 1363 bytesnamespace: 11 bytestoken: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi03bHh4dCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE5MTNkYjQyLTQ0NzMtMTFlOS04NDg0LTAwMGMyOTcyMTM3MiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.ioFkVN9L_teW8Dda3vBGwiZVVL45tLghbPHQboSXEAq6C4sqnxZzKCfltO_B8hW2Cnkwzkghkw4YH6QvQuRQ7rakOYHUbVDynlt1TpjsBYNXTUp_DVCzNYLgK8ddkbG3SNnAurjqAAT7q4Cyy7e3v6h4vxmghyTTYRpYgtkpjxH-26TWD0FpwdO8iSfCnroNjUrEbm1vfCNRgJome7XNMLNZKcxB27V1wZk2Lk8suA67PtOv2iM_oL4UrO-qiVtLnq8mOqtwiJhk9eNk2zaDw0_2qZs9BsdYQwOB3pUkKEXktm9mIU4IUQXvBUKtA5Fltc6ZZ0WPv2x5JQ9d3PsVuw

访问任意一个节点IP端口是NodePort动态生成的

出现如下页面,选择令牌,输出刚查出的token,点击登录

首页如下

好了,本章介绍了如何部署k8s组件coredns和dashboard,敬请期待后续分享,谢谢

END

如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是对小编最好的支持,非常感谢!

Kubernetes系列之Coredns and Dashboard介绍篇的更多相关文章

  1. Windows玩转Kubernetes系列4-搭建K8S Dashboard

    下载官方yaml文件 最新的配置文件v2.0.0-beta8版本recommended.yaml,UI地址 wget https://raw.githubusercontent.com/kuberne ...

  2. Kubernetes系列之Helm介绍篇

    本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复[K8s实战]获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来 ...

  3. kubernetes系列之ConfigMap使用方式

    作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦 ...

  4. Kubernetes系列之理解K8s Service的几种模式

    今天给大家介绍下k8s的service的几种访问模式. 概述 我们知道pod的ip不是固定的,是根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会变,那pod与pod之间需要 ...

  5. Kubernetes系列(五) Ingress

    作者: LemonNan 原文地址: https://juejin.im/post/6878269825639317517 Kubernetes 系列 Kubernetes系列(一) Pod Kube ...

  6. Kubernetes系列(三) Deployment

    作者: LemonNan 原文地址: https://juejin.im/post/6865672466939150349/ Kubernetes 系列 Kubernetes系列(一) Pod Kub ...

  7. kubernetes系列(十七) - 通过helm安装dashboard详细教程

    1. 前提条件 2. 配置https证书为secret 3. dashboard安装 3.1 helm拉取dashboard的chart 3.2 配置dashboard的chart包配置 3.3 he ...

  8. 从0到1使用Kubernetes系列(二):安装工具介绍

    该系列第一篇为:<从0到1使用Kubernetes系列--Kubernetes入门>.本文是Kubernetes系列的第二篇,将介绍使用Kubeadm+Ansible搭建Kubernete ...

  9. Kubernetes学习之路(七)之Coredns和Dashboard二进制部署

    一.CoreDNS部署 在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问. (1)编辑coredns.yaml文 ...

随机推荐

  1. web安全之机器学习入门——2.机器学习概述

    目录 0 前置知识 什么是机器学习 机器学习的算法 机器学习首先要解决的两个问题 一些基本概念 数据集介绍 1 正文 数据提取 数字型 文本型 数据读取 0 前置知识 什么是机器学习 通过简单示例来理 ...

  2. java将图片传为设定编码值显示(可做刺绣)

    import java.awt.Color; import java.awt.image.BufferedImage;import java.io.File;import java.io.IOExce ...

  3. bind()方法

    当点击鼠标时,隐藏或显示 p 元素: $("button").bind("click",function(){ $("p").slideTo ...

  4. pandas库的学习笔记

    Environment pandas 0.21.0 python 3.6 jupyter notebook 开始 习惯上,我们导入如下: import pandas as pd import nump ...

  5. Vue-箭头函数

    03-箭头函数   箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; ...

  6. html5中如何更改、去掉input type默认样式

    1.如何去掉input type=date 默认样式 HTML代码: 选择日期:<input type="date" value="2017-06-01" ...

  7. python3安装scrapy--记录

    1.pip install wheel 2.url=http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 搜索 下载对应的twiset和scrapy版本到本地 ...

  8. 1.Float精度在JS的解决方法

    最近做了一个有关折扣价的计算的功能,所有的运算都是在前台通过js来做,做完之后经过手工核算发现了一个问题,当时做的一个例子是10*0.94,按照我们正常的思维,这个结果应该是9.4,但是在js中的计算 ...

  9. MyBatis在非Spring环境下第三方DataSource设置-Druid篇

    首先在ITEye上面看到一个同标题文章,在此说明,此文并非转载自 http://iintothewind.iteye.com/blog/2069522 ,因为这篇文章根本就是错误的,照着上面做,工程可 ...

  10. PyCharm连接远程服务器

    PyCharm连接远程服务器 1.Tools->Start SSH session 2.新建一个连接或者选择一个已经存在的sftp 3.选择Edit credentials 填写相关连接信息 4 ...