ARTIFACTORY:连接到Google Cloud PostgreSQL
作者:Joey Naor和Ashraf Kherbawy
为了将Artifactory与托管在Google Cloud (SQL)上的PostgreSQL集成,并通过verify-ca强制TLS,需要额外的高级配置。本文将介绍整个过程,同时假设您已经熟悉基本的Artifactory <> PostgreSQL集成。
开始
Artifactory 7。xhas two different microservices which separately connect to the database:
Artifactory (jfirst)——用Java编写,使用JDBC
元数据(jfmd)——用Go语言编写,使用Go SQL客户端
由于这两个微服务是用不同的语言编写的,并且使用不同的数据库驱动程序,因此我们需要配置两个不同的连接字符串,并为相同的私钥使用两种不同的格式——元数据的PEM和Artifactory的DER (PKCS 8)。
1 .证书
在Google SQL UI面板中,导航到你的PostgreSQL实例>连接,并确保选中“只允许SSL连接”——这将强制SSL连接。然后,点击“创建客户端证书,生成以下证书和私钥:
- client-cert.cer / .der
- client-key.cer / .der
- server-ca.cer / .der
这三个文件需要移动到Artifactory主机/pod/容器的' /etc/ssl/certs/ '目录下。' /etc/ssl/certs/ '是Go应用程序(元数据)加载证书的默认目录。
由于' client-key.cer/.der '是用于元数据的私钥,我们需要为Artifactory创建另一个DER格式的副本:$ openssl pkcs8 -topk8 -outform DER -in client-key.cer/. DER -out postgresql关键-nocrypt为了演示,我们将放置' postgresql。“/etc/ssl/certs/”下的密钥'。
对于Helm用户:
如果Artifactory是通过Helm安装的,证书可以作为秘密复制:
1.创建秘密:$ ls ./gcp-cert ./
client-cert。cer client-key。cer postgresql。关键server-ca.cer——from-file="../gcp-certs/"
秘密/ gcp-certs创建
2.将' customVolumes '和' customvolumounts '添加到值中。yaml文件:全球:
customVolumes: |
—名称:gcp-cert
秘密:
secretName: gcp-certs
customVolumeMounts: |
—名称:gcp-cert
mountPath: /etc/ssl/certs/
步骤2:配置system.yaml
我们将使用以下system.yaml:元数据:
数据库:
类型:postgresql
司机:org.postgresql.Driver
Url: go:user= password='${shared.database. 'Password}' dbname= host= port=5432 sslmode=verify-ca sslrootcert=/etc/ssl/certs/server-ca. Password}'cer sslcert = / etc / ssl /证书/ client-cert。cer sslkey = / etc / ssl /证书/ client-key.cer
共享:
数据库:
类型:postgresql
司机:org.postgresql.Driver
url: jdbc: postgresql: / / < db-hostname >: 5432 / < db名称> ? sslfactory = org.postgresql.ssl.jdbc4.LibPQFactory&sslmode = verify-ca&sslrootcert = / etc / ssl /证书/ server-ca.cer&sslcert = / etc / ssl /证书/ client-cert.cer&sslkey = / etc / ssl /证书/ postgresql.key
用户名:< db-username >
密码:< db-password >
如上所述,两个连接字符串使用相同的两个证书和相同私钥的两种不同格式。
此外,出于安全目的(加密),元数据密码被设置为一个变量。
我们需要确保改变了“< >”符号之间的所有值(应该删除)。这里有一个例子,主机名是' googlesql ',数据库名是' artdb ',用户名是' joey ',密码是' hello ':元数据:
数据库:
类型:postgresql
司机:org.postgresql.Driver
Url: go:user=joey密码='${shared.database. 'Password}' dbname=artdb host=googlesql port=5432 sslmode=verify-ca sslrootcert=/etc/ssl/certs/server-ca. Password}'cer sslcert = / etc / ssl /证书/ client-cert。cer sslkey = / etc / ssl /证书/ client-key.cer
共享:
数据库:
类型:postgresql
司机:org.postgresql.Driver
url: jdbc: postgresql: / / googlesql: 5432 / artdb ? sslfactory = org.postgresql.ssl.jdbc4.LibPQFactory&sslmode = verify-ca&sslrootcert = / etc / ssl /证书/ server-ca.cer&sslcert = / etc / ssl /证书/ client-cert.cer&sslkey = / etc / ssl /证书/ postgresql.key
用户名:乔伊
密码:你好
对于Helm用户:
自定义元数据数据库配置尚未通过Helm变量得到支持。因此,我们需要加载整个系统。Yaml文件使用systemYamlOverride或systemYaml。关于Helm安装的几个注意事项:
- 确保您设置了' postgresql '。enabled=false ',否则将使用随机的DB密码。
- 确保在系统中。yaml的元数据。Database '在' shared.database '之前声明
这是一个值。上面的系统。Yaml的例子:postgresql:
启用:假
全球:
customVolumes: |
—名称:gcp-cert
秘密:
secretName: gcp-certs
customVolumeMounts: |
—名称:gcp-cert
mountPath: /etc/ssl/certs/
artifactory:
systemYaml: |
元数据:
数据库:
类型:postgresql
司机:org.postgresql.Driver
Url: go:user=joey密码='${shared.database. 'Password}' dbname=artdb host=googlesql port=5432 sslmode=verify-ca sslrootcert=/etc/ssl/certs/server-ca. Password}'cer sslcert = / etc / ssl /证书/ client-cert。cer sslkey = / etc / ssl /证书/ client-key.cer
共享:
数据库:
类型:postgresql
司机:org.postgresql.Driver
url: jdbc: postgresql: / / googlesql: 5432 / artdb ? sslfactory = org.postgresql.ssl.jdbc4.LibPQFactory&sslmode = verify-ca&sslrootcert = / etc / ssl /证书/ server-ca.cer&sslcert = / etc / ssl /证书/ client-cert.cer&sslkey = / etc / ssl /证书/ postgresql.key
用户名:乔伊
密码:你好
故障排除:
应该通过分别观察artifactory-service.log和metadata-service.log中的db相关日志来执行故障排除。常见的问题是证书权限、格式和路径,因此请确保仔细执行上述步骤。
如需进一步帮助,请联系JFrog支持。
