您的当前位置:首页正文

Kubernetes安装Dashboard的方法和思路

来源:华拓网

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

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

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
  1. 安装
kubectl create -f 
  1. 启动代理
kubectl proxy

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

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

{
  "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
}
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浏览器中(这里就不细讲了,不清楚的同学可以用搜索引擎查一下)


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

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

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

大功告成!