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