根據預設,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 連線期間驗證資料庫。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 operator,可以修改 Subscription 資源的 spec.config.env 欄位,設定 operator 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 控制器也會使用 spec.primarySpec.tls.dataPlaneCertRequest 中設定的屬性,佈建 PgBouncer 憑證。這有助於確保 PgBouncer 使用的憑證來自與資料庫屬性相同的 CA。
設定自訂憑證屬性
您可以自訂運算子產生的傳輸層安全標準 (TLS) 憑證屬性,例如憑證效期、續約時間範圍、主體別名 (SAN)、一般名稱和私密金鑰設定。
您可以在 DBCluster 資訊清單中設定自訂憑證屬性:
spec.primarySpec.tls.dataPlaneCertRequest:指定資料平面憑證的屬性 (包括 pgBackrest 伺服器、PgBouncer 驗證查詢和資料庫伺服器憑證)。spec.primarySpec.tls.controlPlaneAgentsCertRequest:指定用於佈建控制層憑證的屬性。這些憑證用於內部連線。
設定憑證要求
請以下列格式指定要求屬性:
spec:
primarySpec:
tls:
dataPlaneCertRequest:
commonName: DATABASE_COMMON_NAME
dnsNames:
- DATABASE_DNS_NAME_1
- DATABASE_DNS_NAME_2
duration: DATA_PLANE_DURATION
renewBefore: DATA_PLANE_RENEW_BEFORE
privateKey:
algorithm: DATA_PLANE_ALGORITHM
size: DATA_PLANE_KEY_SIZE
rotationPolicy: DATA_PLANE_ROTATION_POLICY
controlPlaneAgentsCertRequest:
duration: CONTROL_PLANE_DURATION
renewBefore: CONTROL_PLANE_RENEW_BEFORE
privateKey:
algorithm: CONTROL_PLANE_ALGORITHM
size: CONTROL_PLANE_KEY_SIZE
rotationPolicy: CONTROL_PLANE_ROTATION_POLICY
更改下列內容:
DATABASE_COMMON_NAME:(選用,僅限資料平面) 資料庫憑證的通用名稱。DATABASE_DNS_NAME_1,DATABASE_DNS_NAME_2:(選用,僅限資料平面) 資料庫憑證的主體別名 (SAN) 清單。DATA_PLANE_DURATION和CONTROL_PLANE_DURATION:憑證的總效期,以字串形式表示 (例如720h0m0s代表 30 天)。DATA_PLANE_RENEW_BEFORE和CONTROL_PLANE_RENEW_BEFORE:cert-manager 必須在憑證到期前多久開始嘗試續約 (例如120h0m0s為 5 天)。DATA_PLANE_ALGORITHM和CONTROL_PLANE_ALGORITHM:私密金鑰演算法。 有效值為RSA、ECDSA或Ed25519。DATA_PLANE_KEY_SIZE和CONTROL_PLANE_KEY_SIZE:私密金鑰大小 (以位元為單位)。 如果演算法為RSA,有效值為4096或8192(預設值為4096)。如果演算法為ECDSA,有效值為384或521(預設值為384)。如果演算法為Ed25519,系統會忽略大小。DATA_PLANE_ROTATION_POLICY和CONTROL_PLANE_ROTATION_POLICY:控制私密金鑰重新產生作業。有效值為Always或Never。
作業人員和備份用戶端憑證
如要自訂運算子和備份用戶端的憑證屬性 (這些屬性會在命名空間中的所有執行個體之間共用,且不會由資料庫叢集規格管理),請修改 Certificate 自訂資源。運算子會保留這些手動修改內容。
驗證
如要確認運算子 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 欄位,確認是否與自訂簽發者相符。