You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

配置Kubernetes基础认证后集群启动失败,操作方式是否正确?

问题分析与解决方案

首先,直接修改/etc/kubernetes/manifests/kube-apiserver.yaml来添加API Server参数的思路是可行的(因为这是kubelet管理的静态Pod配置,修改后kubelet会自动重启API Server),但你的操作存在几个关键错误,导致集群冻结:

1. 错误的API Server参数

你添加的--authentication-mode=basic无效参数,Kubernetes API Server并没有这个选项。正确的做法是通过--basic-auth-file启用基础认证即可,API Server默认会同时启用多种认证方式(token、client证书、basic auth等),不需要单独指定"认证模式"。

另外,你设置了--authorization-mode=ABAC,但ABAC模式需要配套的授权策略文件(通过--authorization-policy-file指定),如果没有提供这个文件,API Server会拒绝所有请求,这也是集群冻结的重要原因。

2. 缺失的配置步骤

即使参数正确,你还遗漏了两个关键步骤:

  • 没有将basic-auth.csv文件挂载到API Server容器中:静态Pod的容器只能访问挂载的宿主机路径,你需要在kube-apiserver.yamlvolumesvolumeMounts部分添加对/etc/kubernetes/basic-auth.csv的挂载配置,否则API Server启动时找不到这个文件会直接失败。
  • 没有备份原配置文件:修改静态Pod配置前一定要备份,这样出现问题时可以快速恢复。

为运行中集群添加API Server基础认证的正确步骤

如果要为现有集群启用基础认证,按以下步骤操作:

  1. 备份原配置文件

    cp /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml.bak
    
  2. 创建basic-auth.csv文件
    文件格式为password,username,uid,[group1],[group2]...,例如创建一个拥有管理员权限的用户:

    echo "admin123,admin,10001,system:masters" > /etc/kubernetes/basic-auth.csv
    
  3. 修改kube-apiserver.yaml

    • 添加--basic-auth-file=/etc/kubernetes/basic-auth.csvcommand列表中
    • 如果要使用ABAC授权,必须添加--authorization-policy-file=/etc/kubernetes/abac-policy.json,并创建对应的策略文件(例如允许admin用户访问所有资源);如果不需要ABAC,建议保持默认的--authorization-mode=Node,RBAC(RBAC更易管理)
    • 添加volume和volumeMount配置,确保容器能访问basic-auth.csv
      volumes:
        - name: basic-auth
          hostPath:
            path: /etc/kubernetes/basic-auth.csv
            type: File
      volumeMounts:
        - name: basic-auth
          mountPath: /etc/kubernetes/basic-auth.csv
          readOnly: true
      
  4. 验证API Server启动状态
    修改后等待1-2分钟,查看API Server日志确认启动成功:

    kubectl logs -n kube-system kube-apiserver-$(hostname)
    

    如果启动失败,立即恢复备份的配置文件,重启kubelet:systemctl restart kubelet


为Kubernetes Dashboard配置基础认证的正确方式

Dashboard的基础认证配置不需要修改API Server,直接在Dashboard组件中配置即可,推荐步骤如下:

  1. 创建认证凭证文件
    使用htpasswd生成加密的用户凭证(如果没有安装,先执行apt install apache2-utilsyum install httpd-tools):

    htpasswd -c -b dashboard-auth admin admin123
    
  2. 创建Kubernetes Secret存储凭证

    kubectl create secret generic dashboard-basic-auth --from-file=dashboard-auth -n kubernetes-dashboard
    
  3. 修改Dashboard Deployment
    编辑Deployment配置:

    kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard
    

    做以下修改:

    • spec.template.spec.containers[0].args中添加:
      --authentication-mode=basic
      --basic-auth-file=/etc/dashboard/auth
      
    • 添加volume和volumeMount配置:
      volumes:
        - name: basic-auth
          secret:
            secretName: dashboard-basic-auth
      volumeMounts:
        - name: basic-auth
          mountPath: /etc/dashboard/auth
          readOnly: true
      
  4. 配置RBAC权限
    为你的基础认证用户绑定集群管理员权限(根据需求调整权限范围):

    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --user=admin
    
  5. 访问Dashboard
    重新访问Dashboard页面,选择"Basic Authentication",输入你设置的用户名和密码即可登录。


内容的提问来源于stack exchange,提问作者achahbar

火山引擎 最新活动