背景
在使用emqx作为mqtt时需要我们需要拦截client的各种行为,如连接,发送消息,认证等。除了使用emqx自带的插件机制。我们也可以用多语言-钩子扩展来实现这个功能,但是目前emqx仅仅支持单个grpc服务端的设置,所以会有单点问题。当然也可以用外部的流量代理。本文在k8s环境下使用sidecar的模式对grpc的流量做负载均衡,以实现高可用的效果。如图所示:
进行拦截:
打包emqx-exhook-server
docker build -f Dockerfile -t emqx-exhook-server:0.0.1 .
k8s 部署emqx
apiVersion: apps/v1
kind: Deployment
metadata:
name: emqx-deployment
labels:
app: emqx
spec:
replicas: 1
selector:
matchLabels:
app: emqx
template:
metadata:
labels:
app: emqx
spec:
initContainers:
- name: emqx-exhook-server
image: emqx-exhook-server:0.0.1
restartPolicy: Always
containers: