传输层安全性(Transport Layer Security, TLS)¶
Perc雷竞技下载官网ona运营商MySQL使用传输层安全性(Transport Layer Security, TLS)以下类型的通信加密协议:
内部——之间的通信Percona XtraDB集群实例,雷竞技下载官网
外部——客户端应用程序之间的通信和ProxySQL。
内部证书也被用作一个授权的方法。
TLS安全可以以多种方式配置。默认情况下,操作员自动生成长期证书如果没有证书的秘密。其他选项如下:
操作员可以使用一个专门安装cert-manager将自动生成和更新短期TLS证书,
证书可以手动生成。
您还可以使用可用的预生成的证书部署/ ssl-secrets.yaml文件用于测试目的,但我们强烈建议避免使用任何生产系统!
下面的内容将解释如何配置TLS安全同运营商自己,以及如何如果需要暂时禁用它。
安装和使用cert-manager¶
关于cert-manager¶
一个cert-manager是Kubernetes证书管理控制器广泛应用自动化的管理和发行TLS证书。社区驱动的,开源的。
当你已经安装了cert-manager和部署操作员,操作员证书的请求cert-manager。的cert-manager作为一个自签名发行并生成证书。Perc雷竞技下载官网ona操作员签名发行人是本地运营商名称空间。创建自签名发行人因为Percona XtraDB集群要求所有证书颁发相同的。雷竞技下载官网
自签名的发行人可以部署和使用没有单独创建一个clusterissuer Percona操作符。雷竞技下载官网
的安装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.8.0/cert-manager.yaml
在安装之后,您可以验证cert-manager通过运行下面的命令:
美元kubectl得到豆荚- ncert-manager
结果应该显示cert-manager和webhook活跃并运行。
手动生成证书¶
手动生成证书,遵循这些步骤:
提供一个证书颁发机构(CA)生成TLS证书
与服务器生成一个CA密钥和证书文件细节
创建服务器TLS证书使用CA密钥、证书和服务器的细节
命令集生成证书使用以下属性:
Server-pem——证书Server-key.pem- - - - - -私钥ca.pem——证书颁发机构
你应该生成证书两次:一组是外部通信,另一组是内部的。创建一个秘密必须添加到供外部使用cr.yaml /规范/ secretsName。证书必须添加到生成的内部沟通cr.yaml /规范/ sslInternalSecretName。
美元猫< < EOF | cfssl gencert -initca - | cfssljson光秃秃的ca{“CN”:“根CA”,“关键”:{“算法”:“rsa”,“大小”:2048}}EOF美元猫< < EOF | cfssl gencert ca = ca。pem -ca-key = ca-key。pem- | cfssljson -bare server{“主机”:(" $ {CLUSTER_NAME} -proxysql”,“*。$ {CLUSTER_NAME} -proxysql-unready”,“* $ {CLUSTER_NAME} -pxc "。),“CN”:“$ {CLUSTER_NAME} -pxc”,“关键”:{“算法”:“rsa”,“大小”:2048}}EOF美元kubectl创建秘密通用的cluster1-ssl——从文件=tls.crt=server.pem——从文件=tls.key=server-key.pem——从文件=ca.crt=ca.pem- - -类型=kubernetes.io / tls
更新的证书¶
如果使用cert-manager,应该照顾更新证书。如果你手动生成证书,你应该照顾更新他们在适当的时间。
TLS cert-manager颁发的证书都是短期的。从运营商版本1.9.0 cert-manager问题TLS证书3个月,而根证书有效期为3年。这允许按计划自动补发TLS证书,没有停机时间。
之前版本的运营商1.9.0使用3月根证书,导致问题自动TLS证书更新。如果这是你的情况,你可以让操作员更新的官方的指令。
请注意
如果你使用cert-manager版本比1.9.0早,和你想避免停机时间而更新证书1.9.0操作员更新或新版本后,迫使证书cert-manager再生。
检查你的证书过期¶
首先,检查必要的秘密名字(
cluster1-ssl和cluster1-ssl-internal默认情况下):美元kubectl得到证书你将有以下回应:
姓名准备秘密年龄cluster1-ssl真cluster1-ssl 49米cluster1-ssl-internal真cluster1-ssl-internal 49米选择你也可以检查证书发行者启动并运行:
美元kubectl得到发行人响应应该如下:
姓名好年龄cluster1-pxc-ca真的49米现在使用以下命令找到证书有效日期,必要时用秘密的名字:
美元{kubectl得到秘密/ cluster1-ssl-internal- ojsonpath=“{.data.tls \ .crt}”|base64——解码|opensslx509通知pem-noout语境|grep“不”后kubectl得到秘密/ cluster1-ssl- ojsonpath=“{.data.ca \ .crt}”|base64——解码|opensslx509通知pem-noout语境|grep“不”后}由此产生的输出将是不言而喻的:
后:格林尼治时间2021年9月15日11:04:53不是后:2021年9月15日11:04:53格林尼治时间
更新证书没有停机时间¶
如果你不使用cert-manager和手动创建证书,您可以按照下面的步骤来执行一个没有停机更新这些证书如果他们仍然有效。
请注意
已经过期的证书,遵循替代方法。
非过期的证书,可以推出新的证书(CA和TLS)算子如下。
生成一个新的CA证书(
ca.pem)。选择你也可以生成一个新的TLS证书和密钥,但那些以后可以生成步骤6。获取当前的CA (
ca.pem.old)和TLS (tls.pem.old)证书和TLS认证关键(tls.key.old):美元kubectl得到秘密/ cluster1-ssl-internal- ojsonpath=“{.data.ca \ .crt}”|base64——解码>ca.pem.old美元kubectl得到秘密/ cluster1-ssl-internal- ojsonpath=“{.data.tls \ .crt}”|base64——解码>tls.pem.old美元kubectl得到秘密/ cluster1-ssl-internal- ojsonpath=“{.data.tls \。key}”|base64——解码>tls.key.old结合新和当前
ca.pem成一个ca.pem.combined文件:美元猫ca.pemca.pem.old> >ca.pem.combined创建一个新对象的秘密老TLS证书(
tls.pem.old)和关键(tls.key.old),但是新组合ca.pem(ca.pem.combined):美元kubectl删除秘密/ cluster1-ssl-internal $kubectl创建秘密通用的cluster1-ssl-internal——从文件=tls.crt=tls.pem.old——从文件=tls.key=tls.key.old——从文件=ca.crt=ca.pem.combined——类型=kubernetes.io / tls集群将经历一个滚动的和解,但它将没有问题,每一个节点都有老TLS证书/密钥,新的和旧的CA证书。
如果不是新的TLS证书和密钥生成步骤1,现在这样做。
创建一个新的秘密对象:第二次使用新TLS证书(
server.pem在这个例子中)和其关键(server-key.pem),再结合CA证书(ca.pem.combined):美元kubectl删除秘密/ cluster1-ssl-internal $kubectl创建秘密通用的cluster1-ssl-internal——从文件=tls.crt=server.pem——从文件=tls.key=server-key.pem——从文件=ca.crt=ca.pem.combined——类型=kubernetes.io / tls集群将经历一个滚动的和解,但它将没有问题,每个节点已经有了一个新的CA证书(如结合CA证书的一部分),能成功地让参与者加入新的TLS证书。乔伊纳节点还有一个CA证书相结合,所以它可以对老龄TLS认证证书。
创建最后一个秘密对象:使用新TLS证书(
server.pmm)和其关键(server-key.pem),新CA证书(ca.pem):美元kubectl删除秘密/ cluster1-ssl-internal $kubectl创建秘密通用的cluster1-ssl-internal——从文件=tls.crt=server.pem——从文件=tls.key=server-key.pem——从文件=ca.crt=ca.pem——类型=kubernetes.io / tls集群将经历一个滚动的和解,但它将没有问题:删除旧的CA证书,每个节点已经使用新的TLS认证,没有节点依赖旧的CA证书。
停机更新证书¶
如果您的证书已经过期(或者如果你继续使用操作符版本1.9.0之前),你应该通过暂停unpause——更新的秘密路线如下。
暂停集群在一个标准的方法,并确保它已经达到了停顿状态。
如果使用cert-manager,删除发行者和TLS证书:
美元{kubectl删除发行人/ cluster1-pxc-cakubectl删除证书/ cluster1-ssl证书/ cluster1-ssl-internal}删除秘密力量SSL和解:
美元kubectl删除秘密/ cluster1-ssl秘密/ cluster1-ssl-internal检查证书,确保和解成功。
Unpause集群在一个标准的方法,并确保它已达到运行状态。
保持证书后删除集群¶
在集群中删除对象,创建SSL(秘密,证书,和发行人)在默认情况下并不会被删除。
如果用户想要创建的对象的清除SSL,有一个finalizers.delete-ssl选项部署/ cr.yaml:如果这个终结器设置,操作符将删除秘密,证书和发行人集群后删除事件。
运行Pe雷竞技下载官网rcona XtraDB集群没有TLS¶
省略TLS也是可能的,但我们建议您启用了TLS协议的集群运行。
禁用TLS协议(如出于演示目的)编辑cr.yaml /规范/ allowUnsafeConfigurations设置为真正的并确保没有证书的秘密。