Używam kontenera w Google Container Engine. Wewnątrz tego kontenera mam trochę kodu Pythona, który próbuje odczytać obiekt typu blob z zasobnika hostowanego o Google Cloud Storage.Blob download_as_string Błąd SSL w Google Container Engine
Kod jest tak proste, jak:
from google.cloud import storage
gs = storage.Client(project="my-shiny-project")
gc_bucket = gs.get_bucket("my-bucket")
blob = gc_bucket.get_blob("my-blob")
print blob.download_as_string()
Powyższy kod działa dobrze na moim komputerze lokalnym. Jednak gdy uruchomię to w kontenerze Docker na GKE, część do góry do utworzenia obiektu blob działa dobrze. Jednak wywołanie download_as_string kończy się niepowodzeniem z:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 453, in download_as_string
self.download_to_file(string_buffer, client=client)
File "/usr/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 412, in download_to_file
self._do_download(transport, file_obj, download_url, headers)
File "/usr/lib/python2.7/site-packages/google/cloud/storage/blob.py", line 363, in _do_download
response = download.consume(transport)
File "/usr/lib/python2.7/site-packages/google/resumable_media/download.py", line 136, in consume
transport, u'GET', self.media_url, headers=headers)
File "/usr/lib/python2.7/site-packages/google/resumable_media/_helpers.py", line 134, in http_request
return transport.request(method, url, data=data, headers=headers)
File "/usr/lib/python2.7/site-packages/google/auth/transport/requests.py", line 179, in request
method, url, data=data, headers=request_headers, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)
Jakieś pomysły, dlaczego to się stało?
FWIW, Próbowałem innych operacji na obiekcie blob, takich jak pobranie identyfikatora, typ zawartości, rozmiar itp. Operacje te działały dobrze. Nawet metoda exist() tego obiektu działała poprawnie (co prawdopodobnie miało rzeczywiste żądanie HEAD obiektu).
Używam obrazu pojemnika "alpejski 3.5". Python jest wersja "Python 2.7.13 (domyślnie, 22 grudnia 2016, 09:22:15)"
[EDIT]
Zmieniłem obraz do 'debian: Jessie' a kod pracował dobrze. Pakiety openssl na tych obrazach mają różne wersje. Wygląda na to, że ma jakiś efekt. Nadal dobrze byłoby wiedzieć dokładnie, na czym polega problem.
Ten sam błąd tutaj, staramy się przesyłać obrazy Opencv oparte na Ubuntu, które z Ubuntu zabierają ponad 7 GB rozmiaru do Alpine Linux, który ma zaledwie jeden GB, problem, który mamy, to problemy z SSL, już próbowaliśmy zainstalować 'ca- certificate' i 'java-cacerts' i uruchomić' update-ca-certificates', bez powodzenia, czy mógłbyś wreszcie przezwyciężyć błąd w Alpine3.5? – danigosa