另外需要注意的是,新版本的OpenStack是直接使用haproxy代理转发的,在一些老版本中则使用neutron-ns-metadata-proxy进程负责转发,实现的代码位于neutron/agent/metadata/namespace_proxy.py:
- def _proxy_request(self, remote_address, method, path_info,
- query_string, body):
- headers = {
- 'X-Forwarded-For': remote_address,
- }
-
- if self.router_id:
- headers['X-Neutron-Router-ID'] = self.router_id
- else:
- headers['X-Neutron-Network-ID'] = self.network_id
-
- url = urlparse.urlunsplit((
- 'http',
- '169.254.169.254',
- path_info,
- query_string,
- ''))
-
- h = httplib2.Http()
- resp, content = h.request(
- url,
- method=method,
- headers=headers,
- body=body,
- connection_type=agent_utils.UnixDomainHTTPConnection)
大家可能对请求URL为169.254.169.254有疑问,怎么转发给自己呢? 这是因为这是一个UNIX Domain Socket请求,其实这个URL只是个参数占位,填什么都无所谓,这个请求相当于:
- curl -H "X-Neutron-Network-ID: ${network_uuid}"
- -H "X-Forwarded-For: ${request_ip}"
- -X GET
- --unix /var/lib/neutron/metadata_proxy
- http://169.254.169.254
3.4 Metadata请求第三次转发
前面说到,haproxy会把Metadata请求转发到本地的一个socket文件中,那么,到底是哪个进程在监听/opt/stack/data/neutron/metadata_proxysocket文件呢?我们通过lsof查看下:
- # lsof /opt/stack/data/neutron/metadata_proxy
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- neutron-m 11085 stack 3u unix 0xffff8801c8711c00 0t0 65723197 /opt/stack/data/neutron/metadata_proxy
- neutron-m 11108 stack 3u unix 0xffff8801c8711c00 0t0 65723197 /opt/stack/data/neutron/metadata_proxy
- neutron-m 11109 stack 3u unix 0xffff8801c8711c00 0t0 65723197 /opt/stack/data/neutron/metadata_proxy
- # cat /proc/11085/cmdline | tr ' ' ' '
- /usr/bin/python /usr/bin/neutron-metadata-agent --config-file /etc/neutron/neutron.conf
可见neutron-metadata-agent监听了这个socket文件,相当于haproxy把Metadata服务通过socket文件转发给了neutron-metadata-agent服务。
- def run(self):
- server = agent_utils.UnixDomainWSGIServer('neutron-metadata-agent')
- server.start(MetadataProxyHandler(self.conf),
- self.conf.metadata_proxy_socket,
- workers=self.conf.metadata_workers,
- backlog=self.conf.metadata_backlog,
- mode=self._get_socket_mode())
- self._init_state_reporting()
- server.wait()
进一步验证了neutron-metadata-agent监听了/opt/stack/data/neutron/metadata_proxysocket文件。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|