Referência secreta do Cloud Run sendo montada como diretório em vez de arquivo

Referência secreta do Cloud Run sendo montada como diretório em vez de arquivo

Precisa de ajuda com Cloud Run com Secret Manager, precisamos montar 2 segredos como volume (somente arquivo), a seguir está o yaml do 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

O segredo mtls (arquivo p12) está sendo montado corretamente como um arquivo, mas o segredo do firebase (arquivo json) está sendo montado como um diretório.

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)

Com base na convenção do docker, se um arquivo não for encontrado no host, ele será montado como diretório, mas, neste caso, não temos controle sobre o caminho do host ou a disponibilidade do arquivo, então poderia ser um bug?

Ao testar nossa implantação no contêiner docker com montagens de volume, tudo funciona bem, então temos certeza de que nosso aplicativo não é o culpado.

Agradeço qualquer orientação sobre este assunto.

Obrigado

Responder1

Aqui está o que estava errado.

as especificações de volume do contêiner são interpretadas assim: -

  • 'mountPath' em spec->image->volumeMounts especifica o caminho do diretório 'pai'.
  • 'path' em spec->volumes->secret->items é anexado a ele.

Assim, em nosso caso, o caminho real ficou assim: - /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json/myapp_firebase_token

Verificar a montagem do volume em Revisões é a maneira de verificar o caminho de montagem real, conforme descrito na documentação do produto https://cloud.google.com/run/docs/configurando/secrets#viewing

HTH

informação relacionada