这篇文章主要介绍“怎么访问Kubernetes集群中的EMQ X”,在日常操作中,相信很多人在怎么访问Kubernetes集群中的EMQ X问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么访问Kubernetes集群中的EMQ X”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
Ingress 公开了从集群外部到集群内 服务 的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。官网的一个简单示例如下:
Ingress 为服务提供了供外部访问的 URL,负载均衡流量,TLS/SSL 终止的能力。Ingress 可以简单理解为服务的服务,通过独立的 Ingress 对象来指定请求转发的规则,将请求路由到对应的服务中。
为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。 NGINX Ingress Controller 是由 Kubernetes 提供支持和维护的一个控制器。
本文主要介绍如何通过 NGINX Ingress Controller 来访问 Kubernetes 集群中的 EMQ X。
开始之前,请确保您已经搭建好了一个可用的 Kubernetes 集群,本文示例是基于阿里云标准版托管集群。
参考 emqx charts ,使用 Helm 进行安装
$ helm repo add emqx https://repos.emqx.io/charts
$ kubectl create ns my-emqx
$ helm install my-emqx emqx/emqx -n my-emqx
确保 pod 处于 running 状态
$ kubectl get pod -n my-emqx
NAME READY STATUS RESTARTS AGE
my-emqx-0 1/1 Running 0 97s
my-emqx-1 1/1 Running 0 73s
my-emqx-2 1/1 Running 0 51s
查看 service
$ kubectl get svc -n my-emqx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-emqx ClusterIP 172.21.5.160 <none> 1883/TCP,8883/TCP,8081/TCP,8083/TCP,8084/TCP,18083/TCP 5m
my-emqx-headless ClusterIP None <none> 1883/TCP,8883/TCP,8081/TCP,8083/TCP,8084/TCP,18083/TCP,4370/TCP 5m
参考 Installation Guide,根据不同情况选择不同的配置进行安装,也可以通过 Helm 安装
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo update
$ helm install my-release ingress-nginx/ingress-nginx
因为本文基于阿里云集群,可以直接选择组件安装
查看 service
$ Kubectl get nginx-ingress-lb svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
nginx-ingress-lb LoadBalancer 172.21.6.205 47.99.187.164 80:30639/TCP,443:30396/TCP 3m12s
# ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
name: emqx
spec:
rules:
- host: emqx.cn.iotdp.cn
http:
paths:
- backend:
serviceName: my-emqx
servicePort: 18083
path: /
- backend:
serviceName: my-emqx
servicePort: 8083
path: /mqtt
路由规则:
匹配 /mqtt
路由到 8083 Websocket 端口
其余路径路由到 18083 dashboard
部署资源
$ kubectl apply -f ingress.ymal -n my-emqx
部署完成以后,修改 DNS 解析,便可以通过:http://emqx.cn.iotdp.cn 来访问 dashboard
然后通过 8083
和 /path
访问 Websocket
Ingress 不支支持 TCP 和 UDP 服务,因此 Ingress 使用 --tcp-services-configmap
和 --udp-services-configmap
指向一个包含端口映射关系的 configmap
来访问,key 为外部暴露的端口,value 格式为:<namespace/service name>:<service port>:[PROXY]:[PROXY]
首先修改 ingress-nginx deployment
$ kubectl edit deployment nginx-ingress-controller -n kube-system
添加以下内容到spec.template.spec.containers.args
--tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
--udp-services-configmap=$(POD_NAMESPACE)/udp-services
containers:
- args:
- /nginx-ingress-controller
- '--configmap=$(POD_NAMESPACE)/nginx-configuration'
- '--annotations-prefix=nginx.ingress.kubernetes.io'
- '--publish-service=$(POD_NAMESPACE)/nginx-ingress-lb'
- '--tcp-services-configmap=$(POD_NAMESPACE)/tcp-services'
- '--udp-services-configmap=$(POD_NAMESPACE)/udp-services'
配置 tcp-service
# tcp-service.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
1883: "my-emqx/my-emqx:1883"
最后在服务中配置对应端口
$ kubectl edit svc nginx-ingress-lb -n kube-system
配置如下
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ingress-lb
name: nginx-ingress-lb
namespace: kube-system
spec:
type: LoadBalancer
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
- name: emqx-tcp
port: 1883
protocol: TCP
targetPort: 1883
selector:
app: ingress-nginx
查看 ingress-nginx 服务
$ kubectl get svc nginx-ingress-lb -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-lb ClusterIP 172.21.11.90 <none> 80:30639/TCP,443:30396/TCP,1883:30657/TCP 13m
我们便可以通过 1883
端口连接到 EMQ X 服务了。
到此,关于“怎么访问Kubernetes集群中的EMQ X”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4174826/blog/4791550