本文部署的 EMQ X Broker 版本为 4.3.1
一、RBAC 鉴权
集群需要使用到 Kubernetes 的 API Server,但是普通 Pod 是没有权限访问的,需要授权:
1 | --- |
如果没有授权,会有如下报错:
1 | Ekka(AutoCluster): Discovery error: {403,"{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"endpoints "emqx-headless" is forbidden: User "system:serviceaccount:default:default" cannot get resource "endpoints" in API group "" in the namespace "default"","reason":"Forbidden","details":{"name":"emqx-headless","kind":"endpoints"},"code":403}"} |
二、新增 ConfigMap
1 | apiVersion: v1 |
默认情况下 EMQ X 使用带有 EMQX_ 的前缀的环境变量来覆盖配置文件中的配置项环境变量名称到配置文件键值名称映射规则如下:将 EMQX_ 前缀移除;大写字符替换成小写;双下划线 __ 替换成点 . 详见:使用环境变量修改配置
- cluster.kubernetes.apiserver 为 kubernetes apiserver 的地址,可以通过 kubectl cluster-info 命令获取
- cluster.kubernetes.service_name 为 Service 的 name
- cluster.kubernetes.app_name 为 EMQ X Broker 的 node.name 中 @ 符号之前的部分,需要同时将集群中 EMQ X Broker 设置为统一的 node.name 的前缀
三、新增 Deployment
1 | apiVersion: apps/v1 |
- 1883 MQTT 协议端口
- 8883 MQTT/SSL 端口
- 8083 MQTT/WebSocket 端口
- 8084 MQTT/WebSocket/SSL 端口
- 8081 管理 API 端口
- 18083 Dashboard 端口
四、新增 Service
1 | apiVersion: v1 |
五、放行 TCP 端口
见:阿里云 k8s 部署 Spring Cloud Alibaba 微服务实践 (五) Kubernetes TCP Ingress
参考: