Kubernetes安装Dashboard的方法和思路

Kubernetes(下面简称K8s)一直在持续的开发中,更新非常快,网上有很多信息虽然有翔实的安装步骤,但是很快就变得陈旧和不合时宜,因此强烈建议从官网入口,网上的文章只把它当成做一个参考。

本文也有可能很快过时,因此我尽量说明安装的思路和参考文章的引用来源,以提供授人以渔的方法。如果有过时的地方,也请在文章下面添加评论,我看到会尽快进行更新。

先说明一下当前的设备环境:
三台安装Ubuntu16.04 amd64虚机,一台master node,两台worker nodes。K8s的版本为V1.13.1
整个环境放在一台透明代理的路由器后面,因此无需设置加速器(该路由器的DIY方法,见我的博客文章 DIY: 基于OpenWRT和小米路由器的透明代理 以及姊妹篇 DIY: 基于OpenWRT和小米路由器的透明代理(SSR))

root@ha40:kubectl# kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
ha40   Ready    master   8d    v1.13.1
ha41   Ready    <none>   8d    v1.13.1
ha42   Ready    <none>   8d    v1.13.1

官网安装Web UI(Dashboard)的入口为 https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/,安装方法非常简单,只有两个步骤:

  1. 安装
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
  1. 启动代理
kubectl proxy

然后可以通过下面的URL访问 dashboard http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

这种方法确实简单有效,但是在大多数环境中会存在一个很大的问题。那就是我们在安装k8s服务器时,基本都选择Ubuntu的server版本,而不是Ubuntu的desktop版本。Server版本没有图形桌面,无法使用浏览器。因此我们需要一个从外部访问k8s cluster的dashboard方法。

除了上面k8s官网推荐的kubectl proxy方法,Dashboard的官网 https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above 还提到了其他三种方法 :

1: NodePort,这种方法只推荐使用在一个node节点的方案,在大多数的环境都需要多个node节点,因此这种方法没有什么实用价值,不建议使用。
2: API Server,这个是本文的推荐方法,在下文详细列出。
3: Ingress,这个方法我没有试过,后续再更新。

API Server方法:
安装完成Dashboard后,就可以访问 https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 就可以了。但是浏览器会提示下面的错误:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get services/proxy in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard:",
    "kind": "services"
  },
  "code": 403
}

这个错误的原因是k8s基于安全性的考虑,浏览器必须要安装一个根证书,防止中间人攻击(k8s官网的说明在此 https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/

下面是一系列和证书相关的操作:(参考Jose的博客 http://www.joseluisgomez.com/containers/kubernetes-dashboard/
a. 生成crt文件

grep 'client-certificate-data' /etc/kubernetes/admin.conf | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt

b. 生成key文件

grep 'client-key-data' /etc/kubernetes/admin.conf | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key

c. 生成p12证书文件(证书的生成和导入需要一个密码)

openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

d. 将该证书文件导入到chrome浏览器中(这里就不细讲了,不清楚的同学可以用搜索引擎查一下)

再次访问https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/,浏览器显示为:


Screen-Shot-2018-02-18-at-15.09.52-300x208.png

这是网站提示你需要认证(否则任何人都能直接访问了),有两种方式可以认证,我用的是Token方式:

Token的方法,可以参考Dashboard官网的做法,https://github.com/kubernetes/dashboard/wiki/Creating-sample-user 只需要三个命令即可:
a. Create Service Account 创建一个服务帐号

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
EOF

b. Create ClusterRoleBinding 创建ClusterRoleBinding

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
EOF

c. Bearer Token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

将生成的token填入,即可进入dashboard的主页面


2018-12-20 17-24-03屏幕截图.png

大功告成!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容