13.3. 리스너를 사용하여 Kafka 클러스터에 클라이언트 액세스 설정


Kafka 클러스터의 주소를 사용하여 동일한 OpenShift 클러스터의 클라이언트에 대한 액세스를 제공하거나 다른 OpenShift 네임스페이스 또는 OpenShift 외부의 클라이언트에 대한 외부 액세스를 제공할 수 있습니다. 다음 절차에서는 OpenShift 외부 또는 다른 OpenShift 클러스터에서 Kafka 클러스터에 대한 클라이언트 액세스를 구성하는 방법을 설명합니다.

Kafka 리스너는 Kafka 클러스터에 대한 액세스를 제공합니다. 클라이언트 액세스는 다음 구성을 사용하여 보호됩니다.

  1. 외부 리스너는 TLS 암호화 및 mTLS 인증 및 Kafka 간단한 인증이 활성화된 Kafka 클러스터에 대해 구성됩니다.
  2. KafkaUser 는 mTLS 인증 및 간단한 권한 부여를 위해 정의된 ACL(액세스 제어 목록)을 사용하여 클라이언트에 대해 생성됩니다.

상호 tls,scram-sha-512 또는 oauth 인증을 사용하도록 리스너를 구성할 수 있습니다. mTLS는 항상 암호화를 사용하지만 SCRAM-SHA-512 및 OAuth 2.0 인증을 사용할 때 암호화를 사용하는 것이 좋습니다.

Kafka 브로커에 대해 간단한,oauth,opa 또는 사용자 정의 인증을 구성할 수 있습니다. 활성화되면 권한 부여가 활성화된 모든 리스너에 적용됩니다.

KafkaUser 인증 및 권한 부여 메커니즘을 구성할 때 동등한 Kafka 구성과 일치하는지 확인합니다.

  • KafkaUser.spec.authenticationKafka.spec.kafka.listeners[*].authentication과 일치합니다.
  • KafkaUser.spec.authorizationKafka.spec.kafka.authorization과 일치

KafkaUser 에 사용하려는 인증을 지원하는 리스너가 하나 이상 있어야 합니다.

참고

Kafka 사용자와 Kafka 브로커 간의 인증은 각각에 대한 인증 설정에 따라 다릅니다. 예를 들어 Kafka 구성에서 활성화되지 않은 경우 mTLS로 사용자를 인증할 수 없습니다.

AMQ Streams Operator는 구성 프로세스를 자동화하고 인증에 필요한 인증서를 생성합니다.

  • Cluster Operator는 리스너를 생성하고 클러스터 및 클라이언트 CA(인증 기관) 인증서를 설정하여 Kafka 클러스터와의 인증을 활성화합니다.
  • User Operator는 선택한 인증 유형을 기반으로 클라이언트 및 클라이언트 인증에 사용되는 보안 자격 증명을 나타내는 사용자를 생성합니다.

클라이언트 구성에 인증서를 추가합니다.

이 절차에서는 Cluster Operator에서 생성한 CA 인증서가 사용되지만 자체 인증서를 설치하여 교체할 수 있습니다. 외부 CA(인증 기관)에서 관리하는 Kafka 리스너 인증서를 사용하도록 리스너를 구성할 수도 있습니다.

인증서는 PEM(.crt) 및 PKCS #12(.p12) 형식으로 사용할 수 있습니다. 이 절차에서는 PEM 인증서를 사용합니다. X.509 형식의 인증서를 사용하는 클라이언트와 PEM 인증서를 사용합니다.

참고

동일한 OpenShift 클러스터 및 네임스페이스의 내부 클라이언트의 경우 Pod 사양에 클러스터 CA 인증서를 마운트할 수 있습니다. 자세한 내용은 클러스터 CA를 신뢰하도록 내부 클라이언트 구성을 참조하십시오.

사전 요구 사항

  • Kafka 클러스터는 OpenShift 클러스터 외부에서 실행되는 클라이언트에서 연결할 수 있습니다.
  • Cluster Operator 및 User Operator가 클러스터에서 실행 중입니다.

절차

  1. Kafka 리스너를 사용하여 Kafka 클러스터를 구성합니다.

    • 리스너를 통해 Kafka 브로커에 액세스하는 데 필요한 인증을 정의합니다.
    • Kafka 브로커에서 인증을 활성화합니다.

      리스너 구성 예

      apiVersion: kafka.strimzi.io/v1beta2
      kind: Kafka
      metadata:
        name: my-cluster
        namespace: myproject
      spec:
        kafka:
          # ...
          listeners: 
      1
      
          - name: external 
      2
      
            port: 9094 
      3
      
            type: <listener_type> 
      4
      
            tls: true 
      5
      
            authentication:
              type: tls 
      6
      
            configuration: 
      7
      
              #...
          authorization: 
      8
      
            type: simple
            superUsers:
              - super-user-name 
      9
      
        # ...

      1
      외부 리스너를 활성화하는 구성 옵션은 일반 Kafka 리스너 스키마 참조에 설명되어 있습니다.
      2
      리스너를 식별할 이름입니다. Kafka 클러스터 내에서 고유해야 합니다.
      3
      Kafka 내부의 리스너에서 사용하는 포트 번호입니다. 포트 번호는 지정된 Kafka 클러스터 내에서 고유해야 합니다. 허용되는 포트 번호는 9092이고 포트 9404 및 9999를 제외하고 이미 Prometheus 및 10.0.0.1에 사용됩니다. 리스너 유형에 따라 포트 번호가 Kafka 클라이언트를 연결하는 포트 번호와 동일하지 않을 수 있습니다.
      4
      경로 (OpenShift만), 로드 밸런서 ,노드 포트 또는 수신 (Kubernetes만)로 지정된 외부 리스너 유형. 내부 리스너는 내부 또는 cluster-ip 로 지정됩니다.
      5
      필수 항목입니다. 리스너의 TLS 암호화입니다. routeingress 유형 리스너의 경우 true 로 설정해야 합니다. mTLS 인증의 경우 인증 속성도 사용합니다.
      6
      리스너의 클라이언트 인증 메커니즘. mTLS를 사용한 서버 및 클라이언트 인증의 경우 tls: trueauthentication.type: tls 를 지정합니다.
      7
      (선택 사항) 리스너 유형의 요구 사항에 따라 추가 리스너 구성 을 지정할 수 있습니다.
      8
      권한 부여는 AclAuthorizer Kafka 플러그인을 사용하는 단순 로 지정됩니다.
      9
      (선택 사항) 슈퍼 사용자는 ACL에 정의된 액세스 제한에 관계없이 모든 브로커에 액세스할 수 있습니다.
      주의

      OpenShift 경로 주소는 Kafka 클러스터의 이름, 리스너의 이름 및 생성된 네임스페이스의 이름으로 구성됩니다. 예를 들면 my-cluster-kafka-listener1-bootstrap-myproject (CLUSTER-NAME-kafka-LISTENER-NAME -bootstrap-NAMESPACE)입니다. 경로 리스너 유형을 사용하는 경우 주소의 전체 길이가 최대 63자 제한을 초과하지 않도록 주의하십시오.

  2. Kafka 리소스를 생성하거나 업데이트합니다.

    oc apply -f <kafka_configuration_file>

    Kafka 클러스터는 mTLS 인증을 사용하는 Kafka 브로커 리스너로 구성됩니다.

    각 Kafka 브로커 Pod에 대해 서비스가 생성됩니다.

    Kafka 클러스터 연결에 필요한 부트스트랩 주소로 사용되는 서비스가 생성됩니다.

    또한 nodeport 리스너를 사용하여 Kafka 클러스터에 외부 연결을 위해 외부 부트스트랩 주소로 서비스가 생성됩니다.

    kafka 브로커의 ID를 확인하는 클러스터 CA 인증서도 시크릿 < cluster_name> -cluster-ca-cert 에 생성됩니다.

    참고

    외부 리스너를 사용하는 동안 Kafka 클러스터를 스케일링하는 경우 모든 Kafka 브로커의 롤링 업데이트가 트리거될 수 있습니다. 구성에 따라 달라집니다.

  3. 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 클러스터에 연결합니다.

  4. Kafka 클러스터에 액세스해야 하는 클라이언트를 나타내는 사용자를 생성하거나 수정합니다.

    • Kafka 리스너와 동일한 인증 유형을 지정합니다.
    • 간단한 권한 부여를 위한 권한 부여 ACL을 지정합니다.

      사용자 구성 예

      apiVersion: kafka.strimzi.io/v1beta2
      kind: KafkaUser
      metadata:
        name: my-user
        labels:
          strimzi.io/cluster: my-cluster 
      1
      
      spec:
        authentication:
          type: tls 
      2
      
        authorization:
          type: simple
          acls: 
      3
      
            - resource:
                type: topic
                name: my-topic
                patternType: literal
              operations:
                - Describe
                - Read
            - resource:
                type: group
                name: my-group
                patternType: literal
              operations:
                - Read

      1
      레이블은 Kafka 클러스터의 레이블과 일치해야 합니다.
      2
      상호 tls 로 지정된 인증.
      3
      간단한 권한 부여를 수행하려면 사용자에게 적용되는 ACL 규칙 목록이 필요합니다. 규칙은 사용자 이름 (my-user)에 따라 Kafka 리소스에 허용된 작업을 정의합니다.
  5. KafkaUser 리소스를 생성하거나 수정합니다.

    oc apply -f USER-CONFIG-FILE

    사용자는 KafkaUser 리소스와 동일한 이름의 시크릿과 함께 생성됩니다. 보안에는 mTLS 인증을 위한 공개 및 개인 키가 포함됩니다.

    보안 예

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-user
      labels:
        strimzi.io/kind: KafkaUser
        strimzi.io/cluster: my-cluster
    type: Opaque
    data:
      ca.crt: <public_key> # Public key of the clients CA
      user.crt: <user_certificate> # Public key of the user
      user.key: <user_private_key> # Private key of the user
      user.p12: <store> # PKCS #12 store for user certificates and keys
      user.password: <password_for_store> # Protects the PKCS #12 store

  6. Kafka 클러스터의 < cluster_name> -cluster-ca-cert 시크릿에서 클러스터 CA 인증서를 추출합니다.

    oc get secret <cluster_name>-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
  7. <user _name> 시크릿에서 사용자 CA 인증서를 추출합니다.

    oc get secret <user_name> -o jsonpath='{.data.user\.crt}' | base64 -d > user.crt
  8. <user _name> 시크릿에서 사용자의 개인 키를 추출합니다.

    oc get secret <user_name> -o jsonpath='{.data.user\.key}' | base64 -d > user.key
  9. Kafka 클러스터에 연결하기 위해 부트스트랩 주소 호스트 이름 및 포트를 사용하여 클라이언트를 구성합니다.

    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "<hostname>:<port>");
  10. Kafka 클러스터의 ID를 확인하도록 신뢰 저장소 자격 증명으로 클라이언트를 구성합니다.

    공용 클러스터 CA 인증서를 지정합니다.

    신뢰 저장소 구성 예

    props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL");
    props.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, "PEM");
    props.put(SslConfigs.SSL_TRUSTSTORE_CERTIFICATES_CONFIG, "<ca.crt_file_content>");

    SSL은 mTLS 인증에 대해 지정된 보안 프로토콜입니다. TLS를 통해 SCRAM-SHA-512 인증에 대해 SASL_SSL 을 지정합니다. PEM은 신뢰 저장소의 파일 형식입니다.

  11. Kafka 클러스터에 연결할 때 사용자를 확인하도록 키 저장소 자격 증명으로 클라이언트를 구성합니다.

    공개 인증서 및 개인 키를 지정합니다.

    키 저장소 구성 예

    props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SSL");
    props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "PEM");
    props.put(SslConfigs.SSL_KEYSTORE_CERTIFICATE_CHAIN_CONFIG, "<user.crt_file_content>");
    props.put(SslConfigs.SSL_KEYSTORE_KEY_CONFIG, "<user.key_file_content>");

    키 저장소 인증서와 개인 키를 구성에 직접 추가합니다. 를 단일 줄 형식으로 추가합니다. BEGINCERTIFICATEENDCERT IFICATE 구분자 사이에 줄 바꿈 문자(\n)로 시작합니다. \n 을 사용하여 원래 인증서에서 각 행을 종료합니다.

    키 저장소 구성 예

    props.put(SslConfigs.SSL_KEYSTORE_CERTIFICATE_CHAIN_CONFIG, "-----BEGIN CERTIFICATE----- \n<user_certificate_content_line_1>\n<user_certificate_content_line_n>\n-----END CERTIFICATE---");
    props.put(SslConfigs.SSL_KEYSTORE_KEY_CONFIG, "----BEGIN PRIVATE KEY-----\n<user_key_content_line_1>\n<user_key_content_line_n>\n-----END PRIVATE KEY-----");

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동