Kubernetes无法将卷装载到文件夹

时间:2018-12-17 12:24:03

标签: kubernetes google-cloud-platform google-cloud-sql

我正在关注these docs,以了解如何为我的cloud-sql数据库设置Sidecar代理。它指的是manifest on github-正如我在github repos等地方到处都可以找到的-似乎适用于“每个人”,但我遇到了麻烦。代理容器无法安装到/ secrets / cloudsql,似乎无法成功启动。当我运行kubectl logs [mypod] cloudsql-proxy时:

invalid json file "/secrets/cloudsql/mysecret.json": open /secrets/cloudsql/mysecret.json: no such file or directory

所以秘密似乎是问题所在。

清单的相关部分

- name: cloudsql-proxy
  image: gcr.io/cloudsql-docker/gce-proxy:1.11
  command: ["/cloud_sql_proxy",
            "-instances=pqbq-224713:europe-west4:osm=tcp:5432",
            "-credential_file=/secrets/cloudsql/mysecret.json"]
  securityContext:
    runAsUser: 2
    allowPrivilegeEscalation: false
  volumeMounts:
    - name: cloudsql-instance-credentials
      mountPath: /secrets/cloudsql
      readOnly: true
volumes:
  - name: cloudsql-instance-credential
      secret:
        secretName: mysecret

要测试/调试秘密,我将卷安装到另一个确实启动的容器中,但是路径和文件/secrets/cloudsql/mysecret.json也不存在。但是,当我将秘密安装到一个已经存在的文件夹中时,我可以在此文件夹中找到mysecret.json文件(不是我所期望的...),而是(在我的情况下)它包含的两个秘密,因此我发现:{{1} }和/existingfolder/password(显然,这就是它的工作原理!?当我找到这些秘密时,它们会给出正确的字符串,因此看起来不错)。

因此,系统似乎无法建立路径,这是权限问题吗?我尝试将代理容器简单地安装到根目录('/'),所以没有文件夹,但这给出了一个错误消息,表明不允许这样做。由于图像/existingfolder/username来自Google,我无法运行它,因此看不到它具有的文件夹。

我的问题:

  1. 是从清单创建的mountPath还是应该已经 在容器里?
  2. 如何使它正常工作?

1 个答案:

答案 0 :(得分:2)

我解决了。我在cloudsql-proxy上使用的密码与应用程序(env)上使用的密码相同,但是它必须是您从服务帐户生成的密钥,然后再从中进行秘密处理。然后就可以了。 This tutorial帮助了我。