Cloud Run Secret Reference wird als Verzeichnis statt als Datei bereitgestellt

Cloud Run Secret Reference wird als Verzeichnis statt als Datei bereitgestellt

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

verwandte Informationen