需要一些有关带有 Secret Manager 的 Cloud Run 的帮助,我们需要将 2 个机密作为卷(仅文件)安装,以下是来自 Cloud Run 的 yaml。
volumeMounts:
- name: secret-2f1d5ec9-d681-4b0f-8a77-204c5f853330
readOnly: true
mountPath: /root/key/mtls/client_auth.p12
- name: secret-29c1417a-d9fe-4c37-8cb0-562c97f3c827
readOnly: true
mountPath: /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json
volumes:
- name: secret-2f1d5ec9-d681-4b0f-8a77-204c5f853330
secret:
secretName: myapp_mtls_key
items:
- key: latest
path: myapp_mtls_key
- name: secret-29c1417a-d9fe-4c37-8cb0-562c97f3c827
secret:
secretName: myapp_firebase_token
items:
- key: latest
path: myapp_firebase_token
mtls 机密(p12 文件)正在作为文件正确安装,但 firebase 机密(json 文件)却作为目录安装。
java.io.FileNotFoundException: /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json (Is a directory)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:111)
at com.myapp.gcp.GCPInit.init(GCPInit.java:39)
根据 docker 约定,如果在主机上找不到文件,则将其挂载为目录,但在这种情况下,我们无法控制主机路径或文件可用性,所以这可能是一个错误?
当我们在带有卷挂载的docker容器中测试我们的部署时,一切运行正常,所以我们确信我们的应用程序没有故障。
感谢有关此问题的任何指导。
谢谢
答案1
问题出在这里。
容器容量规格解释如下:-
- spec->image->volumeMounts 下的“mountPath”指定“父”目录路径。
- spec->volumes->secret->items 下的“path”被附加到其中。
因此,在我们的例子中,实际路径变成这样:- /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json/myapp_firebase_token
检查修订下的卷挂载是验证真实挂载路径的方法,如产品文档 https://cloud.google.com/run/docs/configuring/secrets#viewing 中所述
高血压