k8s学习笔记-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

 安装存在几个问题:

  1. 镜像国内无法直接访问
  2. dashboard的默认webui证书是自动生成的,由于时间和名称存在问题,导致谷歌和ie浏览器无法打开登录界面,经过测试Firefox可以正常打开
  3. 应用的权限太小,默认登录进去界面显示权限问题

一:解决镜像问题

#拉取镜像
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
#重新打标签
docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
#删除无用镜像
docker rmi mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

[root@k8s-master ~]# kubectl get pods -n kube-system |egrep dashboard

kubernetes-dashboard-767dc7d4d-n4clq  1/1       Running 0 3s

二:解决证书问题

如果用火狐浏览可以用默认生成的

 kubectl get secret -n kube-system |egrep certs

 kubernetes-dashboard-certs                                    Opaque 2 4m35s

 我们用openssl自定义一个证书

cd /etc/kubernetes/pki/

[root@k8s-master pki]# (umask 077;openssl genrsa -out dashboard.key 2048)
[root@k8s-master pki]# openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=magedu/CN=dashboard"
[root@k8s-master pki]# openssl x509 -req -in dashboard.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dashboard.crt -days 365

kubectl delete  -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

或者是直接删除  kubectl delete secret kubernetes-dashboard-certs  -n kube-system 

kubectl create secret generic kubernetes-dashboard-certs -n kube-system --from-file=./dashboard.crt --from-file=dashboard.key=./dashboard.key

可以看到自己定义的数据在DATA里面

kubectl get secret kubernetes-dashboard-certs -n kube-system -o yaml 

需要发布成节点访问,或者kubectl proxy 

这里修改service 为nodeport类型

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

[root@wan129 pki]# kubectl get svc -n kube-system |egrep dashboard
kubernetes-dashboard          NodePort 10.96.47.28  <none> 443:30410/TCP 11m

通过浏览器访问就可以登录界面了,可以在客户端浏览器增加信任

三:解决权限问题 

接下来我们通过token (令牌来验证)来登录界面

默认定义的sa ,绑定的权限比较小

# ------------------- Dashboard Service Account ------------------- # apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system ---

[root@k8s-master ~]# kubectl get sa -n kube-system

修改SA 为集群管理权限,权限相关的问题关注上一篇

在修改之前需要删除之前的sa

kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml 

两种方式:

第一种方式

源文件

修改后的文件

roleRef:
   apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: cluster-admin
kubectl apply -f kubernetes-dashboard.yaml

第二种方式

kubectl delete clusterrolebinding  dashboard-cluster-admin

kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

当然也可以用yaml 定义 

apiVersion: rbac.authorization.k8s.io/v1beta1

kind: ClusterRoleBinding
metadata:
   name: kubernetes-dashboard
   labels:
      k8s-app: kubernetes-dashboard
roleRef:
     apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
subjects:
-  kind: ServiceAccount
   name: kubernetes-dashboard
   namespace: kube-system

[root@k8s-master ~]# kubectl get clusterrolebinding |egrep dashboard

这样可以通过SA 来获取token
[root@k8s-master ~]# kubectl get secret -n kube-system |egrep dashboard-token
kubernetes-dashboard-token-sfvzz kubernetes.io/service-account-token 3 4m5s
[root@k8s-master ~]# kubectl describe secret/kubernetes-dashboard-token-sfvzz -n kube-system|egrep token

然后复制拷贝到令牌认证里面,成功后的界面

最简单的是创建一个SA,给绑定集群管理的权限,然后获取这个token当令牌,然后登陆即可

 

kubectl create serviceaccount def-cls-admin -n kube-system
kubectl create clusterrolebinding def-cls-admin --clusterrole=cluster-admin --serviceaccount=kube-system:def-cls-admin
kubectl get secret -n kube-system|egrep def-cls-admin
kubectl describe secret/def-cls-admin-token-xgb4x -n kube-system|egrep token:

 

限制只能在默认名称空间里面

定义一个只能访问默认名称空间的sa, 绑定到集群角色admin 

kubectl create serviceaccount def-ns-admin
kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
kubectl describe secret def-ns-admin-token-lqvv8
kubectl get secret|egrep def-ns-admin
def-ns-admin-token-lqvv8  kubernetes.io/service-account-token  3  2m
kubectl describe secret def-ns-admin-token-lqvv8 |egrep token:
拷贝进去令牌认证,只能对default名称空间有作用,因为是rolebinding

Kubeconfig 登陆:


下面通过kubconfig conf命令,补全所需要的信息:
参考kubeconfig config view 

1.集群信息补全:

#kubectl config set-cluster kubernetes --certificate-authority=./ca.crt --server="https://10.211.55.11:6443" \
--embed-certs=true --kubeconfig=/root/def-ns-admin.conf

可以简单一点

kubectl config set-cluster kubernetes  --server="https://10.211.55.11:6443"  --kubeconfig=/root/def-ns-admin.conf

Cluster "kubernetes" set.
kubectl config view --kubeconfig=/root/def-ns-admin.conf

2.集群认证信息补全:

kubectl config set-credentials NAME [--client-certificate=path/to/certfile] [--client-key=path/to/keyfile]
[--token=bearer_token] [--username=basic_user] [--password=basic_password] [--auth-provider=provider_name]
[--auth-provider-arg=key=value] [options]

认证方式可以通过证书文件,也可以通过token,这里通过tonken方式来认证

kubectl describe secret def-ns-admin-token-lqvv8 |egrep token: #这个直接base64 会有问题,需要转成json
DEFAULT_TOKEN=$(kubectl get secret def-ns-admin-token-lqvv8 -o jsonpath={.data.token} |base64 -d)
kubectl config set-credentials def-ns-admin --token=$DEFAULT_TOKEN --kubeconfig=/root/def-ns-admin.conf

3.配置上下文
kubectl config set-context def-ns-admin@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/def-ns-admin.conf

4.当前上下文
kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf
kubectl get pods 验证一下
kubectl config view --kubeconfig=/root/def-ns-admin.conf

下载这个文件到客户端就可以实现登录页面了

总结:
认证时的账号必须为serviceaccount:被dashboard POD 拿来由K8S 进行认证
token:
1.创建sa,根据其管理目标,使用rolebinding 或者clusterrolebinding绑定到合同的role 或者clusterrole
2.获取sa的secret,查看secret的详细信息,其中就有token;
kubeconfig: 把sa的token 封装为kubeconfig文件
1.创建sa,根据其管理目标,使用rolebinding 或者clusterrolebinding绑定到合同的role 或者clusterrole
2.kubectl get secret |awk '/^ServiceAccount/{print $1}'
KUBE_TOKEN=$(kubectl get secret SERVICEACCOUNT_SERRET_NAME -o jsonpath={.data.token})|bash64 -d)
3.生成kubeconfig文件
kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE
kubect config set-credentials NAME --token= $DEFAULT_TOKEN --kubeconfig=/PATH/TO/SOMEFILE
kubect config set -context
kubect config use -context

参考文章:

https://github.com/kubernetes/dashboard/wiki/Creating-sample-user

https://blog.csdn.net/java_zyq/article/details/82178152 

 生产环境中的配置

server {
server_name k8s.doudou.net;
rewrite ^(.*)$ https://k8s.doudou.net$1 permanent;
}
server {
listen 443 ssl;
server_name k8s.doudou.net;
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
proxy_ssl_trusted_certificate /etc/ssl/kubernetes/ca.pem;
proxy_ssl_certificate /etc/ssl/kubernetes/admin.pem;
proxy_ssl_certificate_key /etc/ssl/kubernetes/admin-key.pem;
proxy_ssl_session_reuse on;
proxy_pass https://192.168.8.99/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/;

}

 

}
kubectl cluster info

~
~

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM