k8s Dashboard的部署与配置 k8s 1.23.3

分类:K8S |

官方网站上默认是使用的是 部署 + 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

image.png

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}')



image.png



以下算是正式环境的部署方法吧: 


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

image.png


创建管理员信息, 如不创建管理员信息, 将导致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


image.png


一切就绪, 主机配置一下 

在/etc/hosts中添加: 测试:

192.168.1.106 www.updateweb.cn

查看页面: https://www.updateweb.cn

1643803150578892.png


获取token:

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

1643803151593208.png

复制对应的token登录即可:

1643803152835212.png








其它相关命令:

查看所有证书:

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




K8S
阅读( 4116 ) |