【已解决】Failed to discover available identity versions when contacting http://controller:5000/v3.

当尝试创建OpenStack域时遇到连接错误,可以通过检查35357端口状态,编辑wsgi-keystone.conf配置文件,重启httpd服务来解决。确保配置文件中包含监听35357端口的设置,并正确设置VirtualHost段。

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

输入openstack domain create --description “An Example Domain” example命令后出现错误:

Failed to discover available identity versions when contacting
http://controller:5000/v3. Attempting to parse version from URL.
Unable to establish connection to
http://controller:5000/v3/auth/tokens:
HTTPConnectionPool(host=‘controller’, port=5000): Max retries exceeded
with url: /v3/auth/tokens (Caused by
NewConnectionError(’<requests.packages.urllib3.connection.HTTPConnection
object at 0x7f61db3410d0>: Failed to establish a new connection:
[Errno 111] \xe6\x8b\x92\xe7\xbb\x9d\xe8\xbf\x9e\xe6\x8e\xa5’,))

在这里插入图片描述

解决方法:

一、输入如下指令,确保35357端口开启

netstat -anpt | grep 35357

若没反应进行下面操作!

二、设置/etc/httpd/conf.d/wsgi-keystone.conf文件

使用下面指令进入vi编辑器进行编辑:

vim /etc/httpd/conf.d/wsgi-keystone.conf

复制下面内容进入文件,保存退出:

Listen 5000

Listen 35357

<VirtualHost *:5000>

WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}

WSGIProcessGroup keystone-public

WSGIScriptAlias / /usr/bin/keystone-wsgi-public

WSGIApplicationGroup %{GLOBAL}

WSGIPassAuthorization On

LimitRequestBody 114688

<IfVersion >= 2.4>

ErrorLogFormat "%{cu}t %M"

</IfVersion>

ErrorLog /var/log/httpd/keystone.log

CustomLog /var/log/httpd/keystone_access.log combined

<Directory /usr/bin>

<IfVersion >= 2.4>

Require all granted

</IfVersion>

<IfVersion < 2.4>

Order allow,deny

Allow from all

</IfVersion>

</Directory>

</VirtualHost>

<VirtualHost *:35357>

WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}

WSGIProcessGroup keystone-admin

WSGIScriptAlias / /usr/bin/keystone-wsgi-admin

WSGIApplicationGroup %{GLOBAL}

WSGIPassAuthorization On

ErrorLogFormat "%{cu}t %M"

ErrorLog /var/log/httpd/keystone-error.log

CustomLog /var/log/httpd/keystone-access.log combined

<Directory /usr/bin>

Require all granted

</Directory>

</VirtualHost>

Alias /identity /usr/bin/keystone-wsgi-public

<Location /identity>

SetHandler wsgi-script

Options +ExecCGI

WSGIProcessGroup keystone-public

WSGIApplicationGroup %{GLOBAL}

WSGIPassAuthorization On

</Location>

注:vi编辑器保存退出方法
在修改完上述内容后,按Esc键,输入 :wq ,然后回车即可保存退出。

三、重启httpd服务

输入下面指令,重启httpd服务:

systemctl restart httpd

四、完结撒花(运行成功)

在这里插入图片描述

### 解决 OpenStack Keystone 连接失败问题 在 CentOS 7 中部署 OpenStack 的过程中,如果遇到 `Keystone` 服务无法访问 `http://controller:5000/v3/auth/tokens` 端点的问题,并提示错误信息 `(pymysql.err.OperationalError) (2003, “Can’t connect to MySQL server on ‘controller’ ([Errno 111] Connection refused))` 或者类似的网络连接超时错误,则可能是由于以下几个原因引起的。 #### 可能的原因分析 1. **MySQL 数据库未启动或配置不正确** 如果数据库服务器未正常运行或者监听地址设置不当,可能会导致 Keystone 无法成功连接到数据库。这通常表现为 `[Errno 111] Connection refused` 错误[^1]。 2. **防火墙阻止了必要的端口通信** 默认情况下,CentOS 7 启用了 `firewalld` 防火墙服务。如果没有开放相应的端口(如 MySQL 的默认端口 3306 和 Keystone 使用的 5000),则可能导致外部请求被拒绝。 3. **Keystone 配置文件中的 URL 设置有误** 在 `/etc/keystone/keystone.conf` 文件中,可能需要确认 `connection` 参数指向的是正确的 MySQL 地址和端口号。例如: ```ini connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone ``` 4. **网络连通性问题** 控制节点之间的网络连通性不佳也可能引发此问题。可以通过执行以下命令测试控制器主机上的 MySQL 是否可访问: ```bash telnet controller 3306 ping controller ``` 若上述命令返回异常,则说明存在网络层面的问题。 5. **Bootstrap 初始化过程存在问题** 对于 Queens 版本及其之后的版本,在初始化身份认证服务时需调用 `keystone-manage bootstrap` 命令完成基础数据填充工作。若该操作未能顺利完成,后续尝试获取 token 将始终失败[^3]。 #### 推荐解决方案 以下是针对以上提到的各种可能性所提供的修复措施: ##### 步骤一:验证并重启 MariaDB/MySQL 服务状态 确保数据库引擎已开启并且能够接受远程连接请求。可以按照如下方法排查: - 查看服务当前状况: ```bash systemctl status mariadb.service ``` - 如发现处于停止状态,请立即启用它: ```bash systemctl start mariadb.service systemctl enable mariadb.service ``` - 修改绑定 IP 地址允许来自其他机器的数据交换,默认仅限本地回环接口(`localhost`)可用。编辑 `/etc/my.cnf.d/mariadb-server.cnf` 添加下面一行内容至 `[mysqld]` 节下: ```ini bind-address=0.0.0.0 ``` - 刷新权限表重新加载更改后的设定项: ```sql FLUSH PRIVILEGES; ``` ##### 步骤二:调整 SELinux 安全策略以及禁用 firewalld SELinuxLinux 下的一种强制访问控制机制,有时会对某些特定应用施加额外约束条件从而干扰其正常使用体验;与此同时还需要留意是否有活跃状态下的防火墙阻挡流量传输路径的情况发生。 关闭临时模式直到永久生效为止: ```bash setenforce 0 sed -i &#39;s/^SELINUX=enforcing$/SELINUX=permissive/&#39; /etc/selinux/config ``` 停用现有 firewall 并安装 iptables 替代方案以便更灵活地管理规则集: ```bash systemctl stop firewalld && systemctl disable firewalld yum install -y iptables-services systemctl start iptables && systemctl enable iptables iptables-save | grep -v ":REJECT" > /etc/sysconfig/iptables service iptables restart ``` ##### 步骤三:校正 keystone.conf 关键参数定义 打开位于 `/etc/keystone/keystone.conf` 的主配置文档定位至 database 组件部分仔细核验每一处细节是否匹配实际环境需求。比如这里给出的一个典型例子供参考对照之用: ```ini [database] ... connection=mysql+pymysql://keystone:<password>@<hostname>/keystone?charset=utf8mb4&binary_prefix=true ... ``` 最后别忘了同步更新 admin_token 字段值来保障调试阶段的安全交互流程顺利开展下去: ```ini [token] provider=fernet expiration=3600 secure=True cache_on_issue=False driver=pki format=UUID hash_algorithm=sha256 auth_methods=[&#39;external&#39;, &#39;token&#39;, &#39;password&#39;] default_role_id=<role id> bind_mapping_enabled=False revocation_cache_size=10000 max_payload_bytes=10240 audit_map_file=/etc/keystone/audit/map.yaml ``` ##### 步骤四:重试 keystone-manage bootstrap 执行动作 一旦前面几步都妥善处理完毕以后就可以再次发起创建初始记录集合的动作了。记得替换掉占位符 `<ADMIN_PASS>` 成真实密码字符串形式表达出来即可满足基本功能实现目标要求。 ```bash keystone-manage bootstrap \ --bootstrap-password <ADMIN_PASS> \ --bootstrap-admin-url http://<CONTROLLER_HOSTNAME>:5000/v3/ \ --bootstrap-internal-url http://<CONTROLLER_HOSTNAME>:5000/v3/ \ --bootstrap-public-url http://<CONTROLLER_HOSTNAME>:5000/v3/ \ --bootstrap-region-id RegionOne ``` --- ###
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21岁被迫秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值