OpenShift Origin 3.11如何切换身份提供者为HTPasswdPasswordIdentityProvider?
嘿,我刚好处理过OpenShift 3.11切换到HTPasswdPasswordIdentityProvider的问题,这个版本的组件拆分确实坑了不少人,我来给你理清楚正确的操作方式:
OpenShift 3.11把原来单一的master组件拆分成了三个独立服务:openshift-apiserver、kube-apiserver和openshift-controller-manager,其中OAuth身份验证的配置只由openshift-apiserver负责。你之前修改openshift-controller-manager的配置没用,就是因为这个组件不处理OAuth登录逻辑;而修改kube-apiserver的配置会直接破坏集群API服务,导致启动失败。
按照以下步骤操作就能搞定:
准备合法的HTPasswd文件
先确保你的users.htpasswd文件格式正确,用htpasswd命令生成(如果没有安装,先装httpd-tools包):htpasswd -c /etc/origin/openshift-apiserver/users.htpasswd your-username把文件放在
/etc/origin/openshift-apiserver/目录下,权限设置为644,属主root:root,确保openshift-apiserver容器能访问到。修改openshift-apiserver的配置文件
找到/etc/origin/openshift-apiserver/master-config.yaml,定位到oauthConfig段,替换identityProviders为你的配置:oauthConfig: alwaysShowProviderSelection: false assetPublicURL: https://X.Y.Z.W:8443/console/ grantConfig: method: auto serviceAccountMethod: prompt identityProviders: - challenge: true login: true mappingMethod: claim name: my_htpasswd_provider provider: apiVersion: v1 kind: HTPasswdPasswordIdentityProvider file: /etc/origin/openshift-apiserver/users.htpasswd注意这里的
file路径要和你实际存放的位置一致,必须是openshift-apiserver容器内部能访问的路径。不要修改kube-apiserver的配置
绝对不要碰/etc/origin/kube-apiserver/master-config.yaml,这个组件负责的是Kubernetes核心API,和OAuth身份验证无关,改它必然导致集群启动失败。重启openshift-apiserver服务
用systemd重启对应的服务:sudo systemctl restart openshift-apiserver.service如果是用atomic安装的,服务名可能是
atomic-openshift-master-api,可以用systemctl list-units | grep openshift-api确认。验证配置是否生效
尝试用HTPasswd里的用户登录:oc login -u your-username -p your-password如果能成功登录,说明配置已经生效,不会再使用
AllowAllPasswordIdentityProvider了。
如果还是有问题,按以下方式排查:
- 查看
openshift-apiserver的日志,检查是否有配置加载错误:
重点看有没有找不到HTPasswd文件、权限不足的报错。journalctl -u openshift-apiserver.service -f - 确认
mappingMethod设置合理,claim模式会直接用HTPasswd里的用户名作为OpenShift用户,适合大多数场景。 - 确保集群其他组件状态正常,用
oc get nodes和oc get pods -n openshift-apiserver检查组件运行状态。
内容的提问来源于stack exchange,提问作者haytham adel

