Последующие действия. После долгой путаницы я обнаружил, что подключился не к тому контейнеру в моем модуле, поэтому я не смог найти секреты учетных данных cloudql. Мне удалось найти учетные данные в моем модуле с помощью крепления тома, например:
kubectl exec engine-cron-prod-deployment-788ddb4b8-bxmz9 -c postgres-proxy -it -- /bin/sh
/ # ls /secrets/cloudsql/
credentials.json
/ # cat /secrets/cloudsql/credentials.json
{
"type": "service_account",
[..stuff deleted..]
Этот результат соответствует файлу, который я сохранил, поэтому мой keyfile.json (он же cloudsql-oauth-credentials.json) был правильным.
Чтобы быть ясным, шаблон sidecar в моем развертывании yaml выглядит примерно так:
spec:
volumes:
- name: ssl-certs
hostPath:
path: /etc/ssl/certs
- 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: ssl-certs
mountPath: /etc/ssl/certs
- name: cloudsql
mountPath: /cloudsql
Выводы:
- Тем не менее, всегда можно удалить учетную запись службы и создать новую, чтобы получить учетные данные, затем добавить эту учетную запись в нужные роли (для cloudql) и начать заново, хотя это несколько болезненно и требует много времени.
- Можно повторно использовать эти учетные данные с другими кластерами GKE для подключения к той же базе данных cloudql или создать новые учетные записи служб с теми же ролями, но с отдельным набором учетных данных.
Изменить: для полноты можно также получить и сохранить свой секрет для безопасного хранения в качестве резервной копии. Используя get -o json
, вы восстановите credentials.json
как текст в кодировке base64.
$kubectl get -o json secret cloudsql-oauth-credentials
{
"apiVersion": "v1",
"data": {
"credentials.json": "ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAiYW...."
},
"kind": "Secret",
"metadata": {
"creationTimestamp": "2019-01-03T01:32:49Z",
"name": "cloudsql-oauth-credentials",
"namespace": "default",
"resourceVersion": "12078",
"selfLink": "/api/v1/namespaces/default/secrets/cloudsql-oauth-credentials",
"uid": "7af2bdde-0ef7-11e9-92bd-123123123123"
},
"type": "Opaque"
}
Этот текст base64 можно легко декодировать и сохранить:
$ base64 -d < credentials.json.b64 | tee credentials.json
{
"type": "service_account",
"project_id": "xxx-xxx-xxx",
"private_key_id": "abc123abc123abc123abc123abc123abc123",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9...==\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "321321321321321321",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxx-xxx-account-sql-cli%40xxx-xxx-xxx.iam.gserviceaccount.com"
}
person
Charles Thayer
schedule
03.01.2019