OpenStack(Stein)多Region下zun服务无法正常使用Region获取网络的情况

阅读: 评论:0

OpenStack(Stein)多Region下zun服务无法正常使用Region获取网络的情况

OpenStack(Stein)多Region下zun服务无法正常使用Region获取网络的情况

在多Region下,每个Region下有多个用户,每个用户在访问服务的时候需要指定自己的Region以便获取对应的服务。
而zun服务如果默认情况下会无法创建容器,报错无法找到网络,可能的一个原因就是因为Region不对,无法获取到所属Region的网络信息。
比如我的RegionThree先配置好了,随后又配置了RegionTwo,现在集群中默认Region是RegionTwo了,如果有一个RegionThree用户创建容器,制定了RegionThree的网络,但是会找不到,因为参数并没有传进去,只能获取到RegionTwo的网络信息,而他的网络我们是无法使用的。
因此需要解决一下,显然网上搜不出解决方案,只能通过查看源码自行解决。
首先按照如下顺序追踪一下

  • zun/api/comtroller/v1/containers.py:_do_post()
  • zun/common/utils.py:build_requested_networks()
  • /zun/network/neutron.py get_neutron_network() -> self.client
  • /zun/common/clients.utron()

好了,定位到这里以后,可以看到方法中有这么两行

endpoint_type=self._get_client_option('neutron','endpoint_type')
self._neutron=neutronclient.Client(session=session,endpoint_type=endpoint_type)

查看这个类前面的方法,可以看出这里是在配置文件/etc/f中的neutron_client中找到所需的属性字段,但是这里并没有获取到配置文件中的region_name
第一步就是现在配置文件/etc/f中的neutron_client中添加属性region_name=RegionThree
随后修改这个源码文件/zun/common/clients.utron(),获取参数,并且在类中传入参数。

endpoint_type=self._get_client_option('neutron','endpoint_type')
region_name=self._get_client_option('neutron','region_name')
self._neutron=neutronclient.Client(session=session,endpoint_type=endpoint_type,region_name=region_name)

随后如果重新启动,会报错

2021-05-28 23:51:37.515 20477 ption   File "/usr/lib/python2.7/site-packages/oslo_config/cfg.py", line 3124, in __getattr__
2021-05-28 23:51:37.515 20477 ption     return self._conf._get(name, self._group)
2021-05-28 23:51:37.515 20477 ption   File "/usr/lib/python2.7/site-packages/oslo_config/cfg.py", line 2621, in _get
2021-05-28 23:51:37.515 20477 ption     value, loc = self._do_get(name, group, namespace)
2021-05-28 23:51:37.515 20477 ption   File "/usr/lib/python2.7/site-packages/oslo_config/cfg.py", line 2639, in _do_get
2021-05-28 23:51:37.515 20477 ption     info = self._get_opt_info(name, group)
2021-05-28 23:51:37.515 20477 ption   File "/usr/lib/python2.7/site-packages/oslo_config/cfg.py", line 2839, in _get_opt_info
2021-05-28 23:51:37.515 20477 ption     raise NoSuchOptError(opt_name, group)
2021-05-28 23:51:37.515 20477 ption NoSuchOptError: no such option region_name in group [neutron_client]
2021-05-28 23:51:37.515 20477 ption 
2021-05-28 23:51:37.539 20477 INFO eventlet.wsgi.server [req-7d6b45f5-20de-49fc-af3b-9d8fc964964b 60aeb3ae5007433c901a27c50b63233c c17948b3fc114b1389bf01d41c08d652 default - -] 192.168.112.10 "POST /v1/containers?run=true HTTP/1.1" status: 500  len: 640 time: 1.1549919

这个问题其实是,虽然我们获取到了参数,但是它实际上还是找不到这个参数,具体原因在如下文件中。
/zun/conf/neutron_client.py,在参数传递的时候,根本没有传递region_name这个参数,也就是说不管在配置文件中我们怎么修改,哪怕获取到了参数,但是在传递的时候根本就没有传进去,自然就找不到了。

neutron_client_opts = [cfg.StrOpt('endpoint_type',default='publicURL',help='Type of endpoint in Identity service catalog to use ''for communication with the OpenStack service.')]

修改如下,将region_name添加进来

neutron_client_opts = [cfg.StrOpt('region_name',help='Region in Identity service catalog to use for ''communication with the OpenStack service.'),cfg.StrOpt('endpoint_type',default='publicURL',help='Type of endpoint in Identity service catalog to use ''for communication with the OpenStack service.')]

随后重启zun的各个服务即可。
如果是分布式,控制节点和计算节点的源码都改了比较好。

本文发布于:2024-02-03 04:42:55,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170690657348722.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:正常使用   情况   网络   Stein   OpenStack
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23