[TOC]
# 安装管理dashboard
[dashboard官网地址](https://github.com/kubernetes/dashboard)
#### 安装
~~~
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
~~~
如果是离线环境,可以根据yaml里面的image字段,把镜像下载下来

* 安装完成`kubectl get pod --allnamespaces`

* 查看监听`kubectl get service --all-namespaces`

#### 访问
访问UI分为三种方式:
* 使用 proxy 方式访问
* 使用 NodePort 方式访问
* 使用 API 方式访问
##### 使用 proxy 访问
Proxy方式需要执行`kubectl proxy`打开proxy端口。
~~~
kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
~~~
##### 使用 API 访问
直接在浏览器中输入:`https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/`
会因为证书问题,返回403,被拒绝访问

这是因为kubeadm默认启动了RBAC功能,而浏览器没有相关的用户证书,所以需要创建一个浏览器证书
* 生成证书
~~~
# 生成client-certificate-data
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
# 生成client-key-data
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
# 生成证书
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
~~~
* 导入证书到浏览器
将生成的`kubecfg.p12`到处浏览器 导入完成后,重新打开浏览器

##### 使用 NodePort 访问
(不需要再执行 kubectl porxy 命令了) 修改service类型
~~~
# 修改service中的type为“NodePort”
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
~~~
#### 修改登录方式(可选)
* 使用用户名密码登录
默认情况下,dashboard只能使用token和config方式登录, 但是可以通过添加`--authentication-mode=basic`选项,使用用户名密码登录
~~~
#下载yaml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
#编辑kubernetes-dashboard.yaml
#在args项里面,添加
args:
- --auto-generate-certificates
- --authentication-mode=basic
#保存文件并执行
kubectl apply -f kubernetes-dashboard.yaml
~~~

* 打开skip按钮 添加`--enable-skip-login`

#### 用户认证登录
##### 使用token认证登录
* 1、创建服务账户admin-user
~~~
kubectl create serviceaccount admin-user -n kube-system
~~~
**或用YAML**
~~~
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
~~~
* 2、admin-user绑定集群cluster-admin角色
~~~
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
#cluster-admin角色在使用kubeadm建设的时候,就已经被自动创建
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
~~~
* 3、查看集群角色绑定:
~~~
kubectl get clusterrolebindings --all-namespaces
~~~

* 4、查看服务账户:
~~~
kubectl get serviceaccounts --all-namespaces
~~~

* 5、获取token并登录
~~~
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
~~~

复制token,进行登录


##### 使用kubeconfig认证登录
使用token的方式使用不方便,所以将token存入到kubeconfig中
创建一个用于**管理默认命名空间**的账号
~~~
kubectl create serviceaccount def-ns-admin -n default
kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
~~~
* 1、初始化集群信息
~~~
kubectl config set-cluster kubernetes --embed-certs=true --server="https://192.168.222.7:16443" --certificate-authority=/etc/kubernetes/pki/ca.crt --kubeconfig=./def-ns-admin.kubeconfig
~~~
* 2、获取token
~~~
DEF_NS_ADMIN_SECRET=$(kubectl -n default get secret | awk '/^def-ns-admin/{print $1}')
DEF_NS_ADMIN_TOKEN=$(kubectl -n default get secret ${DEF_NS_ADMIN_SECRET} -o jsonpath={.data.token}|base64 -d)
kubectl config set-credentials def-ns-admin --token=${DEF_NS_ADMIN_TOKEN} --kubeconfig=./def-ns-admin.kubeconfig
~~~
* 3、设置context列表
~~~
kubectl config set-context def-ns-admin --cluster=kubernetes --user=def-ns-admin --kubeconfig=./def-ns-admin.kubeconfig
~~~
* 4、 指定要使用的context
~~~
kubectl config use-context def-ns-admin --kubeconfig=./def-ns-admin.kubeconfig
~~~
* 5、使用生成的 def-ns-admin.kubeconfig 登录即可
- 一、K8S的安装
- 1.1 安装环境
- 1.2 问题汇总
- 1.3 事前准备
- 1.4 安装配置负载均衡
- 1.5 安装K8S软件
- 1.6 初始化kubeadm
- 1.7 添加控制节点
- 1.8 添加计算节点
- 1.9 安装故障问题处理
- 1.10 安装管理dashboard
- 1.11 编写测试Pod
- 1.12 从外部访问集群中的Pod
- 1.13 部署metrics-server指标采集
- 二、Pod管理
- 2.1 Pod 资源需求和限制
- 2.2 Init 容器
- 2.3 Pod 健康检查(探针)和重启策略
- 2.4 Pod 生命周期(钩子Hook)
- 2.5 静态Pod
- 2.6 初始化容器(init container)
- 2.7 资源限制
- 三、资源控制器
- 3.1 Deployment
- 3.2 StatefulSet
- 3.3 DaemonSet
- 3.4 Job
- 3.5 定时任务
- 3.6 准入控制器
- 3.7 自动伸缩
- 3.8 ReplicaSet
- 四、存储
- 4.1 Secret 管理敏感信息
- 4.2 ConfigMap 存储配置
- 4.3 Volume
- 4.4 PV
- 4.5 PVC
- 4.6 StorageClass
- 4.7 暴露宿主机信息给Pod
- 五、服务Service
- 5.1 Service 资源
- 5.2 服务发现
- 5.3 服务暴露
- 5.4 Ingress 资源
- 5.5 Ingress 专题
- 5.6 traefik 2.X版本使用
- 六、认证、授权、准入控制
- 6.1 服务账户
- 6.2 LimitRange资源与准入控制器
- 6.3 ResourceQuota 资源与准入控制器
- 七、Helm
- 7.1 Helm 安装
- 八、 istio
- 8.1 istio 介绍
- 8.2 iotis 安装
- 九、calico
- 9.1 两种网络模式
- 9.2 全互联模式 与 路由反射模式
- 9.3 BGP跨网段(大型网络)
- 十、Ingress
- 10.1 安装 LoadBalancer
- 10.2 部署 ingress-nginx
- 10.3 Ingress-nginx 的使用
- 10.4 开启TCP和UDP
- 使用中的问题
- CSI Node问题
