首页 / JAVA / Java – 云SQL代理和权限不足
Java – 云SQL代理和权限不足
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java – 云SQL代理和权限不足,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6623字,纯文字阅读大概需要10分钟。
内容图文
![Java – 云SQL代理和权限不足](/upload/InfoBanner/zyjiaocheng/893/f52b4961ee034ed08eb76505a23b0179.jpg)
我正在尝试在Google的Container Engine(GKE)上部署我的Spring Boot / JHipster应用程序.我已经找到了大部分内容,但我的数据库实例(使用Google SQL Proxy在Google Cloud SQL上运行的PostgreSQL实例)存在问题.
>我在云中设置了PostreSQL实例,并创建了我的应用程序的数据库和用户.
>我创建了一个具有Cloud SQL Client角色的SQL服务 – 我抓住了JSON密钥,并用它来创建我的cloudsql-instance-credentials.我还创建了我的cloudsql-db-credentials.
>我已将附加位添加到部署yaml文件中.我基本上克隆了this GitHub sample中的yaml文件,并用我自己的Docker镜像(托管在Google容器注册表中)替换了所有对wordpress的引用.我也更新了代理块,如下所示:
deployment.yaml片段:
- image: gcr.io/cloudsql-docker/gce-proxy:1.09
name: cloudsql-proxy
command: ["/cloud_sql_proxy", "--dir=/cloudsql",
"-instances=[my-project]:us-central1:[my-sql-instance-id]=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
最后,我更新了我的Spring Boot配置yaml文件,如下所示:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://google/[my-database]?socketFactory=com.google.cloud.sql.postgres.SocketFactory&socketFactoryArg=[my-project]:us-central1:[my-sql-instance-id]
username: ${DB_USER}
password: ${DB_PASSWORD}
当我kubectl创建我的部署时,图像部署,但它无法启动应用程序.这是我日志中的重要部分:
Caused by: java.lang.RuntimeException: Unable to retrieve information about Cloud SQL instance [[my-project]:us-central1:[my-sql-instance-id]]
at com.google.cloud.sql.core.SslSocketFactory.obtainInstanceMetadata(SslSocketFactory.java:411)
at com.google.cloud.sql.core.SslSocketFactory.fetchInstanceSslInfo(SslSocketFactory.java:284)
at com.google.cloud.sql.core.SslSocketFactory.getInstanceSslInfo(SslSocketFactory.java:264)
at com.google.cloud.sql.core.SslSocketFactory.createAndConfigureSocket(SslSocketFactory.java:183)
at com.google.cloud.sql.core.SslSocketFactory.create(SslSocketFactory.java:152)
at com.google.cloud.sql.postgres.SocketFactory.createSocket(SocketFactory.java:50)
at org.postgresql.core.PGStream.<init>(PGStream.java:60)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:144)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:52)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:216)
at org.postgresql.Driver.makeConnection(Driver.java:404)
at org.postgresql.Driver.connect(Driver.java:272)
... 37 common frames omitted
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.google.cloud.sql.core.SslSocketFactory.obtainInstanceMetadata(SslSocketFactory.java:372)
... 48 common frames omitted
这个“权限不足”错误在StackOverflow上弹出很多,但我没有找到与我的情况完全相同的问题.这似乎是一个通用的OAuth级错误.我觉得我已经多次按照指示对我的设置进行了双重检查,而且我不确定在哪里可以查找任何其他线索.
有任何想法吗?
更新:
感谢Vadim的指针,我已经设法超越了“权限不足”问题.遗憾的是,我的应用程序在启动时仍然失败,当它尝试建立与数据库的连接时(特别是,当Liquibase尝试开始连接到数据库以运行迁移脚本时).
我的新错误是在驱动程序的套接字级别:
liquibase.exception.DatabaseException: org.postgresql.util.PSQLException: The connection attempt failed.
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:390)
at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:82)
at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.afterPropertiesSet(AsyncSpringLiquibase.java:72)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 24 common frames omitted
Caused by: org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:272)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:52)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:216)
at org.postgresql.Driver.makeConnection(Driver.java:404)
at org.postgresql.Driver.connect(Driver.java:272)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:86)
at org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:71)
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:385)
... 28 common frames omitted
Caused by: java.net.SocketException: already connected
at java.net.Socket.connect(Socket.java:569)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)
at org.postgresql.core.PGStream.<init>(PGStream.java:61)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:144)
... 37 common frames omitted
解决方法:
Vadim解决了我问过的问题,但第二个问题 – 套接字已经连接问题 – 最终被我的一个同事弄明白了.
套接字问题的根源与数据源配置有关.事实证明,我正在混合和匹配两种不同的机制来访问Cloud SQL环境.
>使用Cloud SQL代理;和
>使用Google套接字工厂
因为我已经成功配置了Cloud SQL Proxy,所以在Spring Boot环境中我不需要那个奇怪的JDBC URL.我可以使用127.0.0.1:5432连接,如下所示:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:postgresql://127.0.0.1:5432/[my-database-name]
username: ${DB_USER}
password: ${DB_PASSWORD}
现在我已经替换了我的JDBC URL,我的应用程序连接成功.
内容总结
以上是互联网集市为您收集整理的Java – 云SQL代理和权限不足全部内容,希望文章能够帮你解决Java – 云SQL代理和权限不足所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。