关于物联网:通过-NGINX-Ingress-Controller-访问-Kubernetes-集群中的-EMQ-X

58次阅读

共计 3376 个字符,预计需要花费 9 分钟才能阅读完成。

Ingress 介绍

Ingress 公开了从集群内部到集群内 服务 的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源上定义的规定管制。官网的一个简略示例如下:

Ingress 为服务提供了供内部拜访的 URL,负载平衡流量,TLS/SSL 终止的能力。Ingress 能够简略了解为服务的服务,通过独立的 Ingress 对象来指定申请转发的规定,将申请路由到对应的服务中。

为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。NGINX Ingress Controller 是由 Kubernetes 提供反对和保护的一个控制器。

本文次要介绍如何通过 NGINX Ingress Controller 来拜访 Kubernetes 集群中的 EMQ X。

筹备

开始之前,请确保您曾经搭建好了一个可用的 Kubernetes 集群,本文示例是基于阿里云标准版托管集群。

装置 EMQ X

参考 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

部署 NGINX Ingress Controller

参考 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 对象

# 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

TCP

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 服务了。

版权申明:本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.io/cn/blog/access-emqx-in-kubernetes-cluster-through-nginx-ingress-controller

正文完
 0