一、準備條件
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的一些環境變量和配置檔案的生成。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNzQjM5YWN3kDNwQTNxkzNxYzX4QDMwcTM3IzLcBTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
四、修改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=====>templates(kafka-ss.yaml)====>pod env variables===>/etc/confluent/docker/(files)=====>/etc/kafka/<b>properties. ****pod env variables and /etc/kafka/*properties control /usr/bin/kafka</b>
3)修改values.yaml,添加或者修改現有的值。應該修改或者添加哪個值,思路是:
檢視template/kafka-ss.yaml,搜尋sasl
是以,在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端使用正确的使用者名密碼