Cloud Run Secret Reference 安裝為目錄而非文件

Cloud Run Secret Reference 安裝為目錄而非文件

需要使用 Secret Manager 來使用 Cloud Run 的一些幫助,我們需要將 2 個金鑰掛載為磁碟區(僅檔案),以下是 Cloud Run 中的 yaml。

        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

mtls 秘密(p12 文件)已正確安裝為文件,但 firebase 秘密(json 文件)已安裝為目錄。

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)

根據 docker 約定,如果在主機上找不到文件,則將其安裝為目錄,但在這種情況下,我們無法控制主機路徑或文件可用性,所以這可能是錯誤嗎?

當使用卷安裝在 docker 容器中測試我們的部署時,一切正常,因此我們確信我們的應用程式沒有錯誤。

感謝有關此問題的任何指導。

謝謝

答案1

這就是問題所在。

容器體積規格的解釋如下:-

  • spec->image->volumeMounts 下的「mountPath」指定「父」目錄路徑。
  • 規範->卷->秘密->項目下的“路徑”被附加到它。

因此,在我們的例子中,實際路徑變成這樣:- /root/key/firebase/myapp-d2a0f-firebase-adminsdk-irfes-a699971a4d.json/myapp_firebase_token

檢查修訂版下的磁碟區安裝是驗證真實安裝路徑的方法,如產品文件 https://cloud.google.com/run/docs/configuring/secrets#viewing 中所述

華泰

相關內容