配置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.yaml的volumes和volumeMounts部分添加对/etc/kubernetes/basic-auth.csv的挂载配置,否则API Server启动时找不到这个文件会直接失败。 - 没有备份原配置文件:修改静态Pod配置前一定要备份,这样出现问题时可以快速恢复。
为运行中集群添加API Server基础认证的正确步骤
如果要为现有集群启用基础认证,按以下步骤操作:
备份原配置文件
cp /etc/kubernetes/manifests/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml.bak创建basic-auth.csv文件
文件格式为password,username,uid,[group1],[group2]...,例如创建一个拥有管理员权限的用户:echo "admin123,admin,10001,system:masters" > /etc/kubernetes/basic-auth.csv修改kube-apiserver.yaml
- 添加
--basic-auth-file=/etc/kubernetes/basic-auth.csv到command列表中 - 如果要使用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
- 添加
验证API Server启动状态
修改后等待1-2分钟,查看API Server日志确认启动成功:kubectl logs -n kube-system kube-apiserver-$(hostname)如果启动失败,立即恢复备份的配置文件,重启kubelet:
systemctl restart kubelet
为Kubernetes Dashboard配置基础认证的正确方式
Dashboard的基础认证配置不需要修改API Server,直接在Dashboard组件中配置即可,推荐步骤如下:
创建认证凭证文件
使用htpasswd生成加密的用户凭证(如果没有安装,先执行apt install apache2-utils或yum install httpd-tools):htpasswd -c -b dashboard-auth admin admin123创建Kubernetes Secret存储凭证
kubectl create secret generic dashboard-basic-auth --from-file=dashboard-auth -n kubernetes-dashboard修改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
- 在
配置RBAC权限
为你的基础认证用户绑定集群管理员权限(根据需求调整权限范围):kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --user=admin访问Dashboard
重新访问Dashboard页面,选择"Basic Authentication",输入你设置的用户名和密码即可登录。
内容的提问来源于stack exchange,提问作者achahbar




