커스텀 cert-manager 사용

비공개 GA: Apigee Hybrid에 커스텀 cert-manager 사용

이 기능은 Apigee Hybrid 버전 1.13용 비공개 GA로 제공됩니다.

이 기능을 사용하면 제한적 권한을 사용하는 수정된 역할 기반 액세스 제어(RBAC) 관련 구성으로 Apigee Hybrid용 커스텀 cert-manager를 설치할 수 있습니다.

시작하기 전에

설치 단계로 진행하기 전 다음 명령어를 사용하여 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 새로 설치

Apigee Hybrid에 사용할 커스텀 cert-manager를 새로 설치하려면 다음 단계를 수행합니다.

  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. 원활한 마이그레이션을 위해 복제본 수가 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를 설치하거나 업그레이드하려면 설치 또는 업그레이드 절차를 다음과 같이 변경해야 합니다.

Apigee Hybrid 설치 변경사항

커스텀 cert-manager를 사용하여 Apigee Hybrid v1.13 이상을 설치하는 경우 10단계: Helm을 사용하여 Apigee Hybrid 설치에서 Apigee Hybrid 구성요소를 설치하기 전에 overrides.yaml 파일을 다음과 같이 변경합니다.

overrides.yaml 파일을 업데이트하여 운영자에게 cert-manager 관련 리소스를 찾을 위치를 알리고 운영자가 커스텀 cert-manager의 발급기관을 사용할 수 있도록 합니다.

certManager:
  namespace: APIGEE_NAMESPACE

ao:
  certManagerCAIssuerEnabled: true

Apigee Hybrid 업그레이드 프로세스 변경사항

커스텀 cert-cert 관리자를 사용하여 Apigee Hybrid를 v1.13 이상으로 업그레이드하는 경우 Helm 차트 업그레이드 준비의 단계 이후Apigee Hybrid Helm 차트 설치 전에 다음을 변경합니다.

  1. overrides.yaml 파일을 다음과 같이 변경하여 운영자에게 cert-manager 관련 리소스를 찾을 위치를 알리고 운영자가 커스텀 cert-manager의 ClusterIssuer를 사용할 수 있도록 합니다.
    certManager:
      namespace: APIGEE_NAMESPACE
    
    ao:
      certManagerCAIssuerEnabled: true
    
  2. cert-manager 네임스페이스에서 apigee 네임스페이스로 기존 apigee-ca 보안 비밀을 복사합니다.
    kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
    
  3. apigee-ca.yaml 파일을 수정하여 네임스페이스를 cert-manager로 식별하는 네임스페이스 파라미터를 삭제합니다.
  4. kubectl apply를 사용하여 Apigee 네임스페이스에 apigee-ca 보안 비밀을 적용합니다.
    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 포드와 다른 포드에 별도의 노드를 사용해야 합니다. 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

톨러레이션(toleration)

다음 예시와 같이 톨러레이션(toleration)을 제공할 수도 있습니다.

# 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: []