所以我在Kubernetes上安装了Percona Postgres Operator和Distribution。一切工作正常,我可以通过使用helm安装过程中生成的ssl证书来做他们安装网站上提到的检查。在我的运行中。exs,我为postgres配置了这个:
config :core, Repo,
adapter: Ecto.Adapters.Postgres,
username: System.get_env("POSTGRES_USERNAME"),
password: System.get_env("POSTGRES_PASSWORD"),
database: System.get_env("POSTGRES_DB"),
hostname: System.get_env("POSTGRES_HOST"),
ssl_opts: [verify: :verify_peer, cacertfile: "./ca.crt",versions: [:"tlsv1.3"]],
ssl: true,
pool_size: 10
当我尝试执行mix ecto.create
时,我得到错误:
08:47:41.422 [error] Postgrex.Protocol (#PID<0.2436.0>) failed to connect: ** (DBConnection.ConnectionError) ssl connect: TLS client: In state wait_cert at ssl_handshake.erl:2071 generated CLIENT ALERT: Fatal - Bad Certificate
显然,如果我验证::verify_none,它的工作原理就像一个魅力,但然后我可以把任何东西作为cacert,它的工作原理。我不明白这是因为这个证书与psql协议的作品。有人能解释这种行为,也许想一个解决方案?
PS:我试着把它加进去。crt到受信任的证书,但无济于事。
1条答案
按热度按时间j2datikz1#
ca.crt必须来自签署Postgres证书的CA。您应该在-ssl-ca secret中使用证书<cluster_name>。