传输层安全(TLS)¶
Mong雷竞技下载官网oDB的Percona Operator使用Transport Layer Security (TLS)加密协议进行以下类型的通信:
- 集群中MongoDB实例的Percona服务器之间的内部通信雷竞技下载官网
- 客户端应用程序和集群之间的外部通信
内部证书还用作授权方法。
用于TLS安全性的证书可以通过几种方式生成。默认情况下,如果没有可用的证书秘密,操作员将自动生成长期证书。其他选项如下:
- 操作者可以使用专门安装的cert-manager,它将自动生成和更新短期TLS证书,
- 证书可以手动生成。
中提供的预生成证书也可以使用部署/ ssl-secrets.yaml文件用于测试目的,但我们强烈建议避免在任何生产系统上使用它们!
以下小节将解释如何使用Operator自己配置TLS安全性,以及如何在需要时临时禁用它。
安装及使用cert-manager¶
关于cert-manager¶
的cert-manager是Kubernetes证书管理控制器,广泛用于TLS证书的自动化管理和颁发。它是由社区驱动的,并且是开源的。
当您已经安装cert-manager和部署操作符时,操作符向cert-manager。的cert-manager充当自签名颁发者并生成证书。Perc雷竞技下载官网ona Operator自签名颁发者是Operator名称空间的本地颁发者。之所以创建这个自签名颁发者,是因为Percona Server for MongoDB雷竞技下载官网要求由同一个CA(证书颁发机构)颁发的所有证书。
自签名颁发者允许您部署和使用Percona Operator,而无需单独创建集群颁发者。雷竞技下载官网
安装cert-manager¶
安装的步骤cert-manager以下是:
- 创建命名空间,
- 在cert-manager命名空间上禁用资源验证,
- 安装cert-manager。
以下命令执行所有需要的操作:
$kubectl应用- fhttps://github.com/jetstack/cert-manager/releases/download/v1.8.0/cert-manager.yaml——验证=假
安装完成后,您可以验证cert-manager运行命令如下:
$kubectl得到豆荚- ncert-manager
的结果应该显示cert-manager和webhook活动和运行:
NAME READY STATUS重启AGE cert-manager-7d59dd4888-tmjqq 1/1 Running 0 3m8s cert-manager- cainjecator -85899d45d9-8ncw9 1/1 Running 0 3m8s cert-manager-webhook-84fcdcd5d-697k4 1/1 Running 0 3m8s
使用Operator创建数据库后,它将自动触发证书管理器来创建证书。无论何时检查证书是否过期,您都会发现它们是有效的和短期的。
手动生成证书¶
手动生成证书的步骤如下:
- 提供CA (Certificate Authority)生成TLS证书,
- 生成包含服务器详细信息的CA密钥和证书文件,
- 使用CA密钥、证书和服务器详细信息创建服务器TLS证书。
命令集生成具有以下属性的证书:
Server-pem——证书Server-key.pem-私钥ca.pem-证书颁发机构
您应该生成两次证书:一组用于外部通信,另一组用于内部通信。为外部使用创建的秘密必须添加到spec.secrets.ssl钥匙部署/ cr.yaml文件。为内部通信生成的证书必须添加到spec.secrets.sslInternal钥匙部署/ cr.yaml文件。
假设您的集群名称是my-cluster-name时,手动生成证书的说明如下:
$CLUSTER_NAME=my-cluster-name美元名称空间=默认的美元猫<{CN:根CA,“名称”:[{“O”:“PSMDB”}],“关键”:{“算法”:“rsa”,“大小”:2048}}EOF$猫< ca-config.json {“签署”:{“默认”:{“到期”:“87600 h”,"usage ": ["signing", "key encryption ", "server auth", "client auth"]}}}EOF$猫<{“主机”:(“localhost”," $ {CLUSTER_NAME} -rs0”," $ {CLUSTER_NAME} -rs0。${名称空间}"," $ {CLUSTER_NAME} -rs0。${名称空间}.svc.cluster.local ",“*。$ {CLUSTER_NAME} -rs0”,“*。$ {CLUSTER_NAME} -rs0。${名称空间}",“*。$ {CLUSTER_NAME} -rs0。${名称空间}.svc.cluster.local "],“名称”:[{“O”:“PSMDB”}],“CN”:“$ {CLUSTER_NAME / -rs0}”,“关键”:{“算法”:“rsa”,“大小”:2048}}EOF$cfssl包-ca-bundle=ca.pemcert=server.pem|cfssljson裸露的美元的服务器kubectl创建秘密通用的my-cluster-name-ssl-internal——从文件=tls.crt=server.pem——从文件=tls.key=server-key.pem——从文件=ca.crt=ca.pem——类型=kubernetes.io / tls$猫<{“主机”:(" $ {CLUSTER_NAME} -rs0”," $ {CLUSTER_NAME} -rs0。${名称空间}"," $ {CLUSTER_NAME} -rs0。${名称空间}.svc.cluster.local ",“*。$ {CLUSTER_NAME} -rs0”,“*。$ {CLUSTER_NAME} -rs0。${名称空间}",“*。$ {CLUSTER_NAME} -rs0。${名称空间}.svc.cluster.local "],“名称”:[{“O”:“PSMDB”}],“CN”:“$ {CLUSTER_NAME / -rs0}”,“关键”:{“算法”:“rsa”,“大小”:2048}}EOF$kubectl创建秘密通用的my-cluster-name-ssl——从文件=tls.crt=client.pem——从文件=tls.key=client-key.pem——从文件=ca.crt=ca.pem——类型=kubernetes.io / tls
检查您的证书是否过期¶
首先,检查必要的秘密名称(
my-cluster-name-ssl而且my-cluster-name-ssl-internal默认情况下):$kubectl得到证书你会得到以下回应:
NAME READY SECRET AGE my-cluster-name-ssl True my-cluster-name-ssl 49m my-cluster-name-ssl-internal True my-cluster-name-ssl-internal 49m您还可以选择检查证书颁发者是否正常运行:
$kubectl得到发行人答复应如下:
NAME READY AGE my-cluster-name-psmdb-ca True 61秒现在使用以下命令来查找证书的有效日期,如果需要的话替换Secrets名称:
${kubectl得到秘密/ my-cluster-name-ssl-internal- ojsonpath=“{.data.tls \ .crt}”|base64——解码|opensslx509-noout日期kubectl得到秘密/ my-cluster-name-ssl- ojsonpath=“{.data.ca \ .crt}”|base64——解码|opensslx509-noout日期}由此产生的输出将是不言自明的:
notBefore= 4月25日12:09:38 2022 GMT notAfter= 7月24日12:09:38 2022 GMT notBefore= 4月25日12:09:38 2022 GMT notAfter= 7月24日12:09:38 2022 GMT
运行Pe雷竞技下载官网rcona Server for MongoDB不使用TLS¶
也可以省略TLS,但我们建议您在运行集群时启用TLS协议。
若要禁用TLS协议(例如,为演示目的),请设置spec.allowUnsafeConfigurations关键真正的在部署/ cr.yaml存档并确保没有可用的证书秘密。
警告
通常情况下,操作员会阻止用户使用不安全参数配置集群(启动时使用少于3个副本集实例或没有TLS等),自动将这些不安全参数更改为安全默认值。如果将集群切换到不安全配置允许模式,您将无法通过设置将其切换回来spec.allowUnsafeConfigurations关键假,该标志将被忽略。