SASL을 사용하여 Kafka에 Camel K 인증

8324 단어 camelksaslcamelkafka
Apache Camel K는 기본적으로 Kubernetes에서 실행되고 서버리스 및 마이크로서비스 아키텍처용으로 특별히 설계된 Apache Camel로 구축된 경량 통합 프레임워크입니다. 종종 통합 문제를 해결하기 위한 스위스 군용 칼이라고 불리는 이 제품은 많은 이기종 시스템과 응용 프로그램을 쉽게 통합하여 데이터를 원활하게 공유할 수 있도록 합니다. Camel K 사용자는 선호하는 클라우드(Kubernetes 또는 OpenShift)에서 Camel DSL에 작성된 통합 코드를 즉시 실행할 수 있습니다. Camel K와 Camel에 대해 자세히 알아보려면 official Camel site을 방문하세요.

Kafka은 Camel K를 사용하여 나머지 애플리케이션과 쉽게 통합할 수 있습니다. Kafka 브로커는 SASL(단순 인증 및 보안 계층)을 사용하여 클라이언트 인증을 지원합니다. SASL은 애플리케이션 프로토콜에서 인증 메커니즘을 분리하므로 SASL에서 지원하는 모든 인증 메커니즘을 사용할 수 있습니다. 인증을 위해 SASL 지원 OAUTHBEARER 메커니즘을 사용하고 SSL이 데이터 암호화를 처리합니다.

시작하기



이 데모는 kubernetes/openshift 클러스터에 대한 액세스 권한이 필요합니다.

Camel K 및 필수 CLI 도구 설치


  • Camel K : 특정 클러스터
  • 에 대한 Camel K installation guide을 따르십시오.
  • 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
    


    그게 다야! 누군가 이 정보가 유용하기를 바라며 질문이나 의견이 있으면 의견 섹션에 자유롭게 게시하십시오. 행복한 코딩!

    좋은 웹페이지 즐겨찾기