Openstack Keystone 认证流程(三)-WSGI

本文详细介绍了OpenStack Keystone的Web服务创建过程,包括通过Paste Deployment配置WSGI服务,解析keystone-paste.ini文件,以及Keystone环境中的Server实现。文中提到了WSGI中间件、协程在提升性能上的作用,为后续的认证流程奠定了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Web服务创建

在上一章中, 可以看在keystone-all中, 使用create_server创建了两个服务器, 先看看这个函数

from keystone.common import environment
from paste import deploy
...
def create_server(conf, name, host, port):
    app = deploy.loadapp('config:%s' % conf, name=name)
    server = environment.Server(app, host=host, port=port)
    if CONF.ssl.enable:
        server.set_ssl(CONF.ssl.certfile, CONF.ssl.keyfile,
                       CONF.ssl.ca_certs, CONF.ssl.cert_required)
    return server

首先调用deploy.loadapp('config:%s' % conf, name=name)来装载一个APP。conf是一个配置文件的文件名称, name是配置文件conf中对应的APP的名字。从之前的传入参数看, 两个服务对应的APP名称分别是admin和public. admin用来作为后台的管理API, 而public作为普通用户的认证服务。

返回到创建服务前的代码, 在keystone/config.py中, 在函数find_paste_config中,conf为CONF.paste_deploy.config_file, 然后在整个keystone的configuration文件(keystone.conf)中,可以找到对应获取这个conf文件名:keystone-paste.ini

同样的方法, 我们可以找出对应的admin_port = 35357, public_port = 5000 , 并且 bind_host = 0.0.0.0

在服务器确认下代码执行的结果

$ netstat -tlpn
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:35357           0.
<think>好的,我现在需要解决用户提到的OpenStack Keystone服务连接失败的问题,具体错误包括身份验证URL不可用和HTTP连接池重试超时。首先,我得理清用户提供的引用信息,找出可能的故障点。 用户引用了四个错误信息,主要涉及Keystone服务的连接问题。例如,引用[1]提到无法连接到http://10.2.5.156:35357/v3/auth/tokens,最大重试次数超限,连接被拒绝,错误码111。这说明目标主机的35357端口可能未开放或服务未运行。引用[2]和[3]显示发现身份版本失败,尝试解析URL中的版本,但curl测试时连接被拒绝,说明服务可能未启动或端口监听有问题。引用[4]则建议检查wsgi-keystone.conf配置文件,这可能与Apache配置相关,因为Keystone通常通过Apache的WSGI来部署。 接下来,我需要按照常规排错步骤来解决问题。首先检查Keystone服务状态,确认服务是否正在运行。如果服务未启动,自然无法连接。然后查看端口监听情况,35357和5000端口是否被正确监听。如果端口未监听,可能是服务配置错误或未绑定正确地址。 然后需要检查防火墙设置,确保相关端口没有被防火墙阻止。同时,检查Keystone的配置文件,如/etc/keystone/keystone.conf,确认admin_endpoint和public_endpoint的URL是否正确,是否有拼写错误或指向错误的主机名/IP。另外,Apache的配置文件wsgi-keystone.conf是否正确配置了虚拟主机和监听端口,确保Apache正确代理Keystone服务。 如果配置正确,但服务仍无法访问,可能需要检查DNS解析或/etc/hosts文件,确保controller、ct等主机名能正确解析到对应的IP地址。例如,用户引用中的错误地址是http://ct:5000,而curl测试时无法解析ct,可能需要配置hosts文件,将ct指向正确的IP。 另外,用户提到的错误涉及v3版本的身份验证,需要确认Keystone是否启用了v3 API,并且在配置文件中正确设置。同时,查看日志文件,如/var/log/keystone/keystone.log或Apache的error_log,寻找更详细的错误信息,帮助定位问题。 可能的解决方案包括重启Keystone和Apache服务,重新加载配置,或者修复配置文件中的错误。如果之前修改过配置文件,可能需要重新部署或同步配置。此外,网络连通性测试,如使用telnet或nc检查端口可达性,也是必要的步骤。 总结起来,解决步骤大致分为:检查服务状态和端口监听,检查防火墙,验证配置文件的正确性,检查DNS/hosts解析,查看日志,最后进行必要的服务重启或配置调整。需要逐步排查,从服务是否运行开始,逐步深入到配置细节和网络设置。</think>### OpenStack Keystone服务连接失败解决方案 #### 1. 检查Keystone服务状态 首先需确认Keystone服务是否正常运行: ```bash systemctl status openstack-keystone httpd # 检查服务状态 ``` 若服务未启动,需执行: ```bash systemctl start openstack-keystone httpd # 启动服务 systemctl enable openstack-keystone httpd # 设置开机自启 ``` #### 2. 验证端口监听状态 Keystone默认使用端口`35357`(admin)和`5000`(public)。执行以下命令检查端口是否监听: ```bash netstat -tulnp | grep -E '35357|5000' # 查看端口占用情况 ``` 若未监听,可能原因包括: - Keystone配置文件`/etc/keystone/keystone.conf`中`admin_endpoint`或`public_endpoint`配置错误 - Apache的WSGI配置未正确加载(检查`/etc/httpd/conf.d/wsgi-keystone.conf`)[^4] #### 3. 防火墙配置检查 确保防火墙允许相关端口通信: ```bash firewall-cmd --list-ports | grep -E '35357/tcp|5000/tcp' # 查看开放端口 ``` 若未开放,添加规则: ```bash firewall-cmd --add-port={35357/tcp,5000/tcp} --permanent firewall-cmd --reload ``` #### 4. 验证身份认证URL可达性 使用`curl`测试身份认证端点: ```bash curl -v http://controller:35357/v3 # 测试admin端点 curl -v http://ct:5000/v3 # 测试public端点 ``` 若返回`Connection refused`(错误码111)[^3],需排查: - 网络连通性(`ping ct`检查DNS解析) - `/etc/hosts`中是否包含正确的主机映射(如`10.2.5.156 ct controller`) #### 5. 配置文件关键参数验证 检查`/etc/keystone/keystone.conf`: ```ini [token] provider = fernet # 确保使用有效token生成方式 [DEFAULT] admin_endpoint = http://10.2.5.156:35357/v3 # 需与实际IP一致 public_endpoint = http://ct:5000/v3 ``` #### 6. 日志分析 查看关键日志定位具体错误: ```bash tail -f /var/log/keystone/keystone.log # Keystone服务日志 journalctl -u httpd -f # Apache服务日志 grep 'ERROR' /var/log/httpd/ssl_error_log # WSGI错误日志 ``` #### 7. 服务重建与同步 若配置修改后未生效,可尝试: ```bash keystone-manage db_sync # 同步数据库 apachectl graceful # 平滑重启Apache systemctl restart openstack-keystone # 重启Keystone ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值