[英]Compose for Elasticsearch Authentication in Python
我在使Python Elasticsearch庫與Bluemix的Compose for Elasticsearch產品一起使用時遇到問題。 當我對使用IBM容器創建的Elasticsearch集群使用以下代碼時,它連接得很好。
(venv) ❯ python
>>> import requests
>>> import elasticsearch
>>> from elasticsearch import Elasticsearch, RequestsHttpConnection
>>> es = Elasticsearch(
... host='clustertestv5.mybluemix.net',
... port=80,
... http_auth=('es_admin', 'REDACTED'),
... timeout=60)
>>> es.info()
{u'cluster_name': u'elasticsearch', u'tagline': u'You Know, for Search', u'version': {u'lucene_version': u'5.5.0', u'build_hash': u'218bdf10790eef486ff2c41a3df5cfa32dadcfde', u'number': u'2.3.3', u'build_timestamp': u'2016-05-17T15:40:04Z', u'build_snapshot': False}, u'name': u'Forgotten One'}
當我嘗試使用相同的代碼但針對Bluemix提供的Elasticsearch集群進行身份驗證時,它失敗並顯示ConnectionError
響應。
(venv) ❯ python
>>> import requests
>>> import elasticsearch
>>> from elasticsearch import Elasticsearch, RequestsHttpConnection
>>> es1 = Elasticsearch(
... host='bluemix-sandbox-dal-9-portal.3.dblayer.com',
... port=15206,
... http_auth=('admin', 'REDACTED'),
... timeout=60)
>>> es1.info()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/ryan/Desktop/deltaNiner/venv/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 69, in _wrapped
return func(*args, params=params, **kwargs)
File "/Users/ryan/Desktop/deltaNiner/venv/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 220, in info
return self.transport.perform_request('GET', '/', params=params)
File "/Users/ryan/Desktop/deltaNiner/venv/lib/python2.7/site-packages/elasticsearch/transport.py", line 327, in perform_request
status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
File "/Users/ryan/Desktop/deltaNiner/venv/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 105, in perform_request
raise ConnectionError('N/A', str(e), e)
elasticsearch.exceptions.ConnectionError: ConnectionError(('Connection aborted.', BadStatusLine("''",))) caused by: ProtocolError(('Connection aborted.', BadStatusLine("''",)))
>>> quit()
對Compose群集進行的直接卷曲顯示用戶名和密碼正確,因此我知道這不會導致連接問題。
(venv) ❯ curl -k 'https://bluemix-sandbox-dal-9-portal.3.dblayer.com:15206/'
<html><body><h1>401 Unauthorized</h1>
You need a valid user and password to access this content.
</body></html>
(venv) ❯ curl -k -u admin:REDACTED 'https://bluemix-sandbox-dal-9-portal.3.dblayer.com:15206/'
{
"name" : "elastic_search56_bluemix_sandbox_dal_9_data_2_dblayer_com",
"cluster_name" : "bmix_dal_yp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"version" : {
"number" : "2.4.0",
"build_hash" : "ce9f0c7394dee074091dd1bc4e9469251181fc55",
"build_timestamp" : "2016-08-29T09:14:17Z",
"build_snapshot" : false,
"lucene_version" : "5.5.2"
},
"tagline" : "You Know, for Search"
}
僅供參考這里是Elasticsearch Python庫- https://elasticsearch-py.readthedocs.io/en/master/
在創建ES連接的python代碼中,您缺少選項。
添加: use_ssl=True
屆時它將抱怨缺少證書驗證,但將繼續進行。 要完善該功能,您應該使用VCAP連接信息中提供的證書以及verify_ssl=True
選項。 該選項默認為False
。 注意:默認行為等同於您對curl使用-k
選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.