Skip to content

开启 TLS

任务目标

通过 extraVolumesextraVolumeMounts 字段自定义 TLS 证书。

基于 TLS 证书创建 Secret

Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象,其文档可以参考:Secret。在本文中我们使用 Secret 保存 TLS 证书信息,因此在创建 EMQX 集群之前我们需要基于 TLS 证书创建好 Secret。

  • 将下面的内容保存成 YAML 文件,并通过 kubectl apply 命令部署它

    yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: emqx-tls
    type: kubernetes.io/tls
    stringData:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      tls.crt: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      tls.key: |
        -----BEGIN RSA PRIVATE KEY-----
        ...
        -----END RSA PRIVATE KEY-----

    ca.crt 表示 CA 证书内容,tls.crt 表示服务端证书内容,tls.key 表示服务端私钥内容。此例中上述三个字段的内容被省略,请用自己证书的内容进行填充。

配置 EMQX 集群

下面是 EMQX Custom Resource 的相关配置,你可以根据希望部署的 EMQX 的版本来选择对应的 APIVersion,具体的兼容性关系,请参考 EMQX Operator 兼容性:

使用 MQTT X CLI 验证 TLS 连接

MQTT X CLI 是一款开源的 MQTT 5.0 命令行客户端工具,旨在帮助开发者在不需要使用图形化界面的基础上,也能更快的开发和调试 MQTT 服务与应用。

  • 获取 EMQX 集群的 External IP

  • 使用 MQTT X CLI 订阅消息

    bash
    mqttx sub -h ${external_ip} -p 8883 -t "hello"  -l mqtts --insecure
    
    [10:00:25] › …  Connecting...
    [10:00:25] › ✔  Connected
    [10:00:25] › …  Subscribing to hello...
    [10:00:25] › ✔  Subscribed to hello
  • 创建一个新的终端窗口并使用 MQTT X CLI 发布消息

    bash
    mqttx pub -h ${external_ip} -p 8883 -t "hello" -m "hello world" -l mqtts --insecure
    
    [10:00:58] › …  Connecting...
    [10:00:58] › ✔  Connected
    [10:00:58] › …  Message Publishing...
    [10:00:58] › ✔  Message published
  • 查看订阅终端窗口收到的消息

    bash
    [10:00:58] › payload: hello world