
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