Skip to content

在 Amazon EKS 中部署 EMQX

EMQX Operator 支持在 Amazon 容器服务 EKS(Elastic Kubernetes Service)上运行。Amazon EKS 是一种托管的 Kubernetes 服务,可简化容器化应用程序的部署、管理和扩展。EKS 提供了 Kubernetes 控制平面和节点组,自动处理节点替换、升级和修补。它支持 AWS 服务,如 Load Balancers、RDS 和 IAM,并与其他 Kubernetes 生态系统工具无缝集成。

有关详细介绍,请参阅 什么是 Amazon EKS

前提条件

在 EKS 上部署 EMQX 之前,请确保您已完成以下先决条件:

快速部署 EMQX 集群

以下示例演示了在 EKS 上部署的相关 EMQX 自定义资源(CR)配置。

使用 MQTT X CLI 发布/订阅消息

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

  1. 获取 EMQX 集群的 External IP。
  1. 订阅消息。
bash
$ mqttx sub -t 'hello' -h ${external_ip} -p 1883

[10:00:25] › …  Connecting...
[10:00:25] › ✔  Connected
[10:00:25] › …  Subscribing to hello...
[10:00:25] › ✔  Subscribed to hello
  1. 创建一个新的终端窗口并发布消息。
bash
$ mqttx pub -t 'hello' -h ${external_ip} -p 1883 -m 'hello world'

[10:00:58] › …  Connecting...
[10:00:58] › ✔  Connected
[10:00:58] › …  Message Publishing...
[10:00:58] › ✔  Message published
  1. 查看订阅终端窗口收到的消息。
bash
[10:00:58] › payload: hello world

使用 LoadBalancer 终结 TLS 加密

在 Amazon EKS 中,您可以使用 NLB 进行 TLS 终结,可以按照以下步骤进行操作:

  1. AWS Certificate Manager 控制台中导入相关证书,然后通过单击证书 ID 进入详细信息页面,然后记录 ARN 信息

    TIP

    证书和密钥的导入格式,请参考 import certificate

  2. 在 EMQX 自定义资源的 Annotations 中添加如下注释:

    yaml
    ## 指定由 AWS Certificate Manager 管理的一个或多个证书的 ARN。
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:xxxxx:certificate/xxxxxxx
    ## 指定是否对负载均衡器和 kubernetes pod 之间的后端流量使用 TLS。
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
    ## 指定带有 TLS 侦听器的前端端口。这意味着通过 AWS NLB 服务访问 1883 端口需要通过 TLS 认证,
    ## 但是直接访问 K8S service port 不需要 TLS 认证
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "1883"

    service.beta.kubernetes.io/aws-load-balancer-ssl-cert 的值是我们在第一步记录的 ARN 信息。