ARTIFACTORY:连接到Google Cloud PostgreSQL

阿什拉夫Kherbawy
2022-12-25 36

作者: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连接。然后,点击“创建客户端证书,生成以下证书和私钥:

  1. client-cert.cer / .der
  2. client-key.cer / .der
  3. 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文件使用systemYamlOverridesystemYaml。关于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支持。