16.6. 자체 CA 인증서 및 개인 키 사용


Cluster Operator에서 생성한 기본값을 사용하는 대신 자체 CA 인증서 및 개인 키를 설치하고 사용합니다. 클러스터 및 클라이언트 CA 인증서 및 개인 키를 교체할 수 있습니다.

다음과 같은 방법으로 자체 CA 인증서 및 개인 키를 사용하여 전환할 수 있습니다.

  • Kafka 클러스터를 배포하기 전에 자체 CA 인증서 및 개인 키 설치
  • Kafka 클러스터를 배포한 후 기본 CA 인증서 및 개인 키를 고유한 인증서로 교체

Kafka 클러스터를 배포한 후 기본 CA 인증서 및 개인 키를 교체하는 단계는 자체 CA 인증서 및 개인 키를 갱신하는 데 사용되는 것과 동일합니다.

자체 인증서를 사용하는 경우 자동으로 갱신되지 않습니다. 만료되기 전에 CA 인증서 및 개인 키를 갱신해야 합니다.

갱신 옵션:

  • CA 인증서만 갱신
  • CA 인증서 및 개인 키 갱신(또는 기본값 교체)

16.6.1. 자체 CA 인증서 및 개인 키 설치

Cluster Operator에서 생성한 클러스터 및 클라이언트 CA 인증서 및 개인 키를 사용하는 대신 자체 CA 인증서 및 개인 키를 설치합니다.

기본적으로 AMQ Streams는 자동으로 갱신되는 다음 클러스터 CA 및 클라이언트 CA 시크릿을 사용합니다.

  • 클러스터 CA 시크릿

    • <cluster_name>-cluster-ca
    • <cluster_name>-cluster-ca-cert
  • 클라이언트 CA 시크릿

    • <cluster_name>-clients-ca
    • <cluster_name>-clients-ca-cert

자체 인증서를 설치하려면 동일한 이름을 사용합니다.

사전 요구 사항

  • Cluster Operator가 실행 중입니다.
  • Kafka 클러스터는 아직 배포되지 않았습니다.

    Kafka 클러스터를 이미 배포한 경우 기본 CA 인증서를 자체 인증서로 교체할 수 있습니다.

  • 클러스터 CA 또는 클라이언트 CA의 PEM 형식의 고유한 X.509 인증서 및 키입니다.

    • 루트 CA가 아닌 클러스터 또는 클라이언트 CA를 사용하려면 전체 체인을 인증서 파일에 포함해야 합니다. 체인은 다음 순서로 설정되어야 합니다.

      1. 클러스터 또는 클라이언트 CA
      2. 하나 이상의 중간 CA
      3. 루트 CA
    • 체인의 모든 CA는 X509v3 기본 제약 조건 확장을 사용하여 구성해야 합니다. 기본 제한 조건은 인증서 체인의 경로 길이를 제한합니다.
  • 인증서를 변환하는 OpenSSL TLS 관리 툴입니다.

사전 준비 사항

Cluster Operator는 PEM(Privacy Enhanced Mail) 및 PKCS #12(Public-Key Cryptography Standards) 형식으로 키와 인증서를 생성합니다. 두 형식 중 하나로 자체 인증서를 추가할 수 있습니다.

일부 애플리케이션은 PEM 인증서를 사용할 수 없으며 PKCS #12 인증서만 지원합니다. PKCS #12 형식의 클러스터 인증서가 없는 경우 OpenSSL TLS 관리 툴을 사용하여 ca.crt 파일에서 하나를 생성합니다.

certificate generation 명령 예

openssl pkcs12 -export -in ca.crt -nokeys -out ca.p12 -password pass:<P12_password> -caname ca.crt

<P12_password>를 고유한 암호로 바꿉니다.

프로세스

  1. CA 인증서가 포함된 새 보안을 생성합니다.

    PEM 형식의 인증서가 있는 클라이언트 보안 생성

    oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crt

    PEM 및 PKCS #12 형식의 인증서로 클러스터 시크릿 생성

    oc create secret generic <cluster_name>-cluster-ca-cert \
      --from-file=ca.crt=ca.crt \
      --from-file=ca.p12=ca.p12 \
      --from-literal=ca.password=P12-PASSWORD

    <cluster_name>을 Kafka 클러스터 이름으로 바꿉니다.

  2. 개인 키가 포함된 새 보안을 생성합니다.

    oc create secret generic <ca_key_secret> --from-file=ca.key=ca.key
  3. 보안에 레이블을 지정합니다.

    oc label secret <ca_certificate_secret> strimzi.io/kind=Kafka strimzi.io/cluster="<cluster_name>"
    oc label secret <ca_key_secret> strimzi.io/kind=Kafka strimzi.io/cluster="<cluster_name>"
    • strimzi.io/kind=Kafka 레이블은 Kafka 사용자 정의 리소스를 식별합니다.
    • strimzi.io/cluster="<cluster_name>" 레이블은 Kafka 클러스터를 식별합니다.
  4. 보안 주석

    oc annotate secret <ca_certificate_secret> strimzi.io/ca-cert-generation="<ca_certificate_generation>"
    oc annotate secret <ca_key_secret> strimzi.io/ca-key-generation="<ca_key_generation>"
    • 주석 strimzi.io/ca-cert-generation="<ca_certificate_generation>" 은 새 CA 인증서 생성을 정의합니다.
    • 주석 strimzi.io/ca-key-generation="<ca_key_generation>" 은 새 CA 키 생성을 정의합니다.

      0(zero)에서 자체 CA 인증서에 대한 증분 값(stimzi.io/ca-cert-generation=0)으로 시작합니다. 인증서를 갱신할 때 더 높은 증분 값을 설정합니다.

  5. 생성된 CA를 사용하지 않도록 Kafka.spec.clusterCa 또는 Kafka.spec.clientsCa 오브젝트를 구성하여 클러스터에 대한 Kafka 리소스를 생성합니다.

    사용자가 제공한 인증서를 사용하도록 클러스터 CA를 구성하는 조각 모음 Kafka 리소스의 예

    kind: Kafka
    version: kafka.strimzi.io/v1beta2
    spec:
      # ...
      clusterCa:
        generateCertificateAuthority: false

16.6.2. 자체 CA 인증서 갱신

자체 CA 인증서를 사용하는 경우 수동으로 업데이트해야 합니다. Cluster Operator는 자동으로 갱신되지 않습니다. 갱신 기간이 만료되기 전에 CA 인증서를 갱신합니다.

CA 인증서를 갱신하고 동일한 개인 키를 계속 사용하는 경우 이 절차의 단계를 수행합니다. 자체 CA 인증서 개인 키를 갱신하는 경우 16.6.3절. “CA 인증서 및 개인 키 갱신 또는 교체” 을 참조하십시오.

이 절차에서는 PEM 형식의 CA 인증서 갱신을 설명합니다.

사전 요구 사항

  • Cluster Operator가 실행 중입니다.
  • PEM 형식의 새 클러스터 또는 클라이언트 X.509 인증서가 있습니다.

프로세스

  1. CA 인증서의 시크릿 을 업데이트합니다.

    기존 보안을 편집하여 새 CA 인증서를 추가하고 인증서 생성 주석 값을 업데이트합니다.

    oc edit secret <ca_certificate_secret_name>

    < ca_certificate_secret_name >은 시크릿 의 이름입니다. 이 이름은 클러스터 CA 인증서의 경우 < kafka_cluster_name> -cluster-ca-cert 이고 클라이언트 CA 인증서에 대한 <kafka_cluster_name> -clients-ca-cert 입니다.

    다음 예제에서는 my-cluster 라는 Kafka 클러스터와 연결된 클러스터 CA 인증서의 보안을 보여줍니다.

    클러스터 CA 인증서에 대한 보안 구성의 예

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "0" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque

    1
    현재 base64로 인코딩된 CA 인증서
    2
    현재 CA 인증서 생성 주석 값
  2. 새 CA 인증서를 base64로 인코딩합니다.

    cat <path_to_new_certificate> | base64
  3. CA 인증서를 업데이트합니다.

    이전 단계에서 base64로 인코딩된 CA 인증서를 data 아래의 ca.crt 속성 값으로 복사합니다.

  4. CA 인증서 생성 주석의 값을 늘립니다.

    strimzi.io/ca-cert-generation 주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어 strimzi.io/ca-cert-generation=0strimzi.io/ca-cert-generation=1 으로 변경합니다. 보안에 주석이 없는 경우 값은 0 으로 처리되므로 값이 1 인 주석을 추가합니다.

    AMQ Streams에서 인증서를 생성하면 인증서 생성 주석이 Cluster Operator에 의해 자동으로 증가합니다. 자체 CA 인증서의 경우 더 높은 증분 값으로 주석을 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다. strimzi.io/ca-cert-generation 는 각 CA 인증서 갱신에 따라 증가해야 합니다.

  5. 새 CA 인증서 및 인증서 생성 주석 값을 사용하여 보안을 저장합니다.

    새 CA 인증서로 업데이트된 보안 구성의 예

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F... 
    1
    
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "1" 
    2
    
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque

    1
    새로운 base64로 인코딩된 CA 인증서
    2
    새 CA 인증서 생성 주석 값

다음 조정에서 Cluster Operator는 새 CA 인증서를 신뢰하기 위해 Zoo Cryostat, Kafka 및 기타 구성 요소의 롤링 업데이트를 수행합니다.

유지 관리 시간 창이 구성된 경우 Cluster Operator는 다음 유지 관리 기간 기간 내에 첫 번째 조정 시 Pod를 롤아웃합니다.

16.6.3. CA 인증서 및 개인 키 갱신 또는 교체

자체 CA 인증서 및 개인 키를 사용하는 경우 수동으로 갱신해야 합니다. Cluster Operator는 자동으로 갱신되지 않습니다. 갱신 기간이 만료되기 전에 CA 인증서를 갱신합니다. 동일한 절차를 사용하여 AMQ Streams Operator에서 생성한 CA 인증서 및 개인 키를 고유한 인증서로 교체할 수도 있습니다.

CA 인증서 및 개인 키를 갱신하거나 교체할 때 이 절차의 단계를 수행합니다. 자체 CA 인증서만 갱신하는 경우 16.6.2절. “자체 CA 인증서 갱신” 을 참조하십시오.

이 절차에서는 PEM 형식의 CA 인증서 및 개인 키 갱신을 설명합니다.

다음 단계를 수행하기 전에 새 CA 인증서의 CN(Common Name)이 현재 CA 인증서와 다른지 확인합니다. 예를 들어 Cluster Operator에서 인증서를 자동으로 갱신하면 v<version_number > 접미사가 추가되어 버전을 확인합니다. 갱신마다 다른 접미사를 추가하여 자체 CA 인증서로 동일한 작업을 수행합니다. 다른 키를 사용하여 새 CA 인증서를 생성하면 Secret 에 저장된 현재 CA 인증서가 유지됩니다.

사전 요구 사항

  • Cluster Operator가 실행 중입니다.
  • PEM 형식의 새 클러스터 또는 클라이언트 X.509 인증서 및 키가 있습니다.

프로세스

  1. Kafka 사용자 정의 리소스의 조정을 일시 중지합니다.

    1. OpenShift에서 사용자 정의 리소스에 주석을 달고 pause-reconciliation 주석을 true 로 설정합니다.

      oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"

      예를 들어 이름이 my-clusterKafka 사용자 정의 리소스의 경우 다음과 같습니다.

      oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"
    2. 사용자 정의 리소스의 상태 조건에 ReconciliationPaused: 변경 사항이 표시되는지 확인합니다.

      oc describe Kafka <name_of_custom_resource>

      유형 조건은 lastTransitionTime 에서 ReconciliationPaused 로 변경됩니다.

  2. Kafka 사용자 정의 리소스의 generateCertificateAuthority 속성 설정을 확인합니다.

    속성이 false 로 설정된 경우 Cluster Operator에 의해 CA 인증서가 생성되지 않습니다. 자체 인증서를 사용하는 경우 이 설정이 필요합니다.

  3. 필요한 경우 기존 Kafka 사용자 정의 리소스를 편집하고 generateCertificateAuthority 속성을 false 로 설정합니다.

    oc edit Kafka <name_of_custom_resource>

    다음 예제에서는 사용자에게 위임된 클러스터 및 클라이언트 CA 인증서 생성이 모두 있는 Kafka 사용자 정의 리소스를 보여줍니다.

    자체 CA 인증서를 사용하는 Kafka 구성의 예

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    # ...
    spec:
    # ...
      clusterCa:
        generateCertificateAuthority: false 
    1
    
      clientsCa:
        generateCertificateAuthority: false 
    2
    
    # ...

    1
    자체 클러스터 CA 사용
    2
    자체 클라이언트 CA 사용
  4. CA 인증서의 시크릿 을 업데이트합니다.

    1. 기존 보안을 편집하여 새 CA 인증서를 추가하고 인증서 생성 주석 값을 업데이트합니다.

      oc edit secret <ca_certificate_secret_name>

      <ca_certificate_secret_name>은 시크릿 의 이름입니다. 이 이름은 클러스터 CA 인증서의 경우 < kafka_cluster_name>-cluster-ca-cert 이고 클라이언트 CA 인증서에 대한 <kafka_cluster_name>-clients-ca-cert 입니다.

      다음 예제에서는 my-cluster 라는 Kafka 클러스터와 연결된 클러스터 CA 인증서의 보안을 보여줍니다.

      클러스터 CA 인증서에 대한 보안 구성의 예

      apiVersion: v1
      kind: Secret
      data:
        ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-cert-generation: "0" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca-cert
        #...
      type: Opaque

      1
      현재 base64로 인코딩된 CA 인증서
      2
      현재 CA 인증서 생성 주석 값
    2. 현재 CA 인증서의 이름을 변경하여 유지합니다.

      data 아래의 현재 ca.crt 속성의 이름을 ca-<date>.crt 로 변경합니다. 여기서 <date>는 YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ 형식의 인증서 만료 날짜입니다. 예: ca-2023-01-26T17-32-00Z.crt:. 현재 CA 인증서를 유지하기 위해 속성 값을 그대로 둡니다.

    3. 새 CA 인증서를 base64로 인코딩합니다.

      cat <path_to_new_certificate> | base64
    4. CA 인증서를 업데이트합니다.

      data 아래에 새 ca.crt 속성을 생성하고 이전 단계에서 base64로 인코딩된 CA 인증서를 ca.crt 속성 값으로 복사합니다.

    5. CA 인증서 생성 주석의 값을 늘립니다.

      strimzi.io/ca-cert-generation 주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어 strimzi.io/ca-cert-generation=0strimzi.io/ca-cert-generation=1 으로 변경합니다. 보안에 주석이 없는 경우 값은 0 으로 처리되므로 값이 1 인 주석을 추가합니다.

      AMQ Streams에서 인증서를 생성하면 인증서 생성 주석이 Cluster Operator에 의해 자동으로 증가합니다. 자체 CA 인증서의 경우 더 높은 증분 값으로 주석을 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다. strimzi.io/ca-cert-generation 는 각 CA 인증서 갱신에 따라 증가해야 합니다.

    6. 새 CA 인증서 및 인증서 생성 주석 값을 사용하여 보안을 저장합니다.

      새 CA 인증서로 업데이트된 보안 구성의 예

      apiVersion: v1
      kind: Secret
      data:
        ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F... 
      1
      
        ca-2023-01-26T17-32-00Z.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0F... 
      2
      
      metadata:
        annotations:
          strimzi.io/ca-cert-generation: "1" 
      3
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca-cert
        #...
      type: Opaque

      1
      새로운 base64로 인코딩된 CA 인증서
      2
      이전 base64로 인코딩된 CA 인증서
      3
      새 CA 인증서 생성 주석 값
  5. 새 CA 인증서에 서명하는 데 사용되는 CA 키의 시크릿 을 업데이트합니다.

    1. 기존 보안을 편집하여 새 CA 키를 추가하고 키 생성 주석 값을 업데이트합니다.

      oc edit secret <ca_key_name>

      <ca_key_name>은 CA 키의 이름입니다. 클러스터 CA 키의 경우 < kafka_cluster_name>-cluster-ca, 클라이언트 CA 키의 경우 < kafka_cluster_name>-clients-ca 입니다.

      다음 예제에서는 my-cluster 라는 Kafka 클러스터와 연결된 클러스터 CA 키의 시크릿을 보여줍니다.

      클러스터 CA 키의 시크릿 구성 예

      apiVersion: v1
      kind: Secret
      data:
        ca.key: SA1cKF1GFDzOIiPOIUQBHDNFGDFS... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-key-generation: "0" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca
        #...
      type: Opaque

      1
      현재 base64로 인코딩된 CA 키
      2
      현재 CA 키 생성 주석 값
    2. CA 키를 base64로 인코딩합니다.

      cat <path_to_new_key> | base64
    3. CA 키를 업데이트합니다.

      이전 단계에서 base64로 인코딩된 CA 키를 data 아래의 ca.key 속성 값으로 복사합니다.

    4. CA 키 생성 주석의 값을 늘립니다.

      strimzi.io/ca-key-generation 주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어 strimzi.io/ca-key-generation=0strimzi.io/ca-key-generation=1 으로 변경합니다. 보안에 주석이 없는 경우 0 으로 처리되므로 값이 1 인 주석을 추가합니다.

      AMQ Streams가 인증서를 생성하면 Cluster Operator에 의해 키 생성 주석이 자동으로 증가합니다. 자체 CA 인증서와 새 CA 키의 경우 주석을 더 높은 증분 값으로 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서 및 키를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다. strimzi.io/ca-key-generation 는 각 CA 인증서 갱신에 따라 증가해야 합니다.

    5. 새 CA 키 및 키 생성 주석 값을 사용하여 시크릿을 저장합니다.

      새 CA 키로 업데이트된 보안 구성의 예

      apiVersion: v1
      kind: Secret
      data:
        ca.key: AB0cKF1GFDzOIiPOIUQWERZJQ0F... 
      1
      
      metadata:
        annotations:
          strimzi.io/ca-key-generation: "1" 
      2
      
        labels:
          strimzi.io/cluster: my-cluster
          strimzi.io/kind: Kafka
        name: my-cluster-cluster-ca
        #...
      type: Opaque

      1
      새로운 base64로 인코딩된 CA 키
      2
      새 CA 키 생성 주석 값
  6. 일시 중지에서 다시 시작합니다.

    Kafka 사용자 정의 리소스 조정을 다시 시작하려면 pause-reconciliation 주석을 false 로 설정합니다.

    oc annotate --overwrite Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="false"

    pause-reconciliation 주석을 제거하여 동일한 작업을 수행할 수도 있습니다.

    oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation-

    다음 조정에서 Cluster Operator는 새 CA 인증서를 신뢰하기 위해 Zoo Cryostat, Kafka 및 기타 구성 요소의 롤링 업데이트를 수행합니다. 롤링 업데이트가 완료되면 Cluster Operator가 새 CA 키로 서명한 새 서버 인증서를 생성하기 위해 새 업데이트를 시작합니다.

    유지 관리 시간 창이 구성된 경우 Cluster Operator는 다음 유지 관리 기간 기간 내에 첫 번째 조정 시 Pod를 롤아웃합니다.

  7. 롤링 업데이트가 새 CA 인증서로 이동할 때까지 기다립니다.
  8. 보안 구성에서 오래된 인증서를 제거하여 클러스터가 더 이상 신뢰하지 않도록 합니다.

    oc edit secret <ca_certificate_secret_name>

    이전 인증서가 제거된 보안 구성의 예

    apiVersion: v1
    kind: Secret
    data:
      ca.crt: GCa6LS3RTHeKFiFDGBOUDYFAZ0F...
    metadata:
      annotations:
        strimzi.io/ca-cert-generation: "1"
      labels:
        strimzi.io/cluster: my-cluster
        strimzi.io/kind: Kafka
      name: my-cluster-cluster-ca-cert
      #...
    type: Opaque

  9. 클러스터의 수동 롤링 업데이트를 시작하여 시크릿 구성에 대한 변경 사항을 가져옵니다.

    30.2절. “주석을 사용하여 Kafka 및 기타 피연산자의 롤링 업데이트 시작”을 참조하십시오.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동