Что я пытаюсь настроить:
- Экземпляр Cloud SQL с частным IP, база данных Postgresql
- Виртуальная машина с одним общедоступным IP-адресом и одним частным IP-адресом в той же сети VPC, что и экземпляр SQL (виртуальная машина, экземпляр SQL и VPC находятся в одном регионе)
- Виртуальная машина имеет учетную запись службы с достаточными разрешениями клиента / средства просмотра Cloud SQL.
- Прокси-сервер SQL на виртуальной машине, подключающейся к экземпляру SQL. Я запускаю его с аргументом
-ip_address_types=PRIVATE
, который нашел в некоторой документации.
Код конфигурации
Слегка упрощенный код Terraform для воспроизведения состояния, которое меня смущает, находится здесь: https://github.com/hallvors/gcp-network-issue-demo Чтобы проверить это, сделайте следующее:
- создать новый одноразовый проект Google Cloud.
- Для вашего удобства вы можете запустить bootstrap.sh, чтобы включить нужные службы (он запросит идентификатор проекта Google и предположит, что у вас есть клиент gcloud, который вошел в систему и имеет доступ).
- Создайте сервисный аккаунт в проекте, просто сделайте его владельцем для удобства и сохраните файл ключа в
./local-secrets/google-project-credentials.json
- Обновите terraform.tfvars, указав идентификатор проекта и адрес электронной почты учетной записи службы.
terraform workspace new staging
terraform init
terraform apply
Когда Terraform будет готов, у вас должна быть настроена база данных и виртуальная машина в проекте.
- Подключитесь к виртуальной машине по SSH и запустите
sudo apt install postgresql-client-common postgresql-client
- Найдите IP-адрес экземпляра БД
- Запустите это (при необходимости измените детали)
psql --host 10.167.0.3 -U gcp-network-issue-demo-staging-db-user gcp-network-issue-demo-staging-database
Что происходит?
- Любая попытка фактически использовать соединение, например, от клиента psql или db-migrate, истекает
- Если я удалю общедоступный IP-адрес виртуальной машины из настройки, она подключится нормально. Однако мне нужна общедоступная виртуальная машина, чтобы другие службы могли к ней подключаться.
Что мне не хватает?
psql
и т. Д. 3) Что такое10.240.0.3
? 4) Какие роли фактически назначены учетной записи службы ?. 5) Если Cloud SQL адресуется в том же VPC, прокси-сервер Cloud SQL не требуется, просто подключитесь напрямую к частному IP-адресу с правильными учетными данными PostgreSQL. - person John Hanley   schedule 11.09.2020gcloud sql instances patch INSTANCE_NAME --authorized-networks
- person John Hanley   schedule 12.09.2020psql --host 10.240.0.3 -U postgres slipway-refactored-staging-database psql: could not connect to server: Connection timed out Is the server running on host "10.240.0.3" and accepting TCP/IP connections on port 5432?
Вы имеете в виду добавление общедоступного IP-адреса моей виртуальной машины в качестве авторизованного? Я попытался запустить `экземпляры gcloud sql --project slipway-refactored patch slipway-refactored-staging-database-instance --authorized-networks 35.228.181.106`, но это, похоже, не имело значения. - person hallvors   schedule 12.09.2020ip_configuration { ipv4_enabled = false private_network = var.private_network }
, и я в какой-то момент пытался добавить сюда данные авторизованной сети, но не смог найти конфигурацию, которая заставила бы все работать. Я прав, вы предлагаете добавить общедоступный IP-адрес виртуальной машины в качестве авторизованной сети? - person hallvors   schedule 12.09.2020