16장. TLS 인증서 관리
AMQ Streams는 Kafka와 AMQ Streams 구성 요소 간의 암호화된 통신을 위해 TLS를 지원합니다.
AMQ Streams는 KRaft 모드에서 Kafka를 사용할 때 다음 구성 요소 간 통신을 위해 암호화된 TLS 연결을 설정합니다.
- Kafka 브로커
- Kafka 컨트롤러
- Kafka 브로커 및 컨트롤러
- AMQ Streams Operator 및 Kafka
- 크루즈 컨트롤 및 Kafka 브로커
- Kafka Exporter 및 Kafka 브로커
클라이언트와 Kafka 브로커 간의 연결은 TLS 암호화 통신을 사용하도록 구성해야 하는 리스너를 사용합니다. Kafka 사용자 정의 리소스에서 이러한 리스너를 구성하고 각 리스너 이름과 포트 번호는 클러스터 내에서 고유해야 합니다. Kafka 브로커와 Kafka 클라이언트 간의 통신은 리스너에 대해 tls 속성이 구성된 방법에 따라 암호화됩니다. 자세한 내용은 14장. Kafka 클러스터에 대한 클라이언트 액세스 설정의 내용을 참조하십시오.
다음 다이어그램에서는 보안 통신을 위한 연결을 보여줍니다.
그림 16.1. TLS 암호화로 보안된 Kraft 기반 Kafka 통신
다이어그램에 표시된 포트는 다음과 같이 사용됩니다.
- 컨트롤 플레인 리스너 (9090)
- 포트 9090의 내부 컨트롤 플레인 리스너는 Kafka 컨트롤러와 브로커-투-컨트롤러 통신 간의 상호 통신이 용이합니다. 또한 Cluster Operator는 리스너를 통해 컨트롤러와 통신합니다. 이 리스너는 Kafka 클라이언트에서 액세스할 수 없습니다.
- 복제 리스너(9091)
- AMQ Streams Operator, Cruise Control 및 Kafka Exporter의 브로커 간 데이터 복제와 포트 9091에서 복제 리스너를 사용합니다. 이 리스너는 Kafka 클라이언트에서 액세스할 수 없습니다.
- 클라이언트 연결에 대한 리스너(9092 이상)
- TLS 암호화 통신( listener의 구성을 통해)의 경우 내부 및 외부 클라이언트가 Kafka 브로커에 연결됩니다. 외부 클라이언트(생성자 및 소비자)는 공개된 리스너 포트를 통해 Kafka 브로커에 연결합니다.
브로커에 대한 클라이언트 액세스를 위해 리스너를 구성할 때 포트 9092 이상(9093, 9094 등)을 사용할 수 있지만 몇 가지 예외가 있습니다. 리스너는 인터브로커 통신(9090 및 9091), Prometheus 지표(9404) 및 Cryostat(Java Management Extensions) 모니터링(9999)을 위해 예약된 포트를 사용하도록 구성할 수 없습니다.
클러스터 관리를 위해 Zoo Cryostat를 사용하는 경우 Zoo Cryostat와 Kafka 브로커와 AMQ Streams Operator 간에 TLS 연결이 있습니다.
다음 다이어그램에서는 Zoo Cryostat를 사용할 때 안전한 통신을 위한 연결을 보여줍니다.
그림 16.2. TLS 암호화로 보안된 Kafka 및 Zoo Cryostat 통신
Zoo Cryostat 포트는 다음과 같이 사용됩니다.
- Zookeeper 포트 (2181)
- Kafka 브로커에 연결하기 위한 Zookeeper 포트입니다. 또한 Cluster Operator는 이 포트를 통해 Zoo Cryostat와 통신합니다.
- Zookeeper internodal 통신 포트 (2888)
- Zoo Cryostat 노드 간의 상호 통신을 위한 Zookeeper 포트입니다.
- Zookeeper 리더 선택 포트 (3888)
- Zoo Cryostat 클러스터의 Zoo Cryostat 노드 중에서 리더 선택을 위한 Zookeeper 포트입니다.
16.1. 내부 클러스터 CA 및 클라이언트 CA 링크 복사링크가 클립보드에 복사되었습니다!
암호화를 지원하기 위해 각 AMQ Streams 구성 요소에는 자체 개인 키와 공개 키 인증서가 필요합니다. 모든 구성 요소 인증서는 클러스터 CA라는 내부 CA(인증 기관)에서 서명합니다.
CA(인증 기관) 인증서는 구성 요소 및 클라이언트의 ID를 확인하기 위해 Cluster Operator에서 생성됩니다.
마찬가지로 mTLS를 사용하여 AMQ Streams에 연결하는 각 Kafka 클라이언트 애플리케이션은 개인 키와 인증서를 사용해야 합니다. 클라이언트 CA라는 두 번째 내부 CA는 Kafka 클라이언트 의 인증서에 서명하는 데 사용됩니다.
클러스터 CA 및 클라이언트 CA에는 모두 자체 서명된 공개 키 인증서가 있습니다.
Kafka 브로커는 클러스터 CA 또는 클라이언트 CA에서 서명한 인증서를 신뢰하도록 구성됩니다. 클라이언트가 연결할 필요가 없는 구성 요소(예: Zoo Cryostat)는 클러스터 CA에서 서명한 신뢰 인증서만 사용합니다. 외부 리스너에 대한 TLS 암호화가 비활성화되지 않는 한 클라이언트 애플리케이션은 클러스터 CA에서 서명한 인증서를 신뢰해야 합니다. 이는 mTLS 인증을 수행하는 클라이언트 애플리케이션에도 적용됩니다.
기본적으로 AMQ Streams는 클러스터 CA 또는 클라이언트 CA에서 발급한 CA 인증서를 자동으로 생성하고 갱신합니다. Kafka.spec.clusterCa 및 Kafka.spec.clientsCa 속성을 사용하여 이러한 CA 인증서의 관리를 구성할 수 있습니다.
Cluster Operator에서 생성한 CA를 사용하지 않으려면 자체 클러스터 및 클라이언트 CA 인증서를 설치할 수 있습니다. 제공하는 인증서는 Cluster Operator에 의해 갱신되지 않습니다.