分享程式代碼相關筆記
目前文章總數:197 篇
最後更新:2025年 09月 13日
關於 Kafka-UI 的介紹,可參考:0089. Linux Ubuntu 上使用 Docker Compose 快速部署 Kafka的一段節錄
如果沒有特別設定,Kafka-ui 預設都是可以不用登入,直接有最高權限操作依賴的 Kafka 服務,如圖訪問網頁即可進入管理頁面:
除了檢視外,還可以進行刪除、新增等等操作
如 Step1 : 對應的架構如圖,Kafka-ui 會關注多個 Kafka 容器,並且當用戶(管理者),檢視時具有最高權限可使用
若將此種無驗證模式配置於生產環境,將會帶來以下問題:
完全開放存取 | 任何能連接到 Kafka-ui 的人都可以無限制地查看和操作所有 Kafka 資源 |
資料洩露 | 可以瀏覽所有主題中的訊息內容 |
操作風險-惡意或意外的破壞性操作 | 刪除重要的主題或消費者群組 |
設定變更 | 同上,有權限訪問即可修改 Kafka Connect 連接器配置 |
簡言之,即使是架設在公司內部網路下,若開發團隊有不慎操作都可能導致破壞生產,影響公司利益,因此必需添加驗證機制
Kafka-ui 為輕量級管理工具,並且自身設計抉擇的關係,因此具有以下認證架構限制:
無內建使用者管理 | Kafka-ui 本身不提供使用者註冊或帳號管理功能 |
依賴外部認證提供者 | 所有的帳號管理都必須透過外部系統完成,並且 Kafka-ui 只負責認證驗證,不負責帳號建立 |
一個 Kafka-ui 只能有一個帳號認證 ,如下圖,加入驗證模式後只能擇一 全部權限 或 權限唯讀
克服目標:為了解決實務上有需要 2 種帳號模式並存的狀況。(EX: 管理人員可用最高權限 ; 開發人員、維運人員只能用檢視)
大部分的情況都是檢視,因此只有在需要編輯的時候依照需要調整容器的環境參數改變此容器的權限,具體步驟:
1. 需要編輯操作 EX: 清空 Topic,部署生產後手動測試 Kafka Message |
2. 更改 docker-compose.yml 的 MANAGEMENT_READONLY=false |
3. 重啟 Kafak-ui |
4. 編輯權限的功能操作完畢後 |
5. 更改 docker-compose.yml 的 MANAGEMENT_READONLY=true |
6. 重啟 Kafak-ui |
優點: 統一由管理人員管理
缺點: 麻煩
讓檢視、管理同時並存的解法是同時啟動 2 種不同權限配置的 Kafka-ui ,如下圖:
優點: 高效率
缺點: 多開一個容器、管理人員要保管好最高權限的 Kafka-ui 的訪問路徑,不可讓他人知道
我們預設沒有開啟任何權限,因此需要添加驗證權限,如果今天要限制登入者讀取,就需要調整:
原始的 docker-compose.yml 設置可參考 0093. Kafka Kraft 模式部署與高可用性模擬測試(附完整 docker-compose) - 第二部分
異動的部分,在 docker-compose.yml 添加相關的配置
定義帳號為 viewer , 密碼為 ViewerPass123
開啟了驗證模式: AUTH_TYPE=LOGIN_FORM
設定上只允許唯讀:MANAGEMENT_READONLY=true
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
ports:
- "8380:8080"
environment:
- KAFKA_CLUSTERS_0_NAME=kafka-ui
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-0:9092,kafka-1:9092,kafka-2:9092
- KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=PLAINTEXT
# Kafka Cluster Setting
- KAFKA_CLUSTERS_0_READONLY=true
# Web UI User
- AUTH_TYPE=LOGIN_FORM
- SPRING_SECURITY_USER_NAME=viewer
- SPRING_SECURITY_USER_PASSWORD=ViewerPass123
# Manage Setting
- MANAGEMENT_READONLY=true
# Security Setting
- SERVER_SERVLET_CONTEXT_PATH=/
- SPRING_SECURITY_BASIC_ENABLED=true
用 WinMerge 做差異比對,可以輕鬆地知道原始代碼將上述代碼做替換的地方:
到 Ubuntu 安裝 kafka-ui 的 docker-compose.yml 的路徑下,輸入以下
docker-compose.yml down -v
docker-compose.yml up -d
重新進行安裝
以下是我們內部域名訪問的位置
http://192.168.51.28:8380
已出現要求登入驗證
使用 viewer 帳號登入後可以正常檢視 DashBoard
並且可以發現此帳號只能檢視,無法進行任何刪除、新增、修改的功能,符合預期
未來管理人員需要操作,則將 docker-compose.yml 相關環境參數移除即可
我們預設沒有開啟任何權限,現在要建立 2 個容器,分別是 具操作權限、唯讀 2 種
原始的 docker-compose.yml 設置可參考 0093. Kafka Kraft 模式部署與高可用性模擬測試(附完整 docker-compose) - 第二部分
異動的部分,在原 docker-compose.yml 添加以下配置,未來一勞永逸
具操作權限 | 唯讀權限 | |
---|---|---|
帳號 | admin | viewer |
密碼 | StrongPass123 | ViewerPass123 |
驗證模式 | AUTH_TYPE=LOGIN_FORM | AUTH_TYPE=LOGIN_FORM |
權限 MANAGEMENT_READONLY | false | true |
訪問 Port 號 | 8380 | 8381 |
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
ports:
- "8380:8080"
environment:
- KAFKA_CLUSTERS_0_NAME=kafka-ui
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-0:9092,kafka-1:9092,kafka-2:9092
- KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=PLAINTEXT
# Kafka Cluster Setting
- KAFKA_CLUSTERS_0_READONLY=false
# Web UI User
- AUTH_TYPE=LOGIN_FORM
- SPRING_SECURITY_USER_NAME=admin
- SPRING_SECURITY_USER_PASSWORD=StrongPass123
# Manage Setting
- MANAGEMENT_READONLY=false
- DYNAMIC_CONFIG_ENABLED=true
# Security Setting
- SERVER_SERVLET_CONTEXT_PATH=/
- SPRING_SECURITY_BASIC_ENABLED=true
depends_on:
- kafka-0
- kafka-1
- kafka-2
restart: unless-stopped
kafka-ui-viewer:
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui-viewer
ports:
- "8381:8080"
environment:
- KAFKA_CLUSTERS_0_NAME=local-kraft-readonly
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-0:9092,kafka-1:9092,kafka-2:9092
- KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=PLAINTEXT
# Kafka Cluster Setting
- KAFKA_CLUSTERS_0_READONLY=true
# Web UI User
- AUTH_TYPE=LOGIN_FORM
- SPRING_SECURITY_USER_NAME=viewer
- SPRING_SECURITY_USER_PASSWORD=ViewerPass123
# Manage Setting
- MANAGEMENT_READONLY=true
# Security Setting
- SERVER_SERVLET_CONTEXT_PATH=/
- SPRING_SECURITY_BASIC_ENABLED=true
depends_on:
- kafka-0
- kafka-1
- kafka-2
restart: unless-stopped
到 Ubuntu 安裝 kafka-ui 的 docker-compose.yml 的路徑下,輸入以下
docker-compose.yml down -v
docker-compose.yml up -d
重新進行安裝
操作權限使用 admin 登入以下
http://192.168.51.28:8380
使用 admin 帳號登入後 -> 到 Topic 頁面驗證,確實有所有權限可以進行操作
操作權限使用 viewer 登入以下
http://192.168.51.28:8381
使用 viewer 帳號登入後 -> 到 Topic 頁面驗證,確實該帳號只能進行檢視
此方案採用多容器區分權限,解決 Kafka-ui 可同時存在 操作權限、唯讀權限 共存的問題
要注意的事情是:操作權限 不能隨意洩漏,即使有帳號密碼第一層防護。