使用自訂 cert-manager

私人搶先版:搭配 Apigee Hybrid 使用自訂 cert-manager

這項功能以私人正式版的形式提供,適用於 Apigee Hybrid 1.13 版。

這項功能可讓您為 Apigee Hybrid 安裝自訂 cert-manager,並使用限制性權限修改角色型存取權控管 (RBAC) 相關設定。

事前準備

繼續進行安裝步驟前,請先使用下列指令下載 Helm 資訊套件:

export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CERT_MANAGER_VERSION=v1.14.5
helm pull $CHART_REPO/apigee-cert-manager --version $CERT_MANAGER_VERSION --untar

設定自訂 cert-manager

如要設定自訂 cert-manager,請按照下列步驟操作:

  1. 全新安裝自訂 cert-manager
  2. 升級至自訂 cert-manager

全新安裝自訂 cert-manager

如要重新安裝自訂 cert-manager,以便與 Apigee Hybrid 搭配使用,請完成下列步驟:

  1. 使用 kubectl 和下列指令安裝 CRD:
    export CERT_MANAGER_VERSION=v1.14.5
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.crds.yaml
    
  2. 使用 Helm 資訊套件安裝 cert-manager 元件。
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

    隨後,當有新版圖表可用時,您可以使用 helm upgrade 升級:

    helm upgrade CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE

升級至自訂 cert-manager

如要從現有的非自訂 cert-manager 遷移至自訂版本,請按照下列步驟操作。叢集在特定時間只能執行一個 cert-manager。

  1. 停用現有 Webhook,並將部署項目的副本數更新為 0,以順利完成遷移:
      kubectl delete validatingwebhookconfiguration cert-manager-webhook
      kubectl delete mutatingwebhookconfiguration cert-manager-webhook
    
        # set the replicas to 0
    
      kubectl scale deployment cert-manager -n cert-manager --replicas=0
      kubectl scale deployment cert-manager-cainjector -n cert-manager --replicas=0
      kubectl scale deployment cert-manager-webhook -n cert-manager --replicas=0
  2. 安裝 CRD:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERION}/cert-manager.crds.yaml
  3. 安裝自訂 cert-manager:
    helm install CERT_MANAGER_RELEASE_NAME apigee-cert-manager/ \
      --namespace APIGEE_NAMESPACE
  4. 安裝完成後,即可刪除先前安裝的 cert-manager。

使用自訂 cert-manager 安裝或升級 Apigee Hybrid

如要使用自訂 cert-manager 安裝或升級混合式設定,安裝或升級程序必須進行下列變更。

Apigee Hybrid 安裝異動

使用自訂 cert-cert 管理工具安裝 Apigee Hybrid 1.13 以上版本時,請在overrides.yaml檔案中進行下列變更,然後在步驟 10:使用 Helm 安裝 Apigee Hybrid中安裝 Apigee Hybrid 元件。

更新 overrides.yaml 檔案,通知運算子 cert-manager 相關資源的位置,並允許運算子使用自訂 cert-manager 的簽發者。

certManager:
  namespace: APIGEE_NAMESPACE

ao:
  certManagerCAIssuerEnabled: true

Apigee hybrid 升級程序異動

使用自訂 cert-cert 管理工具將 Apigee Hybrid 升級至 1.13 以上版本時,請在完成「準備升級 Helm chart」一文中的步驟後,並先執行「安裝 Apigee Hybrid Helm chart」一文中的步驟,進行下列變更:

  1. 在 overrides.yaml 檔案中進行下列變更,通知運算子 cert-manager 相關資源的位置,並讓運算子使用自訂 cert-manager 的 ClusterIssuer。
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. 將現有的 apigee-ca 密鑰從 cert-manager 命名空間複製到 apigee 命名空間:
    kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    
  3. 編輯 apigee-ca.yaml 檔案,移除將命名空間識別為 cert-manager 的命名空間參數。
  4. 使用 kubectl apply 將 apigee-ca 密鑰套用至 apigee 命名空間:
    kubectl -n APIGEE_NAMESPACE apply -f apigee-ca.yaml

復原 Apigee Hybrid 升級

如需復原至舊版 Apigee Hybrid,請按照「復原至舊版」一文中的操作說明進行。

復原及解除安裝自訂 cert-manager

復原自訂 cert-manager

如要復原自訂 cert-manager,請按照下列步驟操作:

  1. 使用下列指令解除安裝 Helm 版本:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. 使用偏好的方法安裝一般 (非自訂) cert-manager。請務必使用對應的 CRD 版本。 舉例來說,如果您使用 kubectl 方法安裝 cert-manager,系統會將 CRD 更新為相應版本,因為酬載也會包含 CRD。請確認您使用的安裝方法包含 CRD。

解除安裝自訂 cert-manager

如要解除安裝自訂 cert-manager,請按照下列步驟操作:

  1. 使用下列指令解除安裝 Helm 版本:
    helm uninstall CERT_MANAGER_RELEASE_NAME
  2. 使用下列指令刪除 CRD:
    export CERT_MANAGER_VERSION=v1.14.5
    kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.crds.yaml

基礎架構即程式碼 (overrides.yaml)

Helm 圖表支援視需要覆寫,讓您在安裝或升級程序中視需要使用覆寫檔案。 為避免混淆,建議使用 cert-manager-overrides.yaml 等檔案名稱。

如要查看所有支援的 cert-manager 覆寫設定,請參閱 cert-manager 說明文件。

常見的 cert-manager 設定

以下範例說明如何在 Apigee Hybrid 中完成一些常見的 cert-manager 設定。

覆寫圖片

如果您需要私下代管圖片,可以按照下列範例覆寫圖片和 imagepullsecrets。

# cert-manager-overrides.yaml

global:
  # Reference to one or more secrets to be used when pulling images
  # ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
  #
  # For example:
  #  imagePullSecrets:
  #    - name: "image-pull-secret"
  imagePullSecrets: []


image:
  # Override the image tag to deploy by setting this variable.
  # If no value is set, the chart's appVersion will be used.
  repository: quay.io/jetstack/cert-manager-controller

webhook:
  image:
    # without a tag
    repository: quay.io/jetstack/cert-manager-webhook

cainjector:
  image:
    # without a tag
    repository: quay.io/jetstack/cert-manager-cainjector

startupapicheck:
  image:
    # without a tag
    repository: quay.io/jetstack/cert-manager-startupapicheck

NodeSelector 和節點相依性

在 Apigee Hybrid 安裝作業中,您必須為 Cassandra Pod 和其他 Pod 使用不同的節點。如要在與 Cassandra 無關的節點集區中執行 cert-manager,可以使用節點親和性:

# A Kubernetes Affinity, if required; see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#affinity-v1-core
#
# For example:
#   affinity:
#     nodeAffinity:
#      requiredDuringSchedulingIgnoredDuringExecution:
#        nodeSelectorTerms:
#        - matchExpressions:
#          - key: cloud.google.com/gke-nodepool
#            operator: In
#            values:
#            - master
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: KEY
          operator: In
          values:
          - value for the non-C* node pool

webhook:
  affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: KEY
          operator: In
          values:
          - value for the non-C* node pool

cainjector:
  affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: KEY
          operator: In
          values:
          - value for the non C* node pool

容許條件

您也可以提供容許度,如下列範例所示:

# A list of Kubernetes Tolerations, if required; see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#toleration-v1-core
#
# For example:
#   tolerations:
#   - key: node.kubernetes.io/not-ready
#     operator: Equal
#     value: master
#     effect: NoSchedule
tolerations: []

webhook:
  tolerations: []

cainjector:
  tolerations: []

startupapicheck:
  tolerations: []