传输层安全性(Transport Layer Security, TLS)¶
Post雷竞技下载官网greSQL的Percona运营商使用传输层安全(TLS)加密协议以下类型的通信:
- 集群中的内部- PostgreSQL实例之间的通信
- 外部客户端应用程序之间的通信和集群
内部证书也被用作一个授权PostgreSQL副本实例的方法。
TLS安全可以配置在几个方面:
- 操作员可以在集群创建时间,自动生成证书
- 你也可以手动生成证书。
您还可以使用可用的预生成的证书部署/ ssl-secrets.yaml文件用于测试目的,但我们强烈建议避免使用任何生产系统!
下面的内容将解释如何配置TLS安全同运营商自己,以及如何如果需要暂时禁用它。
允许操作员自动生成证书¶
操作员能够自动生成长期证书,打开加密在创建集群时,如果没有证书的秘密。它生成证书的帮助下cert-manager——Kubernetes证书管理控制器广泛应用自动化管理和发行TLS证书。Cert-manager社区主导型和开源。
的安装cert-manager¶
你可以安装cert-manager如下:
- 创建一个名称空间,
- 禁用资源验证cert-manager名称空间,
- 安装cert-manager。
以下命令执行所有需要的操作:
美元kubectl创建名称空间cert-manager美元kubectl标签名称空间cert-managercertmanager.k8s.io /禁用验证=真正的美元kubectl应用- fhttps://github.com/jetstack/cert-manager/releases/download/v1.9.0/cert-manager.yaml
在安装之后,您可以验证cert-manager通过运行下面的命令:
美元kubectl得到豆荚- ncert-manager
结果应该显示cert-manager和webhook活跃并运行。
将自动生成证书¶
当你已经安装了cert-manager,操作员可以请求证书。让这发生,取消sslCA,sslSecretName,sslReplicationSecretName选项的部署/ cr.yaml配置文件:
…规范:# secretsName: cluster1-userssslCA:cluster1-ssl-casslSecretName:cluster1-ssl-keypairsslReplicationSecretName:cluster1-ssl-keypair…
当完成,部署集群像往常一样,与kubectl应用- f / cr.yaml部署命令。将生成的证书如果没有证书的秘密。
手动生成证书¶
手动生成证书,遵循这些步骤:
- 提供一个生成TLS证书,
- 与服务器生成一个密钥和证书文件的细节,
- 创建服务器TLS使用密钥证书,证书和服务器的细节。
命令集生成证书使用以下属性:
Server-pem——证书Server-key.pem- - - - - -私钥ca.pem——证书颁发机构
你应该生成一组证书外部通信,和另一组内部的。
假设你的集群名称cluster1,您可以使用以下命令生成证书:
美元CLUSTER_NAME=cluster1美元名称空间=默认的美元猫< < EOF | cfssl gencert -initca - | cfssljson光秃秃的ca{“CN”:“*”,“关键”:{“算法”:“ecdsa”,“大小”:384}}EOF美元猫< < EOF > ca-config.json{“签署”:{“默认”:{“到期”:“87600 h”,“用法”:[“数字签名”、“关键加密”、“承诺”的内容}}}EOF美元猫< < EOF | cfssl gencert ca = ca。pem -ca-key = ca-key。pem配置=。/ ca-config。json - | cfssljson光秃秃的服务器{“主机”:(“localhost”," $ {CLUSTER_NAME}”," $ {CLUSTER_NAME}。${名称空间}”," $ {CLUSTER_NAME}。${名称空间}.svc.cluster.local”," $ {CLUSTER_NAME} -pgbouncer”," $ {CLUSTER_NAME} -pgbouncer。${名称空间}"," $ {CLUSTER_NAME} -pgbouncer。${名称空间}.svc.cluster.local ",“*。$ {CLUSTER_NAME}”,“*。$ {CLUSTER_NAME}。${名称空间}”,“*。$ {CLUSTER_NAME}。${名称空间}.svc.cluster.local ",“*。$ {CLUSTER_NAME} -pgbouncer”,“*。$ {CLUSTER_NAME} -pgbouncer。${名称空间}",“*。$ {CLUSTER_NAME} -pgbouncer。${名称空间}.svc.cluster.local "),“CN”:“$ {CLUSTER_NAME}”,“关键”:{“算法”:“ecdsa”,“大小”:384}}EOF美元kubectl创建秘密通用的$ {CLUSTER_NAME}-ssl-ca——从文件=ca.crt=ca.pem美元kubectl创建秘密tls$ {CLUSTER_NAME}-ssl-keypair——证书=server.pem——关键=server-key.pem
如果你的PostgreSQL集群包括副本实例(此功能在默认情况下),他们以类似的方式生成证书:
美元猫< < EOF | cfssl gencert ca = ca。pem -ca-key = ca-key。pem配置=。/ ca-config。json - | cfssljson光秃秃的副本{“CN”:“primaryuser”,“关键”:{“算法”:“ecdsa”,“大小”:384}}EOF美元kubectl创建秘密tls$ {CLUSTER_NAME}-ssl-replicas——证书=replicas.pem——关键=replicas-key.pem
当生成证书,设置以下键的部署/ cr.yaml配置文件:
spec.sslCA关键的名称应该包含秘密TLS用于连接加密(外部交通),和复制(内部交通),spec.sslSecretName键的名称应该包含秘密创建加密外部通信、spec.secrets.sslReplicationSecretName键的名称应该包含秘密创建加密内部通信、spec.tlsOnly被设置为真正的默认情况下,执行加密
别忘了申请改变像往常一样:
美元kubectl应用- f部署/ cr.yaml
检查连接到集群¶
你可以检查与使用TLS沟通psql,标准的交互式基于终端前端PostgreSQL。下面的命令将生成一个新的pg-client容器,包括需要的命令,可用于检查(而不是使用你真正的集群名称<集群名称>占位符):
美元猫< < EOF | kubectl应用- f -apiVersion:应用程序/ v1:部署元数据:名称:pg-client规范:副本:1选择器:matchLabels:名称:pg-client模板:元数据:标签:名称:pg-client规范:容器:——名称:pg-client图片:perc雷竞技下载官网onalab / percona-distribution-postgresql: 14.7imagePullPolicy:总是命令:——睡眠参数:——“100500”volumeMounts:ca -名称:mountPath:“/ tmp / tls”卷:ca -名称:秘密:secretName: < cluster_name > -ssl-ca项目:——关键:ca.crt路径:ca.crt模式:0777EOF
现在让shell访问新创建的容器,并启动PostgreSQL交互式终端检查连接通过加密通道(请使用真正的集群名称,PostgreSQL用户登录和密码):
美元kubectl执行-部署/ pg-client- - -bash伊尔(postgres@pg-client/]美元PGSSLMODE来=verify-caPGSSLROOTCERT=/ tmp / tls / ca.crtpsqlpostgres: / / < postgresql-user >: < postgresql-password > @ <集群名称> -pgbouncer。<名称> .svc.cluster.local
现在您应该看到PostgreSQL交互式终端的提示:
美元psql(147)类型“帮助”为的帮助。pgdb=>
运行Pe雷竞技下载官网rcona分布没有TLS PostgreSQL¶
省略TLS也是可能的,但我们建议您启用了TLS协议的集群运行。
禁用TLS协议(如出于演示目的)设置spec.tlsOnly关键假,并确保没有证书中配置的秘密部署/ cr.yaml文件。