
Brauche Hilfe bei Cloud Run mit Secret Manager, wir müssen 2 Geheimnisse als Volume mounten (nur Datei), es folgt das YAML von Cloud Run.
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
Das MTLS-Geheimnis (P12-Datei) wird ordnungsgemäß als Datei gemountet, aber das Firebase-Geheimnis (JSON-Datei) wird stattdessen als Verzeichnis gemountet.
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)
Basierend auf der Docker-Konvention wird eine Datei als Verzeichnis bereitgestellt, wenn sie auf dem Host nicht gefunden wird. In diesem Fall haben wir jedoch keine Kontrolle über den Hostpfad oder die Dateiverfügbarkeit. Könnte es sich also um einen Fehler handeln?
Beim Testen unserer Bereitstellung im Docker-Container mit Volume-Mounts funktioniert alles einwandfrei, sodass wir sicher sind, dass der Fehler nicht bei unserer Anwendung liegt.
Ich bin für jeden Hinweis zu diesem Problem dankbar.
Danke
Antwort1
Folgendes war falsch:
Containervolumenspezifikationen werden wie folgt interpretiert: -
- „mountPath“ unter spec->image->volumeMounts gibt den „übergeordneten“ Verzeichnispfad an.
- „Pfad“ unter spec->volumes->secret->items wird daran angehängt.
Daher sah der tatsächliche Pfad in unserem Fall wie folgt aus: - /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json/myapp_firebase_token
Durch Überprüfen der Volume-Einbindung unter „Revisionen“ können Sie den tatsächlichen Einbindungspfad verifizieren, wie in der Produktdokumentation https://cloud.google.com/run/docs/configuring/secrets#viewing beschrieben.
HTH