[kafka] strimzi kafka에서 secret과 configmap 사용하기

jeonghyun yu·2024년 7월 19일

Strimzi kafka

목록 보기
2/3

참고 https://strimzi.io/blog/2021/07/22/using-kubernetes-config-provider-to-load-data-from-secrets-and-config-maps/

KafkaConnect 설정

Connector 단에서 설정해줄 수도 있지만 그렇게 되면 새로운 Secret을 반영할 때마다 Connect Cluster 전체 재기동이 필요하다. -> Cluster 내의 다른 Connector도 재기동 됨
그래서 Connect에 init 해주는 것이 나은 선택일 것!

  config:
    config.providers: secrets,configmaps
    config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider
    config.providers.configmaps.class: io.strimzi.kafka.KubernetesConfigMapConfigProvider
    config.providers.secrets.param.dir: /path/to/secrets
    config.providers.configmaps.param.dir: /path/to/configmaps

해당 부분을 추가해서 배포하면 Strimzi Operator가 Service Account를 생성해준다.
이름은 <ConnectName>-connect

$ k get serviceaccount -n kafka
my-connect-cluster-connect                 0         17d
$ k describe serviceaccount -n kafka my-connect-cluster-connect
Name:                my-connect-cluster-connect
Namespace:           kafka
Labels:              app.kubernetes.io/instance=my-connect-cluster
                     app.kubernetes.io/managed-by=strimzi-cluster-operator
                     app.kubernetes.io/name=kafka-connect
                     app.kubernetes.io/part-of=strimzi-my-connect-cluster
                     strimzi.io/cluster=my-connect-cluster
                     strimzi.io/component-type=kafka-connect
                     strimzi.io/kind=KafkaConnect
                     strimzi.io/name=my-connect-cluster-connect
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   <none>
Tokens:              <none>
Events:              <none>

RBAC 리소스 생성

Role 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: connector-configuration-role
  namespace: elastic
rules:
- apiGroups: [""]
  resources: ["secrets"]
  resourceNames: ["elasticsearch-certs"]
  verbs: ["get"]

사용하려는 CM / Secret이 있는 Namespace에 생성해준다.
resourceNames에 원하는 리소스의 이름 작성
multiple로 가능하지만 여러 NS의 리소스를 읽어오려면 여러 개의 Role을 생성해줘야 한다.

RoleBinding 생성

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: connector-configuration-role-binding
  namespace: elastic
subjects:
- kind: ServiceAccount
  name: my-connect-cluster-connect
  namespace: kafka
roleRef:
  kind: Role
  name: connector-configuration-role
  apiGroup: rbac.authorization.k8s.io

role과 strimzi가 생성해준 service account를 연결해주는 rolebinding을 생성하자
이 것 또한 사용할 CM / Secret이 있는 Namespace에 생성해준다.
Role이 여러 개라면 Binding도 여러 개 생성

Connector 생성

${secrets:elastic/elasticsearch-credentials:username}

이제 Connector 배포 시에 해당 형태로 비밀번호 등을 사용할 수 있다!

0개의 댓글