我正在尝试托管一个使用谷歌Kubernetes引擎的应用程序。我的docker映像在本地运行时可以工作,但当我将其放到Google Cloud上并使用kubernetes集群进行设置时,它以一种非常奇怪的方式失败了。
我能够连接到应用程序,并且它可以工作,直到我触发google.cloud.storage.client()
的调用。然后它试图读取我通过Google_Application_Credentials
环境变量提供的文件,结果出现了问题。我得到了这个(被截断和编辑的)回溯:
self.gcs_client = storage.Client()
File "/usr/local/lib/python3.6/site-packages/google/cloud/storage/client.py", line 71, in __init__
_http=_http)
File "/usr/local/lib/python3.6/site-packages/google/cloud/client.py", line 215, in __init__
_ClientProjectMixin.__init__(self, project=project)
File "/usr/local/lib/python3.6/site-packages/google/cloud/client.py", line 169, in __init__
project = self._determine_default(project)
File "/usr/local/lib/python3.6/site-packages/google/cloud/client.py", line 182, in _determine_default
return _determine_default_project(project)
File "/usr/local/lib/python3.6/site-packages/google/cloud/_helpers.py", line 179, in _determine_default_project
_, project = google.auth.default()
File "/usr/local/lib/python3.6/site-packages/google/auth/_default.py", line 294, in default
credentials, project_id = checker()
File "/usr/local/lib/python3.6/site-packages/google/auth/_default.py", line 165, in _get_explicit_environ_credentials
os.environ[environment_vars.CREDENTIALS])
File "/usr/local/lib/python3.6/site-packages/google/auth/_default.py", line 89, in _load_credentials_from_file
'File {} was not found.'.format(filename))
google.auth.exceptions.DefaultCredentialsError: File {--redacted--} was not found.
有没有人能猜到这里出了什么问题?
更新:看起来我已经让它工作了。我猜测发生错误的原因是,我使用valuefrom
设置google_application_credentials
,就像在bokeh.yaml
文件中一样。这似乎将Google_Application_Credentials
设置为等于bokeh.yaml
的内容。这种格式似乎适用于教程代码中使用的pandas.io.gbq.read_gbq
,但不适用于实例化google.cloud.storage.client()
。将google_application_credential
指向一个卷挂载的文件,就像DazWilkin建议的和Eric Guan所展示的那样。
我注意到你没有提到使用库伯内特的秘密。我是这么做的。
kubectl
创建机密。$ kubectl create secret generic gac-keys --from-file=<PATH_TO_SERVICE_ACCOUNT_FILE>
这将创建一个名为gac-keys
的秘密。它包含在
中找到的json文件。如果要重命名json文件,可以执行以下操作:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
volumes:
- name: google-cloud-keys
secret:
secretName: gac-keys
containers:
- name: my-app
image: us.gcr.io/my-app
volumeMounts:
- name: google-cloud-keys
mountPath: /var/secrets/google
readOnly: true
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /var/secrets/google/new-file-name.json
文档:https://kubernetes.io/docs/concepts/configuration/secret/
我创建了一个具有并发gcloud应用程序的Dialogflow代理。但是,当我尝试将它集成到Node.js后端时,它似乎访问了错误的应用程序默认凭据。 我可以确认它正在验证身份验证是否成功,因为当我运行以下代码时,它的控制台记录了正确的项目ID(diagnosistest-56e81): null 当我执行此操作时,会得到不同的错误消息:
我的android应用程序没有正确构建和部署。当启动一个新实例时,它会将我的应用程序启动到我的物理移动设备上,并且我能够在Visual Studio中进行调试。但现在它不会将应用程序启动到移动设备,而且当我手动运行应用程序时,它也不会在Visual Studio中调试。这个项目有可移植的类,并且正在使用Xamarin.Forms。 我确实更改了对AndroidManifest.xml的构建操作。
它说要使用以下命令: 在Google Shell中,我尝试了以下操作: 我知道命令指向的是正确的文件位置。如何成功验证应用程序默认凭据?
我无法读取项目中作为bean从另一个项目注入的类中的application.properties值。我的项目正在使用另一个项目,该项目的类需要从application.properties中读取配置。Mine是一个maven项目和一个Spring Boot应用程序,在src/main/resources文件夹中有application.properties,这些属性值在其中定义。我错过了什么,它无
我有一个cucumber测试: 这是一个测试,它不是在测试文件夹中定义的,而是一个seprate文件夹(作为源集,其他人创建了这个结构)。 源集(测试所在)的gradle配置如下: 看看gradle文件,有三件事, 有一个源集定义为 编译CLassPath, runTimeClassPath, srcDir已被定义为相同的 甚至resources.srcDir也在设置中(我有应用ymls) 我已经