3장. 레코드 암호화 필터를 사용하여 Apache Kafka 프록시용 스트림 배포
Apache Kafka 프록시용 스트림은 Streams for Apache Kafka에서 관리하는 Kafka 클러스터와 원활하게 통합되도록 설계되었습니다. 또한 배포 또는 프로토콜 버전에 관계없이 모든 유형의 Kafka 인스턴스와의 호환성을 제공합니다. 배포에 공용 클라우드 또는 프라이빗 클라우드가 포함되었는지, 로컬 개발 환경을 설정하는 경우 이 가이드의 지침을 모든 경우에 적용할 수 있습니다.
이 절차에서는 OpenShift의 Apache Kafka용 Streams에서 관리하는 Kafka 인스턴스와 함께 사용하기 위해 Record Encryption 필터와 함께 배포됩니다.
Apache Kafka의 스트림은 예제 /proxy/record-encryption 폴더의 Kafka 클러스터에 연결하는 데 Apache Kafka Proxy에 필요한 구성을 사용하여 설치 아티팩트 예제 를 제공합니다.
예제 구성 파일을 사용하여 다음 유형의 리스너로 프록시를 배포 및 노출합니다.
-
OpenShift 클러스터 내에서 프록시를 노출하기 위해broker
ClusterIP서비스를 사용하는cluster-ip유형 리스너 -
OpenShift 클러스터 외부에 프록시를 노출하기
위해broker 로드 밸런서서비스를 사용하는 LoadBalancer 유형 리스너
각 옵션에 대해 다음 파일이 제공됩니다.
-
kustomization.yaml은 프록시를 배포하기 위한 Kubernetes 사용자 지정을 지정합니다. -
proxy-config.yaml은 프록시에 대한ConfigMap리소스 구성을 지정합니다. -
proxy-service.yaml은 프록시 서비스에 대한서비스리소스 구성을 지정합니다.
ConfigMap 리소스는 가상 클러스터 및 필터를 설정하기 위한 구성을 제공합니다. 가상 클러스터는 프록시와 함께 사용하려는 Kafka 클러스터를 나타냅니다.
사전 요구 사항
- 지원되는 버전을 실행하는 OpenShift 클러스터입니다.
- OpenShift 클러스터에서 실행되는 Apache Kafka용 Streams에서 관리하는 Kafka 클러스터입니다.
- 로드 밸런서를 통해 외부 액세스에 대한 프록시 설정을 확인하기 위해 Kafka 바이너리가 로컬에 설치되어 있는지 확인합니다. Kafka 바이너리는 Apache Kafka 소프트웨어 다운로드 페이지를 통해 RHEL의 Streams용 Apache Kafka용 설치 아티팩트에 포함되어 있습니다.
- 가상 클러스터 및 필터 생성을 위한 구성이 포함된 구성 맵입니다.
-
oc명령줄 툴이 설치되고 관리자 액세스 권한으로 OpenShift 클러스터에 연결하도록 구성되어 있습니다. -
helm명령줄 툴이 설치되어 관리자 액세스 권한으로 OpenShift 클러스터에 연결하도록 구성되어 있습니다. HashiCorp Vault는 프록시용으로 설정되어 있으며 Apache Kafka 프록시용 Streams에서 액세스할 수 있습니다.
Vault 인스턴스가 Record Encryption 필터로 설정되어 있는지 확인합니다.
이 절차에서 사용되는 oc 및 helm 명령줄 옵션에 대한 자세한 내용은 --help 를 확인하십시오.
Apache Kafka Proxy용 Streams를 설치하는 파일 외에도 Apache Kafka Proxy용 Streams는 Kafka 클러스터를 설치하기 위해 사전 구성된 파일도 제공합니다. 설치 파일은 프록시를 설정하고 시도하는 가장 빠른 방법을 제공하지만 Apache Kafka 및 Vault용 Streams에서 관리하는 Kafka 클러스터의 자체 배포를 사용할 수 있습니다.
이 절차에서는 kafka 네임스페이스에 배포된 my-cluster 라는 Kafka 클러스터에 연결하고 있습니다. Apache Kafka용 Streams에서 관리하는 클러스터와 동일한 네임스페이스에 프록시를 배포하려면 kustomization.yaml 파일의 namespace 설정을 변경합니다. 프록시는 기본적으로 프록시 네임스페이스에 배포됩니다. 이 설정을 유지하는 경우 Apache Kafka Operator의 Streams를 클러스터 전체에서 설치해야 합니다.
프로세스
Apache Kafka Proxy 설치 아티팩트용 Streams를 다운로드하여 압축을 풉니다.
프록시는 Apache Kafka 소프트웨어 다운로드 페이지 에서는 Streams에서 사용할 수 있습니다.
파일에는
cluster-ip또는loadbalancer유형 리스너를 통해 연결하는 데 필요한 배포 구성이 포함되어 있습니다.Kafka 클러스터에서 주제를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제에서는 대화형 Pod 컨테이너를 통해
my-topic이라는 주제를 생성합니다.Vault에서
my-topic의 키를 생성합니다.vault write -f transit/keys/KEK_my-topic
vault write -f transit/keys/KEK_my-topicCopy to Clipboard Copied! Toggle word wrap Toggle overflow 프록시에 대한 필터 구성을 제공하는
ConfigMap을 편집합니다.레코드 암호화 필터 구성에
는HashiCorp Vault KMS에 대한 인증 정보가 필요합니다.레코드 암호화 필터 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Record Encryption 필터 및 적절한 리스너를 OpenShift 클러스터에 사용하여 Apache Kafka Proxy용 Streams를 배포합니다.
cluster-ip리스너를 사용하여 프록시 배포cd /examples/proxy/record-encryption/ oc apply -k cluster-ip
cd /examples/proxy/record-encryption/ oc apply -k cluster-ipCopy to Clipboard Copied! Toggle word wrap Toggle overflow 로드 밸런서리스너를 사용하여 프록시 배포cd /examples/proxy/record-encryption/ oc apply -k loadbalancer
cd /examples/proxy/record-encryption/ oc apply -k loadbalancerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 로드 밸런서리스너를 사용하는 경우 생성된 로드 밸런서 서비스의 주소를 사용하도록 프록시 구성을 업데이트합니다.프록시 서비스의 외부 주소를 가져옵니다.
LOAD_BALANCER_ADDRESS=$(oc get service -n <my_proxy_namespace> proxy-service --template='{{(index .status.loadBalancer.ingress 0).hostname}}')LOAD_BALANCER_ADDRESS=$(oc get service -n <my_proxy_namespace> proxy-service --template='{{(index .status.loadBalancer.ingress 0).hostname}}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 브로커 주소를 사용하도록 프록시 서비스 구성에서
brokerAddressPattern속성을 업데이트합니다.sed -i "s/\(brokerAddressPattern:\).*$/\1 ${LOAD_BALANCER_ADDRESS}/" load-balancer/proxy/proxy-config.yamlsed -i "s/\(brokerAddressPattern:\).*$/\1 ${LOAD_BALANCER_ADDRESS}/" load-balancer/proxy/proxy-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 프록시 구성에 변경 사항을 적용하고 프록시 Pod를 다시 시작합니다.
oc apply -k load-balancer && oc delete pod -n <my_proxy_namespace> --all
oc apply -k load-balancer && oc delete pod -n <my_proxy_namespace> --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
배포 상태를 확인합니다.
oc get pods -n <my_proxy_namespace>
oc get pods -n <my_proxy_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에 배포 이름 및 준비 상태 표시
NAME READY STATUS RESTARTS my-cluster-kafka-0 1/1 Running 0 my-cluster-kafka-1 1/1 Running 0 my-cluster-kafka-2 1/1 Running 0 my-cluster-proxy-<pod_id> 1/1 Running 0
NAME READY STATUS RESTARTS my-cluster-kafka-0 1/1 Running 0 my-cluster-kafka-1 1/1 Running 0 my-cluster-kafka-2 1/1 Running 0 my-cluster-proxy-<pod_id> 1/1 Running 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow my-cluster-proxy는 프록시의 이름입니다.Pod ID는 생성된 Pod를 식별합니다.
기본 배포를 사용하면 단일 프록시 Pod를 설치합니다.
READY는 ready/expected 복제본 수를 표시합니다. STATUS가 Running으로 표시되면 배포가 성공적으로 수행됩니다.
- 프록시를 통해 메시지를 생성한 다음 Kafka 클러스터에서 직접 및 간접적으로 사용하여 지정된 항목에 암호화가 적용되었는지 확인합니다.
3.1. cluster-ip 유형 리스너를 사용할 때 프록시 확인 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift 클러스터 내에서 Kafka 생산자 및 소비자에 대해 대화형 포드 컨테이너를 실행하여 cluster-ip 유형 리스너를 사용할 때 프록시가 작동하는지 확인합니다.
프록시에서 메시지를 생성합니다.
프록시를 통해 메시지 생성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 클러스터에서 직접 메시지를 사용하여 암호화됨을 표시합니다.
Kafka 클러스터에서 직접 메시지 사용
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 프록시의 메시지를 사용하여 암호가 자동으로 해독됨을 표시합니다.
Kafka 클러스터에서 직접 메시지 사용
Copy to Clipboard Copied! Toggle word wrap Toggle overflow