Я создал свой первый экземпляр Compute с оптимизированная для контейнеров ОС и в следующих областях:
Cloud SQL Enabled
Compute Engine Read Write
Service Control Enabled
Service Management Read Only
Stackdriver Logging API Write Only
Stackdriver Monitoring API Write Only
Stackdriver Trace Write Only
Storage Read Only
Мне нужно установить Cloud SQL Proxy, и я следую этой документации: https://cloud.google.com/sql/docs/postgres/connect-compute-engine#gce-connect-proxy
Я могу использовать SSH без проблем, но не могу выполнить команду:
leszek@backend-app ~ $ wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
2018-04-10 19:52:00 (211 MB/s) - 'cloud_sql_proxy' saved [7505002/7505002]
leszek@backend-app ~ $ chmod +x cloud_sql_proxy
leszek@backend-app ~ $ ./cloud_sql_proxy -instances=my-instance=tcp:0.0.0.0:54
32
-bash: ./cloud_sql_proxy: Permission denied
lgr@backend-app ~ $ sudo ./cloud_sql_proxy -instances=my-instance=tcp:0.0.0.0:5432
sudo: unable to execute ./cloud_sql_proxy: Permission denied
Что мне не хватает очевидного, что я даже не могу запустить команду sql_proxy?
ОС, оптимизированная для контейнеров, монтирует большую часть файловой системы с флагом noexec. Это можно увидеть, запустив следующее:
mount | grep noexec
Параметр noexec не позволяет напрямую выполнять какие-либо двоичные файлы в смонтированной файловой системе. Это связано с реализацией блокировки безопасности по умолчанию на COS.
Однако в файловой системе ОС, оптимизированной для контейнеров, есть некоторые места с возможностью записи (например, / var / lib / docker и / var / lib / cloud). Эти места монтируются как «исполняемые файлы» (т.е. они монтируются без флага монтирования noexec).
Следуя руководству, приведенному в сообщении, вам лучше использовать экземпляры Debian или Red Hat. Однако, если вы хотите выполнить двоичный файл (cloud_sql_proxy) в экземпляре ОС, оптимизированной для контейнеров Google, вы можете попробовать скопировать файл в место, доступное для записи (например, / var / lib / docker):
sudo cp cloud_sql_proxy /var/lib/docker
Попробуйте запустить файл там:
sudo ./cloud_sql_proxy
Это должно позволить вам пройти permissions denied
ошибка.
На этом этапе, если предположить, что к экземпляру применена правильная область действия, вы получите следующий результат:
2018/04/23 08:48:21 must specify -projects, -fuse, or -instances
Если для экземпляра не установлена правильная область действия, вы получите сообщение с предложением service account is not configured with sufficient permissions
.
Если это так, вы можете передать эту ошибку, остановив и отредактировав экземпляр, и установив Cloud SQL
область действия включена.
Лучшим вариантом для развертывания прокси CloudSQL в ОС контейнера было бы использование официального контейнера CloudSQL и связывание сетей.
docker run -d -v /cloudsql:/cloudsql \
-v <PATH_TO_KEY_FILE>:/config \
-p 127.0.0.1:5432:5432 \
gcr.io/cloudsql-docker/gce-proxy:1.11 /cloud_sql_proxy \
-instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:5432 -credential_file=/config
Видеть: https://cloud.google.com/sql/docs/postgres/connect-docker