La referencia secreta de Cloud Run se monta como directorio en lugar de archivo

La referencia secreta de Cloud Run se monta como directorio en lugar de archivo

Necesita ayuda con Cloud Run con Secret Manager, necesitamos montar 2 secretos como volumen (solo archivo), a continuación se muestra el yaml de 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

El secreto mtls (archivo p12) se monta correctamente como un archivo, pero el secreto de Firebase (archivo json) se monta como un directorio.

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)

Según la convención de Docker, si un archivo no se encuentra en el host, entonces se monta como directorio, pero en este caso no tenemos control sobre la ruta del host o la disponibilidad del archivo, entonces, ¿podría ser un error?

Al probar nuestra implementación en un contenedor acoplable con montajes de volumen, todo funciona bien, por lo que estamos seguros de que nuestra aplicación no tiene la culpa.

Agradecemos cualquier orientación sobre este tema.

Gracias

Respuesta1

Esto es lo que estaba mal.

Las especificaciones de volumen del contenedor se interpretan así: -

  • 'mountPath' en especificación->imagen->volumeMounts especifica la ruta del directorio 'principal'.
  • Se adjunta 'ruta' en especificaciones->volúmenes->secreto->elementos.

Por lo tanto, en nuestro caso, la ruta real quedó así: - /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json/myapp_firebase_token

Verificar el montaje del volumen en Revisiones es la forma de verificar la ruta de montaje real como se describe en la documentación del producto https://cloud.google.com/run/docs/configuring/secrets#viewing

HT

información relacionada