※오타주의! 오타하나에 매우 민감한 작업임..
우선 시작전에 인스턴스 구성을 설명하겠다.
- peter-zk01.foo.bar : kerberos Server (원래 이용도가 아닌데, 자원이 없어서..)
- peter-kafka01.foo.bar : broker Server
- 아무 Server : Client용 Server
최소 3대가 필요하고, broker가 replication으로 다중으로 운영된다면 broker는 여러개 여도 된다.
kerberos Server는 별도로 빼도 되고 그냥 broker서버에다가 같이 올려도 잘돌아간다. 당연히 운영을 생각한다면 분리하는것이 맞지만, 테스트용이라면 같이해도 무방
Kerberos 서버 세팅은 내가 공부한 책의 github에 있는 ansible-playbook를 실행하길 바란다.
git으로 다음 소스를 받자
https://github.com/onlybooks/kafka2/tree/main/chapter2/ansible_playbook/
GitHub - onlybooks/kafka2: 실전 카프카 개발부터 운영까지
실전 카프카 개발부터 운영까지. Contribute to onlybooks/kafka2 development by creating an account on GitHub.
github.com
Kerberos Server 작업
playbook을 실행시켜 Kerberos Server를 설치하고 환경설정까지 자동으로 진행한다.
# ansible-playbook -i hosts kerberos.yml
인증정보를 갖고 있는 keytab을 생성하자
우선 principal이란 것을 등록
# kadmin.local -q "add_principal -randkey peter01@FOO.BAR"
# kadmin.local -q "add_principal -randkey peter02@FOO.BAR"
# kadmin.local -q "add_principal -randkey admin@FOO.BAR"
# kadmin.local -q "add_principal -randkey kafka/peter-kafka01.foo.bar@FOO.BAR"
# kadmin.local -q "add_principal -randkey kafka/peter-kafka02.foo.bar@FOO.BAR"
# kadmin.local -q "add_principal -randkey kafka/peter-kafka03.foo.bar@FOO.BAR"
-------------------------- 혹시 잘못해서 지울때는 ---------------------
# kadmin.local -q "delete_principal -force peter01@FOO.BAR"
# kadmin.local -q "delete_principal -force peter02@FOO.BAR"
# kadmin.local -q "delete_principal -force admin@FOO.BAR"
# kadmin.local -q "delete_principal -force kafka/peter-kafka01.foo.bar@FOO.BAR"
# kadmin.local -q "delete_principal -force kafka/peter-kafka02.foo.bar@FOO.BAR"
# kadmin.local -q "delete_principal -force kafka/peter-kafka03.foo.bar@FOO.BAR"
keytab 파일을 생성
# mkdir -p ~/keytabs
# kadmin.local -q "ktadd -k /root/keytabs/peter01.user.keytab peter01@FOO.BAR"
# kadmin.local -q "ktadd -k /root/keytabs/peter02.user.keytab peter02@FOO.BAR"
# kadmin.local -q "ktadd -k /root/keytabs/admin.user.keytab admin@FOO.BAR"
# kadmin.local -q "ktadd -k /root/keytabs/peter-kafka01.service.keytab kafka/peter-kafka01.foo.bar@FOO.BAR"
# kadmin.local -q "ktadd -k /root/keytabs/peter-kafka02.service.keytab kafka/peter-kafka02.foo.bar@FOO.BAR"
# kadmin.local -q "ktadd -k /root/keytabs/peter-kafka03.service.keytab kafka/peter-kafka03.foo.bar@FOO.BAR"
방금 생성한 keytab들을 broker와 client로 옮기자
# scp -r /root/keytabs root@192.168.122.13:/root/
# scp -r /root/keytabs root@192.168.122.14:/root/
Broker Server 작업
우선 kerberos 통신이 가능토록 라이브러리 및 기타 관련 모듈을 설치하자
# yum install krb5-workstation krb5-libs krb5-auth-dialog
kerberos Server의 /etc/krb5.conf와 동일하게 broker Server도 맞춘다. 복붙하자.
# vi /etc/krb5.conf
받아온 keytab 들이 잘 적용되는지 테스트 해본다. 그리고 최종적으로 service keytab을 활성화 시킨다.
# kinit -kt /root/keytabs/keytabs/peter01.user.keytab peter01
# klist
# kinit -kt /root/keytabs/peter-kafka01.service.keytab kafka/peter-kafka01.foo.bar
# klist
Kafka Server 환경설정을 진행한다.
# vi /root/kafka_2.12-3.2.0/config/server.properties
-----------------------------------------------------
listeners=PLAINTEXT://:9092,SASL_PLAINTEXT://:9094
advertised.listeners=PLAINTEXT://192.168.122.12:9092,SASL_PLAINTEXT://peter-kafka01.foo.bar:9094
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka
Kafka Server용 JAAS를 만든다
# vi /root/kafka_2.12-3.2.0/config/kafka_server_jaas.conf
---------------------------------------------------------------------
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/root/keytabs/peter-kafka01.service.keytab"
principal="kafka/peter-kafka01.foo.bar@FOO.BAR";
};
이제 Kafka Server를 재기동하고 :9094포트가 정상 LISTEN하는지 확인하자
# KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_2.12-3.2.0/config/kafka_server_jaas.conf" /root/kafka_2.12-3.2.0/bin/kafka-server-start.sh -daemon /root/kafka_2.12-3.2.0/config/server.properties
Client 작업
우선 kerberos 통신이 가능토록 라이브러리 및 기타 관련 모듈을 설치하자
# yum install krb5-workstation krb5-libs krb5-auth-dialog
kerberos Server의 /etc/krb5.conf와 동일하게 Client도 맞춘다. 복붙하자.
# vi /etc/krb5.conf
Client용 JAAS를 생성하자
vi /root/kafka_client_jaas.conf
-----------------------------------------------------------
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName="kafka"
keyTab="/root/keytabs/peter01.user.keytab"
principal="peter01@FOO.BAR";
};
kerberos.config를 생성하자
#vi /root/kerberos.config
----------------------------------------------
sasl.mechanism=GSSAPI
security.protocol=SASL_PLAINTEXT
keytab정보를 한번더 갱신하자
# kinit -kt /root/keytabs/peter01.user.keytab peter01
# klist
이제 producer 로 message를 생성해보자
# KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_client_jaas.conf" /root/kafka_2.12-3.2.0/bin/kafka-console-producer.sh --bootstrap-server peter-kafka01.foo.bar:9094 --topic peter-test07 --producer.config /root/kerberos.config
consumer도 켜놓자
# KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_client_jaas.conf" /root/kafka_2.12-3.2.0/bin/kafka-console-consumer.sh --bootstrap-server peter-kafka01.foo.bar:9094 --topic peter-test07 --consumer.config /root/kerberos.config
'PaaS > MQ' 카테고리의 다른 글
Kafka Oauth 인증 추가하기 (0) | 2023.02.22 |
---|---|
kafka 서버에 SSL 혹은 SASL 을 적용하면 성능 저하가 있을까? (0) | 2022.07.14 |
kafka 클러스터 만들기 (0) | 2022.07.13 |
엔터프라이즈용 kafka의 환경구성 (0) | 2022.07.08 |
kafka 커넥트 (0) | 2022.07.08 |