使用 nginx ingress 公开 TCP 服务

Sub*_*wal 5 kubernetes activemq-artemis minikube nginx-ingress

我有一个用于 ActiveMQ-Artemis 的 k8 部署(使用 minikube)。在此,我公开了代理(61616)和控制台(8161)的端口。将端口指向服务。它运行良好。我还为控制台配置了入口控制器。

服务.yaml

kind: Service
metadata:
  name: artemis-service
spec:
  type: ClusterIP
  ports:
  - port: 8161
    name: http-console
    protocol: TCP
    targetPort: 8161
  - port: 61616
    name: netty-connector
    protocol: TCP
    targetPort: 61616
  selector:
    app: artemis
Run Code Online (Sandbox Code Playgroud)

Ingress.yaml

kind: Ingress
metadata:
  name: broker-ingress
  labels:
    name: broker-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: artemis.broker.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: artemis-service
            port: 
              number: 8161
Run Code Online (Sandbox Code Playgroud)

当我点击时,我可以访问 activemq 控制台,http://artemis.broker.com 现在我想使用 NGINX 控制器公开 TCP 端口 (61616),通过它我可以使用 TCP URL 将消息发布/消费到 ActiveMQ 队列。

我在Nginx控制器中找到了TransportServer来公开TCP。 https://docs.nginx.com/nginx-ingress-controller/configuration/transportserver-resource/ 有人可以帮助我如何配置此 TransportServer。

PS-我是 kubernetes 新手。

Har*_*var 3

Nginx Ingress不支持TCPUDP服务

您可以按照本指南设置并公开 TCP 服务:https://kubernetes.github.io/ingress-nginx/user-guide/exusing-tcp-udp-services/

这是我使用的RabbitMQ的YAML配置文件

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  61616: "default/artemis-service:61616"
Run Code Online (Sandbox Code Playgroud)

tcp-service配置放入ingress-nginx命名空间或安装控制器的位置。

将端口添加到Nginx 服务

    - name: proxied-tcp-61616
      port: 61616
      targetPort: 61616
      protocol: TCP
Run Code Online (Sandbox Code Playgroud)

现在您将能够NginxIP:61616从外部连接您的经纪人。

如果您对 K8s 非常陌生,请注意

如果您在同一个 Kubernetes 集群内运行应用程序,则无需公开端口,您可以使用服务名称进行内部通信和连接。

artemis-service:61616其余的将由 K8s 管理 DNS 解析等。