k8s Dashboard的部署与配置 k8s 1.23.3
官方网站上默认是使用的是 部署 + kubectl proxy 的方式, 可我的测试是在vm内进行的,无法直接访问(此问题用掉6小时, 学习的时间成本), 使用ingress即可:
补充更简单方法: ( https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ )
通过以下方法即可在本机使用localhost 访问虚机了里的dashboard了
(可选)将API服务器代理到本地主机
如果要从集群外部连接到 API 服务器,则可以使用 kubectl proxy:
scp root@<control-plane-host>:/etc/kubernetes/admin.conf . kubectl --kubeconfig ./admin.conf proxy
你现在可以在本地访问API服务器 : http://localhost:8001/api/v1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
将 /etc/kubernetes/admin.conf 下载到本机, 执行 kubectl --kubeconfig ./admin.conf proxy
dashboard 访问:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/workloads?namespace=default
vim create-admin.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- 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: kubernetes-dashboard
执行: kubectl apply -f create-admin.yaml
kubectl -n kubernetes-dashboard describe \ secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
以下算是正式环境的部署方法吧:
1. 创建dashboard的全名空间, 创建自己的sceret证书信息(没有的话可以阿里云申请一个免费的使用), 注意此处的证书key为 kubernetes-dashboard-certs
#创建命名空间 kubectl create namespace kubernetes-dashboard # 正式证书的指定方式 tls : 否则证书不生效 kubectl create secret tls kubernetes-dashboard-certs --key www.updateweb.cn.key \ --cert www.updateweb.cn.crt -n kubernetes-dashboard
2. 下载dashboard:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
如无法下载:
在 /etc/hosts 中添加:
199.232.96.133 raw.githubusercontent.com
修改recommended.yaml,
$ vim recommended.yaml
# 把创建 kubernetes-dashboard-certs Secret 注释掉,前面已通过命令创建。 #apiVersion: v1 #kind: Secret #metadata: # labels: # k8s-app: kubernetes-dashboard # name: kubernetes-dashboard-certs # namespace: kubernetes-dashboard #type: Opaque # 添加ssl证书路径,关闭自动更新证书,添加多长时间登出, 此处的cert也即pem文件 # 注意:--tls-key-file --tls-cert-file 引用名称,要与上面创建 kubernetes-dashboard-certs Secret 引用的证书文件名称一样。 args: #- --auto-generate-certificates - --namespace=kubernetes-dashboard - --tls-key-file=www.updateweb.cn.key - --tls-cert-file=www.updateweb.cn.crt - --token-ttl=3600
部署 dashboard
kubectl apply -f recommended.yaml
查看 dashboard
kubectl get pods -n kubernetes-dashboard
创建管理员信息, 如不创建管理员信息, 将导致dashboard登录进去后, 无相关权限查看:
vim create-admin.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- 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: kubernetes-dashboard
执行: kubectl apply -f create-admin.yaml
配置 dashboard的 ingress访问: 注意这里tls的secretName:值为 kubernetes-dashboard-certs , 即上面创建的 sceret 的 key
vim k8s-dashboard-ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: k8s-dashboard-ingress namespace: kubernetes-dashboard annotations: kubernetes.io/ingress.class: "nginx" # 开启use-regex,启用path的正则匹配 nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: / # 默认为 true,启用 TLS 时,http请求会 308 重定向到https nginx.ingress.kubernetes.io/ssl-redirect: "true" # 默认为 http,开启后端服务使用 proxy_pass https://协议 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" spec: rules: - host: www.updateweb.cn http: paths: - path: / pathType: Prefix backend: service: name: kubernetes-dashboard port: number: 8443 tls: - hosts: - www.updateweb.cn # secretName 为创建的证书名称 secretName: kubernetes-dashboard-certs
执行: kubectl apply -f k8s-dashboard-ingress.yaml
查看状态:
kubectl get ingress -n kubernetes-dashboard -A
一切就绪, 主机配置一下
在/etc/hosts中添加: 测试:
192.168.1.106 www.updateweb.cn
查看页面: https://www.updateweb.cn
获取token:
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
复制对应的token登录即可:
其它相关命令:
查看所有证书:
kubectl get secret -A
解码secret, 要查看创建的 Secret 的内容,运行以下命令:
kubectl get secret db-user-pass -o jsonpath='{.data}'
删除 secret 指定的 key
# 删除默认命名空间(default)的 secret kubectl delete secret secretkeyxx # 删除指定命名空间(kubernetes-dashboard)的 secret kubectl delete secret kubernetes-dashboard-certsxx -n kubernetes-dashboard
其它常用命令:
http://docs.kubernetes.org.cn/556.html