Как создать учетные данные CloudSQL Proxy в качестве секретов на GKE - PullRequest
0 голосов
/ 23 ноября 2018

Я выполнил шаги на https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine, чтобы настроить учетные записи пользователей MySQL и учетные записи служб.Я скачал файл JSON, содержащий мои учетные данные.

Моя проблема заключается в том, что в коде, скопированном с сайта:

- name: cloudsql-proxy
  image: gcr.io/cloudsql-docker/gce-proxy:1.11
  command: ["/cloud_sql_proxy",
            "-instances=<INSTANCE_CONNECTION_NAME>=tcp:3306",
            "-credential_file=/secrets/cloudsql/credentials.json"]
  securityContext:
    runAsUser: 2  # non-root user
    allowPrivilegeEscalation: false
  volumeMounts:
    - name: cloudsql-instance-credentials
      mountPath: /secrets/cloudsql
      readOnly: true

путь /secrets/cloudsql/credentials.json:указан, и я понятия не имею, откуда он.

Я думаю, что я должен создать учетные данные в виде секрета через

kubectl create secret generic cloudsql-instance-credentials --from-file=k8s\secrets\my-credentials.json

Но после этого японятия не имею, что делать.Как этот секрет становится путем /secrets/cloudsql/credentials.json?

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

На самом деле мы можем смонтировать конфигурационные карты или секреты в виде файлов во время выполнения контейнера модуля.И затем во время выполнения мы можем использовать их в любом случае, в котором мы нуждаемся.Но для этого нам нужно правильно их настроить.

  • create secret / configmap
  • добавить том для секрета в .spec.volumes в модуле (если вы развернетеpod используя развертывание, затем добавьте том в .spec.template.spec.volumes)
  • , смонтируйте созданный том в .spec.container[].volumemount

Ref: Официальный документ kubernetes *

Существует пример для вашего случая использования:

  - name: cloudsql-proxy
    image: gcr.io/cloudsql-docker/gce-proxy:1.11
    command: ["/cloud_sql_proxy",
              "-instances=<INSTANCE_CONNECTION_NAME>=tcp:3306",
              "-credential_file=/secrets/cloudsql/credentials.json"]
    securityContext:
      runAsUser: 2  # non-root user
      allowPrivilegeEscalation: false
    volumeMounts:
      - name: cloudsql-instance-credentials
        mountPath: /secrets/cloudsql
        readOnly: true
volumes:
- name: cloudsql-instance-credentials
  secret:
    defaultMode: 511
    secretName: cloudsql-instance-credentials
0 голосов
/ 14 мая 2019

Текущие ответы хорошие, но я хотел бы привести более полный пример.Это произошло дословно от некоторых старых документов Google от двухлетней давности (которых больше нет).Замените @@ PROECT @@ и @@ DBINST @@ своими собственными значениями.

volumes загружает секрет, затем volumeMounts делает его видимым для контейнера postgres-proxy в /secrets/cloudsql

    spec:
      volumes:
      - name: cloudsql-oauth-credentials
        secret:
          secretName: cloudsql-oauth-credentials
      - name: cloudsql
        emptyDir:
      containers:
      - name: postgres-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.09
        imagePullPolicy: Always
        command: ["/cloud_sql_proxy",
                  "--dir=/cloudsql",
                  "-instances=@@PROJECT@@:us-central1:@@DBINST@@=tcp:5432",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-oauth-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: cloudsql
            mountPath: /cloudsql
0 голосов
/ 23 ноября 2018

Вы должны добавить запись тома под спецификацией, например, так:

  volumes:
    - name: cloudsql-instance-credentials
      secret:
        defaultMode: 420
        secretName: cloudsql-instance-credentials

Примечание: Это относится к спецификации развертывания, а не к спецификации контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...