SASL을 사용하여 Kafka에 Camel K 인증
Kafka은 Camel K를 사용하여 나머지 애플리케이션과 쉽게 통합할 수 있습니다. Kafka 브로커는 SASL(단순 인증 및 보안 계층)을 사용하여 클라이언트 인증을 지원합니다. SASL은 애플리케이션 프로토콜에서 인증 메커니즘을 분리하므로 SASL에서 지원하는 모든 인증 메커니즘을 사용할 수 있습니다. 인증을 위해 SASL 지원 OAUTHBEARER 메커니즘을 사용하고 SSL이 데이터 암호화를 처리합니다.
시작하기
이 데모는 kubernetes/openshift 클러스터에 대한 액세스 권한이 필요합니다.
Camel K 및 필수 CLI 도구 설치
Camel K
: 특정 클러스터kamel
: Apache Camel K CLI 도구입니다. Camel K releases page에서 다운로드할 수 있습니다.kubectl
: kubernetes 기본 CLI 도구입니다. Kubernetes releases page에서 다운로드할 수 있습니다.카프카 인스턴스 설정
Openshift Streams for Apache Kafka를 사용하여 Kafka 인스턴스, 서비스 계정 및 Kafka 주제를 쉽게 생성할 수 있습니다. SASL OAUTHBEARER 인증 방법을 선택해야 합니다. 이 데모에서는 Kafka 주제 "테스트"의 이름을 지정할 것입니다. Kafka 브로커 URL, 서비스 계정 ID, 서비스 계정 암호 및 토큰 끝점 URL을 저장합니다. 구성 파일에서 사용합니다.
Camel K 통합에서 Kafka 사용
다음 파일을 생성합니다.
application.properties
: 구성 파일, 구성 속성 보유SaslSSLKafkaProducer.java
: 생산자, 통합 코드를 포함하고 Kafka 주제에 대한 생산SaslSSLKafkaConsumer.java
: 소비자, 통합 코드를 포함하고 Kafka 항목에서 소비합니다Kafka는 SASL 구성에 Java 인증 및 권한 부여 서비스(JAAS)를 사용하므로
application.properties
구성 파일에 JAAS 구성을 지정합니다. 또한 oauthbearer 토큰을 검색할 로그인 콜백 핸들러를 지정해야 합니다.application.properties 파일:
# Kafka config
camel.component.kafka.brokers = <YOUR KAFKA BROKER URL>
camel.component.kafka.security-protocol = SASL_SSL
camel.component.kafka.sasl-mechanism = OAUTHBEARER
camel.component.kafka.sasl-jaas-config = org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
oauth.client.id='<YOUR SERVICE ACCOUNT ID>' \
oauth.client.secret='<YOUR SERVICE ACCOUNT SECRET>' \
oauth.token.endpoint.uri="<TOKEN ENDPOINT URL>" ;
camel.component.kafka.additional-properties[sasl.login.callback.handler.class] = io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler
consumer.topic=test
producer.topic=test
통합 파일에서
kafka-oauth-client
는 구성 파일에 지정된 로그인 처리기 클래스를 제공하므로 maven 종속성으로 지정합니다.SaslSSLKafkaProducer.java:
// camel-k: language=java dependency=mvn:org.apache.camel.quarkus:camel-quarkus-kafka dependency=mvn:io.strimzi:kafka-oauth-client:0.10.0
import org.apache.camel.builder.RouteBuilder;
public class SaslSSLKafkaProducer extends RouteBuilder {
@Override
public void configure() throws Exception {
log.info("About to start route: Timer -> Kafka ");
from("timer:foo")
.routeId("FromTimer2Kafka")
.setBody()
.simple("Message #${exchangeProperty.CamelTimerCounter}")
.to("kafka:{{producer.topic}}")
.log("Message correctly sent to the topic!");
}
}
SaslSSLKafkaConsumer.java:
// camel-k: language=java dependency=mvn:org.apache.camel.quarkus:camel-quarkus-kafka dependency=mvn:io.strimzi:kafka-oauth-client:0.10.0
import org.apache.camel.builder.RouteBuilder;
public class SaslSSLKafkaConsumer extends RouteBuilder {
@Override
public void configure() throws Exception {
log.info("About to start route: Kafka -> Log ");
from("kafka:{{consumer.topic}}")
.routeId("FromKafka2Log")
.log("${body}");
}
}
구성 속성을 비밀로 묶습니다.
kubectl create secret generic kafka-props --from-file application.properties
Kafka 주제로 제작
kamel run --config secret:kafka-props SaslSSLKafkaProducer.java --dev
...
[2] 2021-05-06 08:48:11,854 INFO [FromTimer2Kafka] (Camel (camel-1) thread #1 - KafkaProducer[test]) Message correctly sent to the topic!
[2] 2021-05-06 08:48:11,854 INFO [FromTimer2Kafka] (Camel (camel-1) thread #3 - KafkaProducer[test]) Message correctly sent to the topic!
[2] 2021-05-06 08:48:11,973 INFO [FromTimer2Kafka] (Camel (camel-1) thread #5 - KafkaProducer[test]) Message correctly sent to the topic!
Kafka 주제에서 소비
kamel run --config secret:kafka-props SaslSSLKafkaConsumer.java --dev
...
[1] 2021-05-06 08:51:08,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #8
[1] 2021-05-06 08:51:10,065 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #9
[1] 2021-05-06 08:51:10,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #10
그게 다야! 누군가 이 정보가 유용하기를 바라며 질문이나 의견이 있으면 의견 섹션에 자유롭게 게시하십시오. 행복한 코딩!
Reference
이 문제에 관하여(SASL을 사용하여 Kafka에 Camel K 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kuthumipepple/authenticating-camel-k-to-kafka-using-sasl-1723텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)