Dataproc пытается подключиться к Postgres через JDBC, отсутствуют разрешения - PullRequest
1 голос
/ 01 апреля 2019

Заранее спасибо ...

  1. Я хочу подключиться / написать с помощью API JDBC к экземпляру Postgres SQL, работающему с использованием Cloud SQL программным путем. Я использовал следующие банки:
    1. postgresql
    2. postgres-socket-factory
    3. Postgres-сокет-завод-1.0.11-банка-с-dependencies.jar

Я использую Dataproc, который попытается подключиться, используя шаг # 1, но я получаю следующее исключение:

2019-04-01 11:05:03.998 IST
Something unusual has occurred to cause the driver to fail. Please report this exception.
    at org.postgresql.Driver.connect(Driver.java:277)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at rdsConnector$.getConnection(rdsConnector.scala:33) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$4.run(ApplicationMaster.scala:721)
Caused by: java.lang.RuntimeException: Unable to retrieve information about Cloud SQL instance [projectID:us-east1:dB]
    at com.google.cloud.sql.core.SslSocketFactory.obtainInstanceMetadata(SslSocketFactory.java:459)
    at com.google.cloud.sql.core.SslSocketFactory.fetchInstanceSslInfo(SslSocketFactory.java:333)
    at com.google.cloud.sql.core.SslSocketFactory.getInstanceSslInfo(SslSocketFactory.java:313)
    at com.google.cloud.sql.core.SslSocketFactory.createAndConfigureSocket(SslSocketFactory.java:194)
    at com.google.cloud.sql.core.SslSocketFactory.create(SslSocketFactory.java:160)
    at com.google.cloud.sql.postgres.SocketFactory.createSocket(SocketFactory.java:96)
    at org.postgresql.core.PGStream.<init>(PGStream.java:62)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
    at org.postgresql.Driver.makeConnection(Driver.java:454)
    at org.postgresql.Driver.connect(Driver.java:256)
    ... 11 more
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden

2019-04-01 11:05:03.000 IST
User class threw exception: org.postgresql.util.PSQLException: Something unusual has occurred to cause the driver to fail. Please report this exception.

Я понимаю это как проблему с разрешениями, но поскольку я использую Dataproc для подключения к Postgres, какое разрешение отсутствует? если я работал на локальном ноутбуке, я должен установить GOOGLE_APPLICATION_CREDENTIALS в файл json. Но что происходит в случае Dataproc?

1 Ответ

1 голос
/ 01 апреля 2019

В JDBC SocketFactory для доступа к учетным данным используется стратегия Учетные данные приложения по умолчанию .

Для Cloud Dataproc для вас предоставляется учетная запись службы по умолчанию [project-number]-compute@developer.gserviceaccount.com. Вы предоставляете этой учетной записи роль IAM «Cloud SQL Client», JDBC SocketFactory будет использовать ее для аутентификации, и, таким образом, вы сможете подключиться к своему приложению.

...