Kafka-Exporter 9308端口启用TLS认证的完整指南

发布于:2025-03-21 ⋅ 阅读:(38) ⋅ 点赞:(0)

#作者:张桐瑞

1 方案描述

Kafka Exporter使用TLS进行Https认证,确保数据传输的安全性、完整性和保密性。该方案核心在于利用证书来实现服务器与客户端之间的双向身份验证。

2 涉及版本

Kafka-exporter在1.4.2版本后可配置TLS进行Https认证。

3 使用CA自签证书

(本示例只说明自签证书过程,具体请使用符合安全的证书)

3.1一键生成证书脚本

可以直接使用如下脚本一键生成证书脚本,根据3.1.2执行结果进行操作。

3.1.1证书脚本

#!/bin/bash
read -p "Enter your domain or ip [www.example.com/10.10.49.172]: " INPUT
echo "1. Create ca private key..."
openssl genrsa -des3 -out selfca.key 2048
echo "2. Create ca root certificate..."
openssl req -new -x509 -days 3650 -key selfca.key -subj "/C=CN/ST=BJ/L=BJ/O=MyRootCA/OU=MyCA/CN=CA" -out selfca.crt
echo "3. Create server key and certificate signing request..."
openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=$INPUT" -out server.csr
echo "4. Sign SSL certificate..."
openssl x509 -req -extfile <(printf "subjectAltName=IP:$INPUT") -days 3650 -in server.csr -CA selfca.crt -CAkey selfca.key -CAcreateserial -out server.crt
echo "5. Create end, next work..."
echo "Copy server.crt and server.key to your server machine"

3.1.2执行结果

$ ./onekeyssl.sh
Enter your domain or ip [www.example.com/10.10.49.172]: 10.10.19.1
1. Create ca private key...
Generating RSA private key, 2048 bit long modulus (2 primes)
..................................................+++++
.....................................+++++
e is 65537 (0x010001)
Enter pass phrase for selfca.key:【输入自定义密码】
Verifying - Enter pass phrase for selfca.key:【重复密码】
2. Create ca root certificate...
Enter pass phrase for selfca.key:【重复密码】
3. Create server key and certificate signing request...
Generating a RSA private key
.............................................................+++++
..........+++++
writing new private key to 'server.key'
-----
4. Sign SSL certificate...
Signature ok
subject=C = CN, ST = BJ, L = BJ, O = MyRootServer, OU = MyServer, CN = 10.10.19.1
Getting CA Private Key
Enter pass phrase for selfca.key:【重复密码】
5. Create end, next work...
Copy server.crt and server.key to your server machine

3.2分步自建证书过程

3.2.1生成CA私钥

# openssl genrsa -des3 -out selfca.key 2048 

运行命令后需要输入一个自定义密码两次,以后每次使用这个私钥都要输入密码
3.2.1.1说明:
这条命令使用 OpenSSL 工具生成一个带有Triple-DES(3DES)加密的密码保护的2048位RSA私钥文件,各个参数的含义如下:

  • openssl: OpenSSL 工具的命令行执行器。
  • genrsa: 生成RSA密钥的命令。
  • -des3: 使用Triple-DES算法对生成的私钥进行加密,这会在生成私钥时要求你设置一个密码,以便在每次使用私钥时都需要提供密码。
  • -out selfca.key: 指定生成的私钥的输出文件名为 selfca.key,私钥文件将被保存在当前工作目录中。
  • 2048: 指定生成的RSA私钥的位数为2048位,这是一种常见的安全密钥长度。

3.2.2生成CA自签名证书

openssl req -new -x509 -days 3650 -key selfca.key -subj "/C=CN/ST=BJ/L=BJ/O=MyRootCA/OU=MyCA/CN=CA" -out selfca.crt

3.2.2.1说明

  • openssl req: 这是 OpenSSL 工具中用于处理证书签署请求(CSR)的命令。
  • -new: 表示创建新的 CSR。
  • -x509: 表示生成自签名的 X.509 证书,而不是生成 CSR。
  • -days 3650: 设置证书的有效期为 3650 天(10 年)。
  • -key selfca.key: 指定用于生成证书的私钥文件为 selfca.key。
  • -subj “/C=CN/ST=BJ/L=BJ/O=MyRootCA/OU=MyCA/CN=CA”: 设置证书主题(Subject)的信息。这里使用了简化的 Distinguished Name (DN),包括了国家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、组织(O=MyRootCA)、组织单位(OU=MyCA)、通用名称(CN=CA)等信息。
  • -out selfca.crt: 指定生成的证书文件的输出路径和文件名,这里为 selfca.crt。

3.2.3生成服务器私钥和证书申请文件CRS

openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=10.10.49.172" -out server.csr

3.2.3.1说明

openssl req: 这是 OpenSSL 工具中用于处理证书签署请求(CSR)的命令。

  • -newkey rsa:2048: 创建一个新的 RSA 密钥对,其中包括一个 2048 位的 RSA 私钥和相应的公钥。
  • -nodes: 生成的私钥不使用密码进行加密。这意味着私钥文件 server.key 将不需要密码才能访问。
  • -keyout server.key: 指定生成的私钥文件的输出路径和文件名,这里为 server.key。
  • -subj “/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=10.10.49.172”: 设置证书主题(Subject)的信息。这里使用了简化的 Distinguished Name (DN),包括了国家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、组织(O=MyRootServer)、组织单位(OU=MyServer)、通用名称(CN=10.10.49.172)等信息。通用名称(CN)通常用于指定服务器的主机名或 IP 地址。
  • -out server.csr: 指定生成的证书签署请求文件的输出路径和文件名,这里为 server.csr。
    3.2.4使用CA根证书签名SSL证书
    $ openssl x509 -req -extfile <(printf “subjectAltName=IP:10.10.49.172”) -days 3650 -in server.csr -CA selfca.crt -CAkey selfca.key -CAcreateserial -out server.crt
    openssl x509: 这是 OpenSSL 工具中用于处理 X.509 证书的命令。
    -req: 表示输入的文件是证书签署请求(CSR)。
    -extfile <(printf “subjectAltName=IP:10.10.49.172[,DNS:<YOUR_DOMAIN>,…]”): 使用扩展文件,该文件包含了额外的证书扩展信息。在这里,subjectAltName 扩展用于指定主体的备用名称(Subject Alternative Name),这里指定了 IP 地址 10.10.49.172。你也可以在方括号中添加其他主机名或 IP 地址,用逗号分隔。
    -days 3650: 设置生成的证书的有效期为 3650 天(10 年)。
    -in server.csr: 指定输入的证书签署请求文件,这里为 server.csr。
    -CA selfca.crt: 指定用于签署证书的 CA 证书文件,这里为 selfca.crt。
    -CAkey selfca.key: 指定用于签署证书的 CA 私钥文件,这里为 selfca.key。
    -CAcreateserial: 创建一个新的序列号文件,该文件用于跟踪 CA 签署的证书的唯一性。
    -out server.crt: 指定生成的证书文件的输出路径和文件名,这里为 server.crt。
    selfca.key:CA私钥,用于后续签名SSL证书
    selfca.crt:CA根证书,用于后续签名SSL证书,需要加入到操作系统或浏览器的信任列表中

3.3最终的文件列表

server.key:服务器私钥,需要配置到https服务
server.csr:证书签署请求文件,后续没用
server.crt:自签名SSL证书,需要配置到https服务

4 Exporter启动命令

./kafka_exporter  --kafka.server=localhost:9092   --server.tls.key-file=/kafka_path_1/server.key   --server.tls.cert-file=/kafka_path_1/server.crt --server.tls.ca-file=/kafka_path_1/selfca.crt --server.tls.enabled

4.1参数说明

  • –kafka.server #Addresses (host:port) of Kafka server
  • –server.tls.enabled #Enable TLS for web server
  • –server.tls.ca-file #The certificate authority file for the web server
  • –server.tls.cert-file #The certificate file for the web server
  • –server.tls.key-file #The key file for the web server

5 Prometheus.yml编写

…
scrape_configs:
  - job_name: kafka-1
    scheme: https
    static_configs:
      - targets:
        - kafka_ip_1:9308
    tls_config:
      insecure_skip_verify: false
      ca_file: "/kafka_path_1/selfca.crt"
  - job_name: kafka-2
    scheme: https
    static_configs:
      - targets:
        - kafka_ip_2:9308
    tls_config:
      insecure_skip_verify: false
      ca_file: "/kafka_path_2/selfca.crt"
  - job_name: kafka-3
    scheme: https
    static_configs:
      - targets:
        - kafka_ip_3:9308
    tls_config:
      insecure_skip_verify: false
      ca_file: "/kafka_path_3/selfca.crt"
…

5.1配置说明

tls_config: 配置了TLS相关的设置:

  • insecure_skip_verify: false: 设置为false表示在建立TLS连接时会验证服务器的证书链和主机名。
  • ca_file: 指定CA证书文件的路径,这个文件包含了用来验证Kafka Exporter提供的证书的根证书。

6 回滚方案

6.1Kafka-Exporter参数回滚

仍使用原来启动参数来启动kafka-exporter。

6.2Prometheus配置回滚

仍使用原来prometheus配置文件采集指标。