При попытке подключиться к экземпляру CloudSQL с использованием механизма cloud_sql_proxy
появляется странный пропущенный параметр проекта Err 400
У меня есть проект GCE с работающей базой данных CloudSQL postgres, мои приложения в compute api могут использовать его, и я могу выполнять обычный psql с любой виртуальной машины, которую я настроил в своем проекте GCE.
Однако, когда я пытаюсь подключиться к базе данных с моего ноутбука, используя cloud_sql_proxy, я получаю эту странную ошибку.
Я слежу за письмом этой документации: https://cloud.google.com/sql/docs/postgres/connect-admin-proxy#install
Итак, следуя той документации, которая у меня есть:
- CloudSQL включен и работает, как я прокомментировал
- Прокси установлен
- У меня есть служебная учетная запись, созданная, как сказано в документации, с ролью Cloud SQL Admin следующим образом:
{
"type": "service_account",
"project_id": "my-proyect-21432",
"private_key_id": "<hidden intentionally>",
"private_key": "<hidden intentionally>",
"client_email": "cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com",
"client_id": "<hidden intentionally>",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/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/cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com"
}
- Я успешно запустил cloud_sql_proxy следующим образом:
user@hostname:~$ ./cloud_sql_proxy -instances=db1=tcp:15432 -credential_file=my-proyect-21432.json
2019/05/29 10:17:25 Rlimits for file descriptors set to {&{8500 65536}}
2019/05/29 10:17:25 using credential file for authentication; email=cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com
2019/05/29 10:17:25 Listening on 127.0.0.1:15432 for db1
2019/05/29 10:17:25 Ready for new connections
- И, наконец, я запускаю клиент psql следующим образом:
psql "host=127.0.0.1 port=15432 sslmode=disable dbname=db1 user=dbuser"
Я вижу в cloud_sql_proxy следующую ошибку:
2019/05/29 10:17:33 New connection for "db1"
2019/05/29 10:17:34 couldn't connect to "db1": googleapi: Error 400: Missing parameter: project., required
А на стороне клиента я получаю:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
На этом этапе я должен успешно подключить клиента psql , и я не могу найти что-либо об этой ошибке в Интернете или в документации Google
Понятия не имею, где мне нужно установить параметр project , я пробовал сумасшедшие места, такие как на стороне psql с -v или с помощью URL с ? в конце, без удачи, я также попытался на стороне cloud_sql_proxy, используя флаг -projects , также безуспешно.
РЕДАКТИРОВАТЬ: Новые выводы !!!
Я думаю, что я близок к тому, чтобы решить эту проблему, первая настройка, которую я сделал (как указано выше), была на моем компьютере с Windows, который я использую дома, сегодня я нахожусь в офисе, и я решил повторить все это, используя macos, я не думаю, что ОС вообще имеет значение, интересно то, что я скопировал все и основал небольшую вещь, которая заставляет меня двигаться вперед
Итак, я снова начал и выполняю пункты 1., 2., 3., 4. и жду? документация гласит, что строка instance выглядит следующим образом: myproject: us-central1: myinstance НЕ то, что я изначально написал, поэтому я изменил это и начал иметь более разумную ошибку:
Я запустил cloud_sql_proxy установить соединение с psql и получил это:
user@hostname:~$ ./cloud_sql_proxy -instances=my-proyect-21432:us-east1:db1=tcp:15432 -credential_file=my-proyect-21432.json
2019/05/30 14:13:25 Rlimits for file descriptors set to {&{8500 65536}}
2019/05/30 14:13:25 using credential file for authentication; email=cloudsql-serviceaccount@my-proyect-21432.iam.gserviceaccount.com
2019/05/30 14:13:25 Listening on 127.0.0.1:15432 for db1
2019/05/30 14:13:25 Ready for new connections
<< when I run psql>>
2019/05/30 14:14:08 New connection for "my-proyect-21432:us-east1:db1"
2019/05/30 14:15:24 couldn't connect to "my-proyect-21432:us-east1:db1": dial tcp 10.26.112.3:3307: connect: operation timed out
Мой экземпляр db1 имеет только частный IP-адрес 10.26.112.3
Я начал искать эту ошибку в интернете и нашел предложение, разрешающее входящий трафик на порт 3307:
Невозможно подключиться через облачный SQL-прокси из облачной оболочки через прокси
https://github.com/GoogleCloudPlatform/cloudsql-proxy/issues/164
Поэтому я добавил следующее правило:
allow-cloudsqlproxy | Ingress | Apply to all | IP Ranges 0.0.0.0/0 | tcp,udp 3307 | allow | default | 1000
Но это не имело никакого значения, потому что после этого я все еще получаю то же сообщение об ошибке: (
РЕДАКТИРОВАТЬ: с виртуальной машины в том же проекте
Я создал виртуальную машину для этого проекта и реплицировал все это, я смог подключиться, ни одно соединение не было отклонено в сообщении порта 3307.
Понятия не имею, кто блокирует этот трафик ...