获取dashboard yaml文件node
curl -O https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
更改官网镜像地址git
sed -i 's/k8s\.gcr\.io/jicki/g' kubernetes-dashboard.yaml
导入文件github
# kubectl apply -f kubernetes-dashboard.yaml secret "kubernetes-dashboard-certs" created serviceaccount "kubernetes-dashboard" created role "kubernetes-dashboard-minimal" created rolebinding "kubernetes-dashboard-minimal" created deployment "kubernetes-dashboard" created service "kubernetes-dashboard" created
访问方式web
Kubernetes 暴露服务的方式目前只有三种:LoadBlancer Service、NodePort Service、Ingressvim
一、NodePortapi
为了方便验证,这里采用NodePort是将节点直接暴露在外网的一种方式,只建议在开发环境,单节点的安装方式中使用。浏览器
启用NodePort很简单,只需执行kubectl edit命令进行编辑,将type: ClusterIP修改成type: NodePort(将service监听端口映射到node节点)安全
保存后使用kubectl get service命令来查看自动生成的端口app
# kubectl -n kube-system edit service kubernetes-dashboard
type: ClusterIP --->type:NodePort
#kubectl -n kube-system get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR service/kubernetes-dashboard NodePort 10.254.37.88 <none> 443:30469/TCP 2d18h k8s-app=kubernetes-dashboard
此时能够经过局域网进行正常访问curl
https://172.17.213.60:30469
二、API Server
作好下面的浏览器访问kube-apiserver安全端口后能够直接经过 API Server的方式进行访问:
https://172.17.213.60:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
Dashboard登录认证
首先建立一个dashboard rbac超级用户
# vim dashboard-admin-rbac.yaml
--- apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard-admin namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard-admin labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard-admin namespace: kube-system
# kubectl apply -f dashboard-admin-rbac.yaml
查看超级用户的token名称
# kubectl -n kube-system get secret | grep kubernetes-dashboard-admin
查看token部分
# kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-*****
登录web ui选择“令牌登录”,输入上面的token
浏览器访问kube-apiserver安全端口
通常状况下访问kube-apiserver的安全端口6443时,会提示证书不被信任。这是由于 kube-apiserver 的 server 证书是咱们建立的根证书 ca.pem 签名的,须要将根证书 ca.pem 导入操做系统,并设置永久信任。对于 Mac,操做以下: 启动台-->搜索输入“钥匙串访问”
对于win使用如下命令导入ca.perm
keytool -import -v -trustcacerts -alias appmanagement -file "PATH...\\ca.pem" -storepass password -keystore cacerts
再次访问 https://172.17.213.60:6443/,已信任,但提示 401,未受权的访问:Unauthorized
咱们须要给浏览器生成一个 client 证书,访问 apiserver 的 6443 https 端口时使用。
这里使用部署 kubectl 命令行工具时建立的 admin 证书、私钥和上面的 ca 证书,建立一个浏览器可使用的 PKCS#12/PFX 格式的证书:
openssl pkcs12 -export -out admin.pfx -inkey admin-key.pem -in admin.pem -certfile ca.pem
将建立的 admin.pfx 导入到系统的证书中
重启浏览器,再次访问时提示选择一个浏览器证书,选中上面导入的 admin.pfx 后实现访问正常。
客户端选择证书的原理
一、证书选择是在客户端和服务端 SSL/TLS 握手协商阶段商定的; 二、服务端若是要求客户端提供证书,则在握手时会向客户端发送一个它接受的 CA 列表; 三、客户端查找它的证书列表(通常是操做系统的证书,对于 Mac 为 keychain),看有没有被 CA 签名的证书,若是有,则将它们提供给用户选择(证书的私钥); 四、用户选择一个证书私钥,而后客户端将使用它和服务端通讯;