【Kafka】docker 中配置帶 Kerberos 認證的 Kafka 環境(全過程)

1. 準備 docker

  • 下載鏡像 docker pull centos/systemd,該鏡像是基于 centos7 增加了 systemd 的功能,可以更方便啟動后臺服務

  • 啟動鏡像

    • 使用 systemd 功能需要權限,如果是模擬 gitlab services 就不要使用 systemd 的方式啟動

    • 如果不使用 systemd 功能 docker run -itd --name kafka_kerberos -p 9092:9092 centos/systemd

    • 如果使用 systemd 功能 docker run -itd --name kafka_kerberos -p 9092:9092 --privileged=true centos/systemd /usr/sbin/init

  • 根據需求清空 /etc/resolv.conf,內網環境中自動添加的 8.8.8.8 會影響網絡

  • 啟動 sshd /usr/sbin/sshd -D &

2. 配置 kerberos

服務端
  • 安裝服務端 yum install krb5-server

  • 配置 /etc/hosts

    • 根據需要配置,配置下面 /etc/krb5.conf 文件中 TEST.COM 里的域名對應的 IP
  • 配置 /etc/krb5.conf

    • 對下面的行進行修改,其它行不變

      default_realm = TEST.COM
      default_ccache_name = /tmp/krb5cc_%{uid}
      dns_lookup_realm = false
      dns_lookup_kdc = false
      rdns = false
      # 這行注釋掉
      # renew_lifetime=...[realms]
      TEST.COM = {kdc = kafka_kerberosadmin_server = kafka_kerberos
      }[domain_realm]
      .test.com = TEST.COM
      test.com = TEST.COM
      
  • 配置 /var/kerberos/krb5kdc/kdc.conf,將 EXAMPLE.COM 修改為 TEST.COM

  • 配置 /var/kerberos/krb5kdc/kadm5.acl,配置對 Kerberos 數據庫的訪問權限的,我只將 EXAMPLE.COM 改為了 TEST.COM,有權限需要可以找資料學習配置

  • 初始化 Kerberos 數據庫

    • kdb5_util create -s -r TEST.COM

    • 鍵入密碼,個人輸入 kerberos,記錄在此,以免忘記

  • 啟動 kerberos 服務

    • 不使用 systemd 啟動 (不帶 systemd 的 docker 鏡像需要用這種方式啟動)

      /usr/sbin/krb5kdc -P /var/run/krb5kdc.pid -r TEST.COM
      /usr/sbin/kadmind -P /var/run/kadmind.pid -r TEST.COM
      
    • 使用 systemd 啟動

      systemctl start krb5kdc
      systemctl start kadmin
      
  • kerberos 服務端使用 kadmin.local 進行管理,創建 root 的 principal (默認是 {當前用戶}/admin@TEST.COM)

    • kadmin.local -q "add_principal root/admin@TEST.COM"
    • 輸入密碼,個人輸入密碼 root,記錄在此,以免忘記
客戶端
  • 安裝客戶端 yum install krb5-workstation

  • 配置 /etc/krb5,將服務端的文件拷貝覆蓋

  • 在客戶端使用 kadmin 管理

  • 認證用戶

    kinit root/admin@TEST.COM

  • 查看當前認證的用戶

    klist

  • 清空當前認證緩存

    kdestroy

3. 配置 kafka 環境

在 kafka 官網下載一個可用版本
在服務端生成認證所需的密鑰
# 創建 principal
kadmin.local -q "add_principal -randkey zookeeper/kafka_kerberos@TEST.COM"
kadmin.local -q "add_principal -randkey kafka/kafka_kerberos@TEST.COM"
kadmin.local -q "add_principal -randkey kafka-client@TEST.COM"# 生成密鑰前必須要建立密鑰放置的目錄
mkdir /root/keytabs# 生成密鑰文件
kadmin.local -q "xst -k /root/keytabs/zookeeper-server.keytab zookeeper/kafka_kerberos@TEST.COM"
kadmin.local -q "xst -k /root/keytabs/kafka-server.keytab kafka/kafka_kerberos@TEST.COM"
kadmin.local -q "xst -k /root/keytabs/kafka-client.keytab kafka-client@TEST.COM"# 測試是否能夠認證成功
kinit -kt /root/keytabs/zookeeper-server.keytab zookeeper/kafka_kerberos@TEST.COM
klist
配置 java 環境
# 安裝JDK安裝包(先查,再下載development環境的)
yum install openjdk-devel# 配置JAVA的真實位置
which java # 找到java位置
ls -lr /usr/bin/java # 找到java鏈接的文件(上面執行的結果)
ls -lrt /etc/alternatives/java # 找到鏈接文件的真實地址(上面執行的結果)# 配置JAVA_HOME (上面執行的結果,截取到系統版本號)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
開始配置 kafka 環境
  • 配置 zookeeper 相關文件

    • 創建 config/kerberos/zookeeper-server-jaas.conf 文件,注意下面內容有兩個分號

      Server {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truestoreKey=trueuseTicketCache=falsekeyTab="/root/keytabs/zookeeper-server.keytab"principal="zookeeper/kafka_kerberos@TEST.COM";
      };
      
    • 拷貝 config/zookeeper.properties 到 config/zookeeper-kerberos.properties,在末尾添加以下內容

      # 根據需要配置 dataDir
      dataDir=/root/kafka_data/zookeeperauthProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
      jaasLoginRenew=3600000
      sessionRequireClientSASLAuth=true
      
    • 創建啟動腳本 zookeeper_start.sh

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/zookeeper-server-jaas.conf'
      ./bin/zookeeper-server-start.sh -daemon config/zookeeper-kerberos.properties
      
    • 創建停止腳本 zookeeper_stop.sh

      ./bin/zookeeper-server-stop.sh config/zookeeper.properties
      
  • 配置 kafka 相關文件

    • 創建 config/kerberos/kafka-server.jaas.conf 文件,注意下面內容有兩個分號

      KafkaServer {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truestoreKey=trueuseTicketCache=falsekeyTab="/root/keytabs/kafka-server.keytab"principal="kafka/kafka_kerberos@TEST.COM";
      };Client {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truestoreKey=trueuseTicketCache=falsekeyTab="/root/keytabs/kafka-server.keytab"principal="kafka/kafka_kerberos@TEST.COM";
      };
      
    • 拷貝 config/server.properties 到 config/server-kerberos.properties,在末尾添加以下內容

      # 根據需要配置 log.dirs
      log.dirs=/root/kafka_data/kafka-logs# 這里要將 localhost 改為 principal 中的值,與 zookeeper/kafka_kerberos 對應
      zookeeper.connect=kafka_kerberos:2181
      listeners=SASL_PLAINTEXT://0.0.0.0:9092
      advertised.listeners=SASL_PLAINTEXT://kafka_kerberos:9092
      security.inter.broker.protocol=SASL_PLAINTEXT
      sasl.mechanism.inter.broker.protocol=GSSAPI
      sasl.enabled.mechanisms=GSSAPI# 需要和 principal 相同
      sasl.kerberos.service.name=kafka
      
    • 創建啟動腳本 kafka_start.sh

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/kafka-server-jaas.conf'
      ./bin/kafka-server-start.sh -daemon config/server-kerberos.properties
      
    • 創建停止腳本 kafka_stop.sh

      ./bin/kafka-server-stop.sh config/server-kerberos.properties
      
    • 創建 topic_list.sh 腳本

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/kafka-server-jaas.conf'
      ./bin/kafka-topics.sh --zookeeper kafka_kerberos:2181 --list
      
    • 創建 create_topic.sh 腳本

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/kafka-server-jaas.conf'
      ./bin/kafka-topics.sh --create --zookeeper kafka_kerberos:2181 --replication-factor 1 --partitions 1 --topic $1
      
    • 創建 delete_topic.sh 腳本

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/kafka-server-jaas.conf'
      ./bin/kafka-topics.sh --delete --zookeeper kafka_kerberos:2181 --topic $1
      
  • 配置 kafka 客戶端相關文件

    • 創建 config/kerberos/kafka-client-jaas.conf 文件,注意下面內容有兩個分號

      KafkaClient {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truestoreKey=trueuseTicketCache=falsekeyTab="/root/keytabs/kafka-client.keytab"principal="kafka-client@TEST.COM";
      };
      
    • 創建 config/client-kerberos.properties 文件

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=GSSAPI
      sasl.kerberos.service.name=kafka
      
    • 創建 producer.sh 腳本

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/kafka-client-jaas.conf'
      ./bin/kafka-console-producer.sh --broker-list kafka_kerberos:9092 --topic $1 --producer.config config/client-kerberos.properties
      
    • 創建 consumer.sh 腳本

      export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/root/kafka_2.13-2.7.1/config/kerberos/kafka-client-jaas.conf'
      ./bin/kafka-console-consumer.sh --bootstrap-server kafka_kerberos:9092 --topic $1 --from-beginning --consumer.config config/client-kerberos.properties
      
過程中報錯處理
  • 報錯 Server not found in Kerberos database

    • 查看 /var/log/krb5kdc.log 中報錯,找不到 zookeeper/localhost@TEST.COM

    • 原因:配置 server-kerberos.properties 文件時,需要更改連接 zookeeper 的 host

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86987.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86987.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86987.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用Python構建一個可擴展的多網盤聚合管理工具 (以阿里云盤為例)

摘要 本文旨在從開發者視角,探討并實踐如何構建一個命令行界面的、支持多網盤聚合管理的工具。我們將以阿里云盤為例,深入解析其API認證與核心操作,并用Python從零開始實現文件列表、重命名、分享等功能。更重要的是,本文將重點討…

筑牢網絡安全屏障

在數字化浪潮席卷全球的今天,網絡空間已成為繼陸、海、空、天之后的 “第五疆域”,深刻影響著國家政治、經濟、軍事等各個領域。“沒有網絡安全就沒有國家安全”,這句論斷精準道出了網絡安全與國家安全之間密不可分的關系。? 網絡安全關乎國…

計算機網絡(一)層

一、分層 分層的意義:簡化復雜性、提高靈活性、促進標準化 (1)法律上國際標準——OSI體系結構 (2)事實上的網絡標準——TCP/IP體系結構 TCP:運輸層的協議 IP:網際層的一個協議 網絡接口層&…

STM32 rs485實現中斷DMA模式收發不定長數據

在STM32F103上使用TD301D485H模塊通過USB轉485/422串口線與電腦通信 TXD (TD301D485H) -> PA2 (STM32F103)RXD (TD301D485H) -> PA3 (STM32F103)CON (TD301D485H) -> PA1 (STM32F103) 由于485是半雙工通信,需要在發送和接收時控制方向引腳(CO…

DDL-8-小結

DDL 小結 DDL 小結 DDL 小結DDL - 數據庫操作DDL - 表操作 DDL - 數據庫操作 查看當前有哪些數據庫 SHOW DATABASES;新建數據庫 CREATE DATABASE 數據庫名;使用數據庫 USE 數據庫名;查詢當前數據庫 SELECT DATABASE();刪除數據庫 DROP DATABASE 數據庫名;DDL - 表操作 查看當前…

Redis 安裝使用教程

一、Redis 簡介 Redis 是一個開源(BSD 許可)、內存數據結構存儲系統,可以用作數據庫、緩存和消息中間件。支持字符串、哈希、列表、集合、有序集合等數據類型,廣泛應用于分布式緩存、排行榜、實時數據分析等場景。 二、下載安裝…

Go語言測試與調試:單元測試與基準測試

以下是《Go語言實戰指南》中關于 測試與調試:單元測試與基準測試 的詳細內容,涵蓋測試編寫、運行、覆蓋率分析與性能測試,適用于實際項目開發與性能優化階段。 一、Go 的測試體系概覽 Go 提供原生的測試工具包 testing,無需第三方…

數字FIR-I型濾波器設計(窗函數法)

目錄 一、實驗目的 二、實驗原理 2.1 概念辨析 2.2 代碼實現邏輯與工具函數 三、實驗內容 3.1 設計帶通濾波器(電平組合法,(理想寬帶低通-理想窄帶低通)x窗函數) 3.2 高通濾波器(…

RHCSA認證題目練習一(配置網絡設置)

一. 題目 配置網絡設置 解題過程&#xff1a; 注意&#xff1a;不可以在xshell中完成&#xff0c;否則會直接斷聯 這里用圖形化解題&#xff0c;更加簡單防止命令記錯 1. 打開圖形化視圖 命令&#xff1a;nmtui 按回車確認 按回車確認 2.首先把IPv4配置 <自動> 改成 …

STL簡介+string模擬實現

STL簡介string模擬實現 1. 什么是STL2. STL的版本3. STL的六大組件4.STL的缺陷5. string5.1 C語言中的字符串5.2 1個OJ題 6.標準庫中的string類6.1 string類(了解)6.2 string類的常用接口說明1.string類對象的常見構造函數2.析構函數(~string())3.賦值函數 (operator) 6.3 stri…

golang實現一個mysql中隨機獲取cookies的API

之前用FASTAPI寫了一個隨機cookies請求的接口,現在嘗試用golang實現同樣的效果 1.編寫go代碼 package mainimport ("database/sql""encoding/json""fmt"_ "github.com/go-sql-driver/mysql""log""net/http"&quo…

[Vue2組件]三角形角標

[Vue2組件]三角形角標 <template><div class"ys-subscript" :style"svgStyle"><svg width"200" height"200" viewBox"0 0 200 200" xmlns"http://www.w3.org/2000/svg"><!-- 三角形背景 - 右…

洛谷刷題4

B4354 [GESP202506 一級] 假期閱讀 題目傳送門 B4354 難度&#xff1a;入門 很簡單的題&#xff0c;如果小A看的頁數≤這本書的頁數&#xff0c;輸出他看的頁數 否則&#xff0c;輸出這本書的頁數 AC代碼&#xff1a; #include <iostream> using namespace std; in…

【基于Echarts的地圖可視化】

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>中國牛只分布可視化</title><script src"https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js"></script><script src"h…

系統架構設計師備考之架構設計基礎

1.計算機系統基礎知識 1.1.計算機系統概述 計算機系統的定義與組成 計算機系統是指用于數據管理的計算機硬件、軟件及網絡組成的系統。 計算機系統可劃分為硬件和軟件兩部分。硬件由機械、電子元器件、磁介質和光介質等物理實體構成&#xff1b; 軟件是一系列按照特定順序組織…

針對華為云服務器使用率過大

從這兩張監控圖可以看出&#xff0c;服務器在大約上午 10:30 前后經歷了一次明顯的負載變化&#xff1a; 1. 圖表解讀 CPU 使用率 從凌晨到上午約 10:00 前&#xff0c;CPU 基本處于 0–2% 的閑置狀態。10:00–14:00 之間&#xff0c;CPU 利用率逐步攀升&#xff0c;多次沖擊 3…

記dwz(JUI)前端框架使用之--服務端響應提示框

目錄 前言 一、DWZ服務器端響應種類 二、如何增加info級別的消息提示 1.打開項目的BaseController.java類 2.打開項目的dwz.min.js文件 3.最后在前端DWZ的主加載頁面或者js文件中添加如下代碼&#xff1a; 前言 本篇文章沒有講太多東西&#xff0c;主要是個人工作記錄保…

leetcode 295. 數據流的中位數

時間復雜度分析&#xff1a;為什么你的中位數查找方案會超時&#xff1f; 分析你提供的MedianFinder實現&#xff0c;其時間復雜度較高的原因主要在于findMedian函數的實現方式。讓我詳細解釋&#xff1a; 代碼時間復雜度分析 你的代碼中兩個主要函數的時間復雜度如下&#…

大語言模型介紹

隨著2022年底 ChatGPT 再一次刷新 NLP 的能力上限&#xff0c;大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;開始接替傳統的預訓練語言模型&#xff08;Pre-trained Language Model&#xff0c;PLM&#xff09; 成為 NLP 的主流方向&#xff0c;基于…

STM32 CCR寄存器

?1. CCR寄存器在輸入捕獲模式下的特性? ?只讀屬性?&#xff1a; 當定時器通道配置為輸入捕獲模式&#xff08;如捕獲上升沿/下降沿&#xff09;時&#xff0c;CCR寄存器硬件自動變為只讀?。軟件寫入操作無效&#xff0c;只能在捕獲事件發生時由硬件自動更新為當前CNT值。…