默认情况下,AlloyDB Omni Kubernetes 操作器使用 cert-manager 为每个数据库集群预配一组 TLS 证书。除了数据库服务器证书之外,该运维人员还为控制平面组件创建了证书,以确保内部连接也安全无虞。默认情况下,每个证书都由操作人员管理的签发者签名。
从 AlloyDB Omni 操作器版本 1.6.0 开始,如果您希望所有证书(包括控制平面组件的证书)都链接回您自己信任的根 CA,则可以将操作器配置为使用您选择的签发者。这样一来,您就可以将所有证书(包括用于控制平面功能的证书)链接到自己的公钥基础架构 (PKI),而无需公开每个内部实体的实现细节。
准备工作
如需配置证书签发者,您必须先创建与您要用于签署证书的 CA 相关联的 ClusterIssuer 或 Issuer 类型的 cert-manager 签发者。AlloyDB Omni 操作器在创建证书时会引用此签发者。
配置自定义签发者
您可以为数据库集群、AlloyDB Omni 操作器和 PgBouncer 配置自定义证书签发者。
数据库集群证书
此功能要求相关数据库集群的清单中的 controlPlaneAgentsVersion 为 1.6.0 或更高版本。
有两个数据库集群规范字段用于配置证书签发者:
spec.primarySpec.dataPlaneCertIssuer:对用于配置数据平面证书的 cert-manager 签发者的引用。签发者 CA 是数据库客户端在 TLS 连接期间可以信任的 CA,用于验证数据库。spec.primarySpec.controlPlaneAgentsCertIssuer:对用于配置控制平面证书的 cert-manager 签发者的引用。这些证书用于内部连接。
spec:
primarySpec:
tls:
dataPlaneCertIssuer:
name: DATA_PLANE_ISSUER_NAME
kind: DATA_PLANE_ISSUER_KIND
controlPlaneAgentsCertIssuer:
name: CONTROL_PLANE_ISSUER_NAME
kind: CONTROL_PLANE_ISSUER_KIND
替换以下内容:
DATA_PLANE_ISSUER_NAME:用于配置数据平面证书(例如数据库服务器证书)的 cert-manager 签发者的名称。DATA_PLANE_ISSUER_KIND:必须是Issuer或ClusterIssuer。CONTROL_PLANE_ISSUER_NAME:为内部组件预配控制平面证书的 cert-manager 签发者的名称。CONTROL_PLANE_ISSUER_KIND:必须是Issuer或ClusterIssuer。
运营商证书
为操作器证书配置 cert-manager 签发者的步骤取决于用于安装 AlloyDB Omni 的方法。
使用 Helm 进行配置
如果您是首次安装 AlloyDB Omni 操作器 1.6.0 版或更高版本,请使用 Helm 安装并设置相应的值。这假定您遵循安装说明。
helm install alloydbomni-operator alloydbomni-operator-${OPERATOR_VERSION}.tgz \
--create-namespace \
--namespace alloydb-omni-system \
--set operatorCertIssuer.certManagerIssuerName="OPERATOR_CERT_ISSUER_NAME" \
--set operatorCertIssuer.certManagerIssuerKind="OPERATOR_CERT_ISSUER_KIND" \
--atomic \
--timeout 5m
如果您已安装该运算符,并且需要设置证书颁发者,请使用 helm upgrade 设置相应的值:
helm upgrade alloydbomni-operator alloydbomni-operator-${OPERATOR_VERSION}.tgz \
--create-namespace \
--namespace alloydb-omni-system \
--set operatorCertIssuer.certManagerIssuerName="OPERATOR_CERT_ISSUER_NAME" \
--set operatorCertIssuer.certManagerIssuerKind="OPERATOR_CERT_ISSUER_KIND" \
--atomic \
--timeout 5m
替换以下内容:
OPERATOR_CERT_ISSUER_NAME:用于配置内部连接所用运算符证书的 cert-manager 颁发者的名称。OPERATOR_CERT_ISSUER_KIND:必须是Issuer或ClusterIssuer。
使用 Operator Lifecycle Manager 进行配置
如果您使用 Operator Lifecycle Manager (OLM) 安装了 AlloyDB Omni 操作器,则可以修改 Subscription 资源 spec.config.env 字段,以设置操作器 Deployment 的 CERT_MANAGER_ISSUER_NAME 和 CERT_MANAGER_ISSUER_KIND 环境变量。
spec:
config:
env:
- name: CERT_MANAGER_ISSUER_NAME
value: OPERATOR_CERT_ISSUER_NAME
- name: CERT_MANAGER_ISSUER_KIND
value: OPERATOR_CERT_ISSUER_KIND
替换以下内容:
OPERATOR_CERT_ISSUER_NAME:用于配置内部连接所用运算符证书的 cert-manager 颁发者的名称。OPERATOR_CERT_ISSUER_KIND:必须是Issuer或ClusterIssuer。
PgBouncer 证书
为了支持自定义签发者,PgBouncer 控制器可以检查 DBCluster spec.primarySpec.tls.dataPlaneCertIssuer 字段,并使用该字段来预配 PgBouncer 证书。这样可确保 PgBouncer 使用的证书与数据库的证书来自同一 CA。
验证
如需验证运算符 Deployment 是否正常运行以及是否已设置环境变量 CERT_MANAGER_ISSUER_NAME 和 CERT_MANAGER_ISSUER_KIND,请运行以下命令:
kubectl get deployments local-controller-manager -n alloydb-omni-system -o yaml
如需验证是否使用了正确的签发者,请按如下所示检查 Certificate 对象:
kubectl get certificate -n NAMESPACE
检查输出中每个证书的 issuerRef 字段,确认其与您的自定义签发者一致。