天天看點

內建kafka的身份認證(SASL/PLAIN)到kubernets環境中

一、準備條件

0-搭建k8s+docker的實驗環境

1-K8s的基礎知識準備

2-Helm的基礎知識準備

3-kafka在stand alone node上身份認證機制了解

二、使用helm 安裝k8s微服務(kafka和zookeeper)

1) 安裝微服務

2)确認安裝

3) 進到container裡面, 确認下檔案

檢視所有的images

進到k8s pod中

進到docker container中:docker exec –it containerId(containername)  bash(/bin/bash)

4) 拷貝檔案到container(pod)中

docker ps

docker cp k8s_messagebuskf_eric-data-message-bus-kf-0_eric-schema-registry-sr-install_b0c9eb0f-881b-4081-9931-b9fc0b314bb9_5:/etc/kafka /mnt/c/repo/k8skafka

docker cp messagebuskf:/etc/kafka/*  /mnt/c/repo/k8skafka

docker cp k8s_messagebuskf_eric-data-message-bus-kf-0_eric-schema-registry-sr-install_b0c9eb0f-881b-4081-9931-b9fc0b314bb9_5:/usr/bin /mnt/c/repo/k8skafka

docker cp /mnt/c/repo/k8skafka/kafka_server_jaas.conf k8s_messagebuskf_eric-data-message-bus-kf-0_eric-schema-registry-sr-install_b0c9eb0f-881b-4081-9931-b9fc0b314bb9_5:/etc/kafka/

5)确認node和k8s叢集中服務

三、學習kafka微服務中helm chart中檔案内容

結合pod關于kafka的環境變量、helm chart如何通過values和templates去控制pod的環境變量、container中從

/etc/docker/run/run-->configure-->lauch這樣一個邏輯,從上到下從總到分的邏輯。那麼如果想要開啟或者配置container中kafka的功能,

需要修改helm chart中的values值,以及需要在values中添加對應的值,

然後通過helm install或者helm upgrade使得值生效,然後控制container中kafka的一些環境變量和配置檔案的生成。

內建kafka的身份認證(SASL/PLAIN)到kubernets環境中

四、修改values和chart file,開啟helm對于kafka SASL/PLAIN的支援

1)kafka微服務的helm chart

從本地helm repo中找到chart壓縮包,eric-data-message-bus-kf-1.17.0-28.tgz,解壓。

2) 修改charts中對應的檔案

value.yaml=====&gt;templates(kafka-ss.yaml)====&gt;pod env variables===&gt;/etc/confluent/docker/(files)=====&gt;/etc/kafka/<b>properties.  ****pod env variables and /etc/kafka/*properties control /usr/bin/kafka</b>

3)修改values.yaml,添加或者修改現有的值。應該修改或者添加哪個值,思路是:

檢視template/kafka-ss.yaml,搜尋sasl

內建kafka的身份認證(SASL/PLAIN)到kubernets環境中
內建kafka的身份認證(SASL/PLAIN)到kubernets環境中
內建kafka的身份認證(SASL/PLAIN)到kubernets環境中

是以,在k8s叢集内部,首先要修改eric-data-message-bus-kf.sasl的值為true。 檢視templates/_helpers.tpl, eric-data-message-bus-kf.sasl如何被映射到

values.yaml中。

kafka-ss.yaml

修改完之後,使用docker cp把檔案copy到container中,使用helm install /helm upgrade重新部署k8s微服務。

确認重新部署後的狀态:

驗證:

分别在不同的container中 啟動producer和consumer,看是否能通信。

五、k8s外部通過使用者名密碼通路kafka

1) 首先是要k8s叢集要對外暴露服務,通過nodeport來對外暴露服務開啟SASL支援,在values.yaml中添加:

#options required for external access via nodeport

"advertised.listeners": EXTERNAL://127.0.0.1:$((31090 + ${KAFKA_BROKER_ID}))

"listener.security.protocol.map": SASL_PLAINTEXT:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT

nodeport:

enabled: true

servicePort: 9092

firstListenerPort: 31090

2) 其次,參考cp-helm-charts/statefulset.yaml at master · confluentinc/cp-helm-charts · GitHub

修改一下kafka-ss.yaml。

3) 最後,同樣 改完之後helm 重新安裝或者

helm upgrade --install eric-data-message-bus-kf .  --reuse-values --set global.security.sasl.enabled=true --set global.security.tls.enabled=false -n eric-schema-registry-sr-install

配置的過程中參考:

kafka的參數解釋

javascript:void(0)

kafka/KafkaConfig.scala at trunk · apache/kafka (github.com)

K8S環境快速部署Kafka(K8S外部可通路):javascript:void(0)

4) 驗證

①在用戶端安裝kafka,并開啟支援。

②進到container内部 檢視使用者名密碼:

③當client端使用錯誤的使用者名密碼

④當client端使用正确的使用者名密碼