端口说明:
端口说明 | 集群内端口 | Nodeport | 备注 |
---|---|---|---|
mqtt | 1883 | 31274 | Port for MQTT |
mqttssl | 8883 | 31170 | Port for MQTT(SSL) |
mgmt | 8081 | 无 | |
ws | 8083 | 30099 | Port for WebSocket/HTTP |
wss | 8084 | 32580 | Port for WSS/HTTPS |
dashboard | 18083 | 31303 | Port for dashboard |
一、Helm在线部署EMQX集群
1、安装helm
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
helm version
2、添加helm仓库
helm repo add emqx https://repos.emqx.io/charts
helm repo list
helm repo update
helm search repo emqx
3、创建storageClass或者pv,pvc(略)
4、使用持久化资源storageClass安装emqx
helm install emqx emqx/emqx \
--set replicaCount=3 \
--set image.tag=5.2.1 \
--set persistence.enabled=true \
--set persistence.size=100Mi \
--set persistence.storageClass=nfs \
--set service.type=NodePort \
--set service.nodePorts.mqtt=31274 \
--set service.nodePorts.mqttssl=31170 \
--set service.nodePorts.ws=30099 \
--set service.nodePorts.wss=32580 \
--set service.nodePorts.dashboard=31303 \
--namespace emqx \
--create-namespacee
5、使用持久化资源pv,pvc安装emqx
helm install emqx emqx/emqx \
--set replicaCount=3 \
--set image.tag=5.2.1 \
--set persistence.enabled=true \
--set persistence.size=100Mi \
--set persistence.existingClaim=emqx-data-pvc \
--set service.type=NodePort \
--set service.nodePorts.mqtt=31274 \
--set service.nodePorts.mqttssl=31170 \
--set service.nodePorts.ws=30099 \
--set service.nodePorts.wss=32580 \
--set service.nodePorts.dashboard=31303 \
--namespace emqx \
--create-namespace
6、验证emqx
heml status -n emqx emqx
helm list -n emqx
kubectl get pods -n emqx
kubectl get svc -n emqx
kubectl get pv,pvc -n emqx
7、登录dashboard
http://192.168.1.47:31303
admin / public #默认账号密码
admin / public123
8、创建mysql数据库实例emqx_user,并授权
mysql> create databases mqtt_user;
mysql> grant all privileges on mqtt_user.* to 'mqtt_user'@'%' identified by 'mqtt123';
myql> flush privileges;
9、创建表
- https://docs.emqx.com/zh/enterprise/v5.2/access-control/authn/mysql.html
mysql> CREATE TABLE `mqtt_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password_hash` varchar(100) DEFAULT NULL,
`salt` varchar(35) DEFAULT NULL,
`is_superuser` tinyint(1) DEFAULT 0,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
9、插入表数据
在此表中使用 username 作为查找条件。
例如,我们希望添加一名用户名为 emqx_user、密码为 public、盐值为 slat_foo123、散列方式为 sha256 且超级用户标志为 true 的用户:
mysql> INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('mqtt_user', SHA2(concat('public', 'slat_foo123'), 256), 'slat_foo123', 1);
10、添加客户端认证
![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/202307240241
二、Helm离线部署EMQX集群
1、制作应用的离线安装包(需能访问外放)
1.1 安装helm
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
helm version
1.2 添加仓库
helm repo add emqx https://repos.emqx.io/charts
1.3 使用helm下载对应版本的chats
1.3.1 查询版本
helm search repo emqx --version 5.2.1
1.3.2 pull应用chats到本地并上传到指定服务器
helm pull emqx/emqx --version 5.2.1
2、下载并定制镜像
docker pull emqx/emqx:5.2.1
docker login
docker tag emqx/emqx:5.2.1 58.34.20.154:5500/iecs/emqx:5.2.1
docker push 58.34.20.154:5500/iecs/emqx:5.2.1
docker login
docker pull 58.34.20.154:5500/iecs/emqx:5.2.1
docker tag 58.34.20.154:5500/iecs/emqx:5.2.1 10.140.20.28/iecs/emqx:5.2.1
docker push 10.140.20.28/iecs/emqx:5.2.1
3、创建storageClass或者pv\pvc(略)
4、使用持久化资源storageClass创建emqx集群
helm install emqx ./emqx-5.2.1.tgz \
--set replicaCount=3 \
--set image.repository=10.140.20.28/iecs/emqx:5.2.1 \
--set image.tag=5.2.1 \
--set persistence.enabled=true \
--set persistence.size=100Mi \
--set persistence.storageClass=nfs \
--set service.type=NodePort \
--set service.nodePorts.mqtt=31274 \
--set service.nodePorts.mqttssl=31170 \
--set service.nodePorts.ws=30099 \
--set service.nodePorts.wss=32580 \
--set service.nodePorts.dashboard=31303 \
--namespace emqx \
--create-namespacee
5、使用持久化资源pv\pvc创建emqx集群
helm install emqx ./emqx-5.2.1.tgz \
--set replicaCount=3 \
--set image.repository=10.140.20.28/iecs/emqx:5.2.1 \
--set image.tag=5.2.1 \
--set persistence.enabled=true \
--set persistence.size=100Mi \
--set persistence.existingClaim=emqx-data-pvc \
--set service.type=NodePort \
--set service.nodePorts.mqtt=31274 \
--set service.nodePorts.mqttssl=31170 \
--set service.nodePorts.ws=30099 \
--set service.nodePorts.wss=32580 \
--set service.nodePorts.dashboard=31303 \
--namespace emqx \
--create-namespace
6、验证emqx
heml status -n emqx emqx
helm list -n emqx
kubectl get pods -n emqx
kubectl get svc -n emqx
kubectl get pv,pvc -n emqx
7、登录dashboard
http://192.168.1.47:31303
admin / public #默认账号密码
admin / public123
8、创建mysql数据库实例emqx_user,并授权
mysql> create databases mqtt_user;
mysql> grant all privileges on mqtt_user.* to 'mqtt_user'@'%' identified by 'mqtt123';
myql> flush privileges;
9、创建表
- https://docs.emqx.com/zh/enterprise/v5.2/access-control/authn/mysql.html
mysql> CREATE TABLE `mqtt_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password_hash` varchar(100) DEFAULT NULL,
`salt` varchar(35) DEFAULT NULL,
`is_superuser` tinyint(1) DEFAULT 0,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
10、插入表数据
在此表中使用 username 作为查找条件。
例如,我们希望添加一名用户名为 emqx_user、密码为 public、盐值为 slat_foo123、散列方式为 sha256 且超级用户标志为 true 的用户:
mysql> INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('mqtt_user', SHA2(concat('public', 'slat_foo123'), 256), 'slat_foo123', 1);
11、添加客户端认证
三、卸载EMQX集群
#卸载emqx集群
helm uninstall emqx -n emqx
#删除pv/pvc
kubectl delete -n emqx pvc emqx-data-emqx-0