최근에 strimzi 를 통해 data hub 를 만드는 작업을 해보고 있엇습니다. 그리고 Connector 를 생성, 관리하는 면에서 마음에 들지 않는 부분이 있었습니다.
수많은 KafkaConnector(Strimzi)가 생길텐데 이것들을 소스레벨로 더해서 git으로 관리하고 싶었습니다. 그렇다면 kafkaConnnector manifest에는 어떤 민감한 정보들이 포함되어 있습니다.
config:
database.hostname:
database.port:
database.user:
database.password:
database.server.id:
topic.prefix:
database.include.list:
minifest의 일부입니다. git에 포함되면 안되는 정보들이 있습니다. 맞습니다. 선행으로 해결해야할 문제는 해당 정보들의 최소한의 보안을 확보시켜야합니다.
우선 insight를 얻을 수 있었던 자료들을 공유하겠습니다.
골자를 먼저 말한다면 민감정보들을 사전에 connect cluster 에 환경변수롤 삽입하고 KafkaConnector 에서 해당 환경변수를 사용하는 것 입니다.
위 포스팅에서 나온 방법들로 문제들을 해결했을 대 위 설정들은 아래와 같이 변할 수 있습니다.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
name: debezium-connector-mysql
labels:
strimzi.io/cluster: debezium-connect-cluster
spec:
class: io.debezium.connector.mysql.MySqlConnector
tasksMax: 3
config:
database.hostname: "${secrets:kafka/test-mysql-access-info:hostname}"
database.port: "${secrets:kafka/test-mysql-access-info:port}"
database.user: "${secrets:kafka/test-mysql-access-info:user}"
database.password: "${secrets:kafka/test-mysql-access-info:password}"
database.server.id: 184054
topic.prefix: "googleAnalytics"
database.include.list: ga
민감 정보를 리터럴로 노출시키지 않습니다.
이렇게되면 connector를 git으로 관리할 수 있습니다.
사실 저는 private repository 를 사용합니다. 내부망에 있는 repo를 사용하는거죠. 그런데 개인적으로 코드에 민감한 정보 리터럴 데이터로 노출되는게 마음에 안들어 위와 같이 조치했습니다. (넋두리입니다. 넘어가셔도 됩니다.)
사실 위에서 언급해드린 3개의 포스팅만 보셔도 git으로 관리할 수 있는 KafkaConnect를 구현할 수 있습니다. 작업하면서 고려해야할 점과 실수할 수 있는 부분을 몇가지 말해보겠습니다.
2가지 방법이 존재합니다.
저는 처음에 사용할 벤더가 한정정이라 mount 방식을 선택하려고 했습니다. 그러나 mount 방법을 사용할 때 롤링(rolling)업데이트에 대한 걱정입니다. 아무리 정해졌다고 하더라도 사람일은 모르니 혹시라도 그런 일이 생겼을 때 업데이트가 조금 복잡할 수도 있을 것 같았습니다.
또 Secret, ConfigMap 방법을 사용한다고 해도 '밑져야 본전'아닌가라는 생각을 했습니다.
이 글을 보는 사람들도 대부분 2번 방법을 선호하지 않을까 생각합니다.
선택은 여러분이 하는겁니다. 그러니 충분히 고려해보시고 선택하시면 좋은 결과를 얻을 수 있을 것 같습니다.
제가 준비한 글은 여기까지입니다.
아직은 한글로 된 Strimzi 자료가 많이 부족하다고 생각합니다. 이런 자료들이 조금이라도 한국 사람들에게 도움됐으면 좋겠습니다.
감사합니다.
:D