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를 사용하려면 전체 체인을 인증서 파일에 포함해야 합니다. 체인은 다음 순서로 설정되어야 합니다.
- 클러스터 또는 클라이언트 CA
- 하나 이상의 중간 CA
- 루트 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>를 고유한 암호로 바꿉니다.
프로세스
CA 인증서가 포함된 새 보안을 생성합니다.
PEM 형식의 인증서가 있는 클라이언트 보안 생성
oc create secret generic <cluster_name>-clients-ca-cert --from-file=ca.crt=ca.crtPEM 및 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 클러스터 이름으로 바꿉니다.
개인 키가 포함된 새 보안을 생성합니다.
oc create secret generic <ca_key_secret> --from-file=ca.key=ca.key보안에 레이블을 지정합니다.
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 클러스터를 식별합니다.
-
보안 주석
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 인증서에 대한 증분 값(sti
mzi.io/ca-cert-generation=0)으로 시작합니다. 인증서를 갱신할 때 더 높은 증분 값을 설정합니다.
-
주석
생성된 CA를 사용하지 않도록
또는Kafka.spec.clusterCaKafka.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 인증서가 있습니다.
프로세스
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새 CA 인증서를 base64로 인코딩합니다.
cat <path_to_new_certificate> | base64CA 인증서를 업데이트합니다.
이전 단계에서 base64로 인코딩된 CA 인증서를
data아래의ca.crt속성 값으로 복사합니다.CA 인증서 생성 주석의 값을 늘립니다.
strimzi.io/ca-cert-generation주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어strimzi.io/ca-cert-generation=0을strimzi.io/ca-cert-generation=1으로 변경합니다. 보안에 주석이 없는 경우 값은0으로 처리되므로 값이1인 주석을 추가합니다.AMQ Streams에서 인증서를 생성하면 인증서 생성 주석이 Cluster Operator에 의해 자동으로 증가합니다. 자체 CA 인증서의 경우 더 높은 증분 값으로 주석을 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다.
strimzi.io/ca-cert-generation는 각 CA 인증서 갱신에 따라 증가해야 합니다.새 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
다음 조정에서 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 인증서 및 키가 있습니다.
프로세스
Kafka사용자 정의 리소스의 조정을 일시 중지합니다.OpenShift에서 사용자 정의 리소스에 주석을 달고
pause-reconciliation주석을true로 설정합니다.oc annotate Kafka <name_of_custom_resource> strimzi.io/pause-reconciliation="true"예를 들어 이름이
my-cluster인Kafka사용자 정의 리소스의 경우 다음과 같습니다.oc annotate Kafka my-cluster strimzi.io/pause-reconciliation="true"사용자 정의 리소스의 상태 조건에
ReconciliationPaused: 변경 사항이 표시되는지 확인합니다.oc describe Kafka <name_of_custom_resource>유형조건은lastTransitionTime에서ReconciliationPaused로 변경됩니다.
Kafka사용자 정의 리소스의generateCertificateAuthority속성 설정을 확인합니다.속성이
false로 설정된 경우 Cluster Operator에 의해 CA 인증서가 생성되지 않습니다. 자체 인증서를 사용하는 경우 이 설정이 필요합니다.필요한 경우 기존
Kafka사용자 정의 리소스를 편집하고generateCertificateAuthority속성을false로 설정합니다.oc edit Kafka <name_of_custom_resource>다음 예제에서는 사용자에게 위임된 클러스터 및 클라이언트 CA 인증서 생성이 모두 있는
Kafka사용자 정의 리소스를 보여줍니다.자체 CA 인증서를 사용하는
Kafka구성의 예apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka # ... spec: # ... clusterCa: generateCertificateAuthority: false1 clientsCa: generateCertificateAuthority: false2 # ...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현재 CA 인증서의 이름을 변경하여 유지합니다.
data아래의 현재ca.crt속성의 이름을ca-<date>.crt로 변경합니다. 여기서 <date>는 YEAR-MONTH-DAYTHOUR-MINUTE-SECONDZ 형식의 인증서 만료 날짜입니다. 예:ca-2023-01-26T17-32-00Z.crt:. 현재 CA 인증서를 유지하기 위해 속성 값을 그대로 둡니다.새 CA 인증서를 base64로 인코딩합니다.
cat <path_to_new_certificate> | base64CA 인증서를 업데이트합니다.
data아래에 새ca.crt속성을 생성하고 이전 단계에서 base64로 인코딩된 CA 인증서를ca.crt속성 값으로 복사합니다.CA 인증서 생성 주석의 값을 늘립니다.
strimzi.io/ca-cert-generation주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어strimzi.io/ca-cert-generation=0을strimzi.io/ca-cert-generation=1으로 변경합니다. 보안에 주석이 없는 경우 값은0으로 처리되므로 값이1인 주석을 추가합니다.AMQ Streams에서 인증서를 생성하면 인증서 생성 주석이 Cluster Operator에 의해 자동으로 증가합니다. 자체 CA 인증서의 경우 더 높은 증분 값으로 주석을 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다.
strimzi.io/ca-cert-generation는 각 CA 인증서 갱신에 따라 증가해야 합니다.새 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
새 CA 인증서에 서명하는 데 사용되는 CA 키의
시크릿을 업데이트합니다.기존 보안을 편집하여 새 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: OpaqueCA 키를 base64로 인코딩합니다.
cat <path_to_new_key> | base64CA 키를 업데이트합니다.
이전 단계에서 base64로 인코딩된 CA 키를
data아래의ca.key속성 값으로 복사합니다.CA 키 생성 주석의 값을 늘립니다.
strimzi.io/ca-key-generation주석을 더 높은 증분 값으로 업데이트합니다. 예를 들어strimzi.io/ca-key-generation=0을strimzi.io/ca-key-generation=1으로 변경합니다. 보안에 주석이 없는 경우0으로 처리되므로 값이1인 주석을 추가합니다.AMQ Streams가 인증서를 생성하면 Cluster Operator에 의해 키 생성 주석이 자동으로 증가합니다. 자체 CA 인증서와 새 CA 키의 경우 주석을 더 높은 증분 값으로 설정합니다. 이 주석에는 Cluster Operator가 Pod를 롤아웃하고 인증서 및 키를 업데이트할 수 있도록 현재 보안의 값보다 높은 값이 필요합니다.
strimzi.io/ca-key-generation는 각 CA 인증서 갱신에 따라 증가해야 합니다.새 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
일시 중지에서 다시 시작합니다.
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를 롤아웃합니다.
- 롤링 업데이트가 새 CA 인증서로 이동할 때까지 기다립니다.
보안 구성에서 오래된 인증서를 제거하여 클러스터가 더 이상 신뢰하지 않도록 합니다.
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클러스터의 수동 롤링 업데이트를 시작하여 시크릿 구성에 대한 변경 사항을 가져옵니다.