在 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 之前,请确保您已完成以下先决条件:
创建 EKS 集群。
有关更多详细信息,请参阅 创建 Amazon EKS 集群。配置 kubectl 以连接到您的 EKS 集群。
有关更多详细信息,请参阅 使用 kubectl 连接集群。在集群上部署 AWS Load Balancer Controller。
有关更多详细信息,请参阅 创建网络负载均衡器。在集群上安装 Amazon EBS CSI 驱动程序。
有关更多详细信息,请参阅 Amazon EBS CSI 驱动程序。安装 EMQX Operator。
有关更多详细信息,请参阅 安装 EMQX Operator。
快速部署 EMQX 集群
以下示例演示了在 EKS 上部署的相关 EMQX 自定义资源(CR)配置。
使用 MQTT X CLI 发布/订阅消息
MQTT X CLI 是一款开源的 MQTT 5.0 命令行客户端工具,旨在帮助开发者在不需要使用图形化界面的基础上,也能更快的开发和调试 MQTT 服务与应用。
- 获取 EMQX 集群的 External IP。
- 订阅消息。
$ 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- 创建一个新的终端窗口并发布消息。
$ 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- 查看订阅终端窗口收到的消息。
[10:00:58] › payload: hello world使用 LoadBalancer 终结 TLS 加密
在 Amazon EKS 中,您可以使用 NLB 进行 TLS 终结,可以按照以下步骤进行操作:
在 AWS Certificate Manager 控制台中导入相关证书,然后通过单击证书 ID 进入详细信息页面,然后记录 ARN 信息
TIP
证书和密钥的导入格式,请参考 import certificate
在 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 信息。