16.4. 예: 보안 클라이언트 액세스 설정
다음 절차에서는 외부 OpenShift 또는 다른 OpenShift 클러스터에서 Kafka 클러스터에 대한 클라이언트 액세스를 구성하는 방법을 보여줍니다. 이는 두 부분으로 나뉩니다.
- Kafka 브로커 보안
- Kafka에 대한 사용자 액세스 보안
리소스 구성
Kafka 클러스터에 대한 클라이언트 액세스는 다음 구성으로 보호됩니다.
-
외부 리스너는
Kafka리소스에서 TLS 암호화 및 mTLS(mTLS) 인증과간단한인증으로 구성됩니다. -
mTLS 인증을 사용하여 클라이언트에 대해
KafkaUser가 생성되며간단한권한 부여를 위해 ACL(액세스 제어 목록)이 정의됩니다.
필요한 인증을 지원하는 하나 이상의 리스너가 KafkaUser 에 대해 구성해야 합니다.
리스너는 상호 TLS,SCRAM-SHA-512 또는 OAuth 인증에 대해 구성할 수 있습니다. mTLS는 항상 암호화를 사용하지만 SCRAM-SHA-512 및 OAuth 2.0 인증을 사용할 때 사용하는 것이 좋습니다.
Kafka의 권한 부여 옵션에는 간단한,OAuth,OPA 또는 사용자 지정 이 있습니다. 활성화하면 활성화된 모든 리스너에 권한 부여가 적용됩니다.
Kafka와 클라이언트 간의 호환성을 보장하기 위해 다음 인증 및 권한 부여 메커니즘의 구성이 조정되어야 합니다.
-
유형: tls및type: scram-sha-512인증 유형인Kafka.spec.kafka.listeners[*].authentication은KafkaUser.spec.authentication과 일치해야 합니다. -
유형: 간단한인증의 경우Kafka.spec.kafka.authorization은KafkaUser.spec.authorization과 일치해야 합니다.
예를 들어 사용자의 mTLS 인증은 Kafka 구성에서도 활성화된 경우에만 가능합니다.
자동화 및 인증서 관리
Apache Kafka Operator의 스트림은 구성 프로세스를 자동화하고 인증에 필요한 인증서를 생성합니다.
- Cluster Operator는 리스너를 생성하고 Kafka 클러스터 내에서 인증을 활성화하기 위해 클러스터 및 클라이언트 CA(인증 기관) 인증서를 설정합니다.
- User Operator는 선택한 인증 유형에 따라 클라이언트 및 클라이언트 인증에 사용되는 보안 인증 정보를 나타내는 사용자를 생성합니다.
클라이언트 구성에 인증서를 추가합니다.
이 절차에서는 Cluster Operator가 생성한 CA 인증서가 사용됩니다. 또는 고유한 사용자 정의 CA 인증서를 설치하여 대체할 수 있습니다. 외부 CA에서 관리하는 Kafka 리스너 인증서를 사용하도록 리스너를 구성할 수도 있습니다.
인증서는 PEM(.crt) 및 PKCS #12(.p12) 형식으로 사용할 수 있습니다. 이 절차에서는 PEM 인증서를 사용합니다. X.509 인증서 형식을 지원하는 클라이언트에 PEM 인증서를 사용합니다.
동일한 OpenShift 클러스터 및 네임스페이스의 내부 클라이언트의 경우 Pod 사양에 클러스터 CA 인증서를 마운트할 수 있습니다. 자세한 내용은 클러스터 CA를 신뢰하도록 내부 클라이언트 구성을 참조하십시오.
사전 요구 사항
- Kafka 클러스터는 OpenShift 클러스터 외부에서 실행 중인 클라이언트에서 연결할 수 있습니다.
- Cluster Operator 및 User Operator가 클러스터에서 실행 중입니다.
16.4.1. Kafka 브로커 보안 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 리스너를 사용하여 Kafka 클러스터를 구성합니다.
- 리스너를 통해 Kafka 브로커에 액세스하는 데 필요한 인증을 정의합니다.
Kafka 브로커에서 인증을 활성화합니다.
리스너 구성의 예
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster annotations: strimzi.io/node-pools: enabled strimzi.io/kraft: enabled namespace: myproject spec: kafka: # ... listeners:1 - name: external12 port: 90943 type: <listener_type>4 tls: true5 authentication: type: tls6 configuration:7 #... authorization:8 type: simple superUsers: - super-user-name9 # ...- 1
- 외부 리스너를 활성화하는 구성 옵션은 일반 Kafka 리스너 스키마 참조에 설명되어 있습니다.
- 2
- 리스너를 식별하는 이름입니다. Kafka 클러스터 내에서 고유해야 합니다.
- 3
- Kafka 내의 리스너에서 사용하는 포트 번호입니다. 포트 번호는 지정된 Kafka 클러스터 내에서 고유해야 합니다. 허용되는 포트 번호는 9092 이상이며, 이는 Prometheus 및 Cryostat에 이미 사용되는 포트 9404 및 9999를 제외하고 사용합니다. 리스너 유형에 따라 Kafka 클라이언트를 연결하는 포트 번호와 포트 번호가 동일하지 않을 수 있습니다.
- 4
경로(OpenShift만),로드 밸런서,nodeport또는ingress(Kubernetes만 해당)로 지정된 외부 리스너 유형입니다. 내부 리스너는internal또는cluster-ip로 지정됩니다.- 5
- 필수 항목입니다. 리스너의 TLS 암호화입니다.
경로및수신유형 리스너의 경우true로 설정해야 합니다. mTLS 인증의 경우인증속성도 사용합니다. - 6
- 리스너의 클라이언트 인증 메커니즘. mTLS를 사용한 서버 및 클라이언트 인증의 경우
tls: true및authentication.type: tls를 지정합니다. - 7
- (선택 사항) 리스너 유형의 요구 사항에 따라 추가 리스너 구성 을 지정할 수 있습니다.
- 8
StandardAuthorizerKafka 플러그인을 사용하는간단한인증으로 지정됩니다.- 9
- (선택 사항) 슈퍼 사용자는 ACL에 정의된 액세스 제한에 관계없이 모든 브로커에 액세스할 수 있습니다.주의
OpenShift 경로 주소는 Kafka 클러스터 이름, 리스너 이름, 프로젝트 이름, 라우터 도메인으로 구성됩니다. 예를 들어
my-cluster-kafka-external1-bootstrap-my-project.domain.com(<cluster_name>-kafka-<listener_name>-bootstrap-<namespace>.<domain>). 각 DNS 레이블(일본 기간 간)은 63자를 초과해서는 안 되며 주소의 총 길이는 255자를 초과해서는 안 됩니다 “.”
Kafka리소스 구성에 변경 사항을 적용합니다.Kafka 클러스터는 mTLS 인증을 사용하여 Kafka 브로커 리스너로 구성됩니다.
각 Kafka 브로커 Pod에 대한 서비스가 생성됩니다.
Kafka 클러스터 연결에 대한 부트스트랩 주소 역할을 하는 서비스가 생성됩니다.
서비스는
nodeport리스너를 사용하여 Kafka 클러스터에 대한 외부 연결의 외부 부트스트랩 주소로 도 생성됩니다.kafka 브로커의 ID를 확인하는 클러스터 CA 인증서도 시크릿 <
cluster_name>-cluster-ca-cert에 생성됩니다.참고외부 리스너를 사용하는 동안 Kafka 클러스터를 확장하는 경우 모든 Kafka 브로커의 롤링 업데이트가 트리거될 수 있습니다. 이는 구성에 따라 다릅니다.
Kafka리소스의 상태에서 Kafka 클러스터에 액세스하는 데 사용할 수 있는 부트스트랩 주소를 검색합니다.oc get kafka <kafka_cluster_name> -o=jsonpath='{.status.listeners[?(@.name=="<listener_name>")].bootstrapServers}{"\n"}'예를 들면 다음과 같습니다.
oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.name=="external")].bootstrapServers}{"\n"}'Kafka 클라이언트의 부트스트랩 주소를 사용하여 Kafka 클러스터에 연결합니다.