Open cisen opened 5 years ago
K8S dashboard https://www.cnblogs.com/klvchen/p/9963642.html kubernetes-dashboard有两种认证方式,一个token认证,另一个是Kubeconfig文件的认证。这个时候的认证不是UserAccount而是获取kubernetes集群资源信息的serviceAccount。
# 创建一个dashboard的私钥
cd /etc/kubernetes/pki/
# 注意这里要创建key
umask 077; openssl genrsa -out dashboard.key 2048
# 生成一个证书签署请求
openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=klvchen/CN=dashboard"
# 通过ca.key和ca.crt签署证书
openssl x509 -req -in dashboard.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dashboard.crt -days 365
# 通过签署证书创建一个sercert
kubectl create secret generic dashboard-cert -n kube-system --from-file=dashboard.crt=./dashboard.crt --from-file=dashboard.key=./dashboard.key
# 创建一个专用的 serviceaccount 帐号 dashboard-admin
kubectl create serviceaccount dashboard-admin -n kube-system
# 绑定角色 cluster-admin
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 查看 dashboard-admin 的 Tokens
kubectl describe serviceaccount dashboard-admin -n kube-system
# 根据上面显示为 dashboard-admin-token-wrfng
kubectl get secret -n kube-system
kubectl describe secret dashboard-admin-token-wrfng -n kube-system
# 获取 token 值,用来在填写网页登录认证信息
# 创建 dashboard 所需要的资源
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml
kubectl get pods -n kube-system
kubectl get svc -n kube-system
# 修改 svc 的的网络类型
kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
kubectl get svc -n kube-system
# 获取 NodePort 映射的外网端口,这里是 32240
使用 火狐浏览器 访问 https://192.168.0.205:32240 ,点击 高级, 添加例外。这里使用 chrome 和 搜狗浏览器没法出来界面。
# 创建一个访问 default命令空间的 serviceaccount 账号
cd /etc/kubernetes/pki
kubectl create serviceaccount def-ns-admin -n default
# 创建 rolebinding 把 def-ns-admin 与 admin 关联
kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
# 查看 def-ns-admin 的 token
kubectl get secret
kubectl describe secret def-ns-admin-token-8vzj5
# 创建一个kubeconfig配置文件(基于token配置)
kubectl config set-cluster kubernetes --certificate-authority=./ca.crt --server="https://192.168.0.205:6443" --embed-certs=true --kubeconfig=/root/def-ns-admin.conf
kubectl config view --kubeconfig=/root/def-ns-admin.conf
DEF_NS_ADMIN_TOKEN=$(kubectl get secret def-ns-admin-token-8vzj5 -o jsonpath={.data.token} |base64 -d)
kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf
kubectl config view --kubeconfig=/root/def-ns-admin.conf
# 配置上下文
kubectl config set-context def-ns-admin@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/def-ns-admin.conf
# 配置当前上下文
kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf
kubectl config view --kubeconfig=/root/def-ns-admin.conf
# 下载 def-ns-admin.conf
# 使用 火狐浏览器 访问
https://192.168.0.205:31328
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml
kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
一:token: (1) 创建 ServiceAccount,根据其管理目标,使用 rolebinding 或 clusterrolebinding 绑定至合理 role 或 clusterrole; (2) 获取到此 ServiceAccount 的 secret, 查看 secret 的详细信息,其中就有 token;
二:kubeconfig: 把 ServiceAccount 的 token封装为 kubeconfig 文件 (1) 创建 ServiceAccount,根据其管理目标,使用 rolebinding 或 clusterrolebinding 绑定至合理 role 或 clusterrole; (2) kubectl get secret | awk '/^ServiceAccount/{print $1}' DEF_NS_ADMIN_TOKEN=$(kubectl get secret def-ns-admin-token-8vzj5 -o jsonpath={.data.token} |base64 -d) (3) 生成 kubeconfig 文件
kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-credentials NAME --token=$KUBE_TOKEN --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-context
kubectl config use-context
https://www.cnblogs.com/klvchen/p/9963642.html
重要
v1.10.1支持的k8s版本
kubernetes集群UI访问是默认使用认证的https,而dashboard默认使用的自签署证书,默认自生成的证书很明显不是当前使用kubernetes集群签署的,在浏览器上是无权限访问,安装dashboard前要生成自己的kubernetes集群签署证书给运行dashboard的Pod使用。
(1) 生成dashboard证书
(2) 安装dashboard插件
(3) 生成登录token和授权
上面创建serviceaccount和绑定使用了参数-n kube-system,说明该帐号拥有集群管理权限,如果需要创建命名空间级别的帐号,去掉参数默认使用default命名空间即可。
代理访问
忽略证书访问