• Kubernetes Dashboard 用户名密码方式登录


    image-20231105004739102

    Author:rab


    前言

    为了 K8s 集群安全,默认情况下 Dashboard 以 Token 的形式登录的,那如果我们想以用户名/密码的方式登录该怎么操作呢?其实只需要我们创建用户并进行 ClusterRoleBinding 绑定即可,接下来是具体的操作流程。

    1、创建用户名/密码

    cat << EOF | sudo tee /etc/kubernetes/pki/basic_auth_file
    admin,zhurs@123,1
    EOF
    
    # 说明
    # 用户名:admin
    # 密码:zhurs@123
    # 用户ID:1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20231105000056240

    2、修改 kube-apiserver 配置文件

    # 先提前做个备份
    cp /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml.back
    
    # 修改配置文件
    vim /etc/kubernetes/manifests/kube-apiserver.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ...
    ...
    spec:
      containers:
      - command:
        - kube-apiserver
        - --advertise-address=192.168.56.160
        - --allow-privileged=true
        - --authorization-mode=Node,RBAC
        - --client-ca-file=/etc/kubernetes/pki/ca.crt
        - --enable-admission-plugins=NodeRestriction
        - --enable-bootstrap-token-auth=true
        - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
        - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
        - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
        - --etcd-servers=https://127.0.0.1:2379
        - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
        - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
        - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
        - --requestheader-allowed-names=front-proxy-client
        - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
        - --requestheader-extra-headers-prefix=X-Remote-Extra-
        - --requestheader-group-headers=X-Remote-Group
        - --requestheader-username-headers=X-Remote-User
        - --secure-port=6443
        - --service-account-issuer=https://kubernetes.default.svc.cluster.local
        - --service-account-key-file=/etc/kubernetes/pki/sa.pub
        - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
        - --service-cluster-ip-range=10.96.0.0/12
        - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
        - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
        - --basic-auth-file=/etc/kubernetes/pki/basic_auth_file     # 新增
    ...
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    :wq 保存退出后 kube-apiserver 会自动重启(大约 10s 左右,无需 kubectl apply ...)。

    3、查看 kube-apiserver 是否重启

    kubectl get pod -n kube-system
    
    • 1

    image-20231105000821007

    4、集群角色绑定

    kubectl create clusterrolebinding DashBoardLogin --clusterrole=cluster-admin --user=admin
    
    # DashBoardLogin:自定义集群角色绑定name
    # 将admin用户绑定到集群角色cluster-admin
    # cluster-admin是一个内置的ClusterRole(集群角色),它具有最高级别的权限
    # cluster-admin允许持有该角色的用户或服务账户对整个Kubernetes集群进行广泛的控制
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image-20231105001038902

    具体来说,cluster-admin ClusterRole 具有以下特征和权限:

    • 全局权限cluster-admin 具有对整个集群的权限,而不仅仅限于某个命名空间。这意味着拥有 cluster-admin 角色的用户可以管理整个集群的资源,包括节点、命名空间、服务、Pod 等。

    • 权限广泛cluster-admin 具有广泛的权限,包括创建、删除和修改各种资源,以及查看集群中的所有资源的权限。这包括对 ConfigMaps、Secrets、Deployments、Services 等的完全控制权。

    • 角色的高度特权:由于 cluster-admin 角色的特权级别非常高,因此授予它的用户或服务账户将具有执行集群中任何操作的能力,包括破坏性操作。因此,应小心授予 cluster-admin 权限,确保只授予受信任的用户或服务账户。

    通常情况下,cluster-admin 角色应该被保留用于紧急情况、集群管理和维护操作。该权限不应该随意授予普通用户,以防止误操作或滥用权限。对于普通应用程序和开发人员,通常会创建更严格的 RBAC 角色,以限制其对资源的访问权限,从而提高集群的安全性。

    5、查看集群角色绑定情况

    kubectl get clusterrolebinding DashBoardLogin
    
    • 1

    image-20231105001522513

    6、修改 kubernetes-dashboard 认证方式

    # 先提前做个备份
    cp /opt/yaml/dashboard-2.7.0/aio/deploy/recommended.yaml /opt/yaml/dashboard-2.7.0/aio/deploy/recommended.yaml.back
    
    # 修改配置文件
    vim /opt/yaml/dashboard-2.7.0/aio/deploy/recommended.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ...
    args:
      - --auto-generate-certificates
      - --namespace=kubernetes-dashboard
      - --token-ttl=21600
      - --authentication-mode=basic
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20231105002937342

    7、启动 Dashboard

    kubectl apply -f recommended.yaml
    
    # 注意你的recommended.yaml文件路径(我的就在当前目录下)
    
    • 1
    • 2
    • 3

    image-20231105003247532

    8、Dashboard 访问验证

    使用用户名/密码的方式看是否可访问。

    admin/zhurs@123

    image-20231105003658594

    image-20231105003934400

    但是,我们一般不建议这样操作,大家在测试环境玩玩就行!

    —END

  • 相关阅读:
    简述 happens - before 八大规则
    MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)
    对几次通宵加班发版的复盘和思考
    【Mysql性能优化系列】Mysql优化方案你知道哪些
    Swift之深入解析子数组提取的性能优化
    力扣(LeetCode)180. 连续出现的数字(2022.06.29)
    【Vue3】使用v-model实现父子组件通信(常用在组件封装规范中)
    【算法leetcode】2331. 计算布尔二叉树的值(多语言实现)
    寻找特殊年号
    MATLAB cell数组 (tuple)
  • 原文地址:https://blog.csdn.net/IT_ZRS/article/details/134225801