如何用NGINX Ingress的TransportServer暴露ActiveMQ-Artemis的TCP端口
配置NGINX Ingress Controller暴露ActiveMQ Artemis的TCP端口(61616)
1. 编写TransportServer配置文件
创建artemis-tcp-transportserver.yaml,通过该资源告诉NGINX Ingress Controller转发TCP流量到你的Artemis服务:
apiVersion: k8s.nginx.org/v1alpha1 kind: TransportServer metadata: name: artemis-tcp spec: # 定义NGINX监听的TCP端口 listener: name: artemis-tcp-listener port: 61616 protocol: TCP # 配置上游服务(你的Artemis Service) upstreams: - name: artemis-tcp-upstream service: artemis-service port: 61616 sessionAffinity: None # 不需要会话保持可设为None # 定义流量转发规则:将监听的TCP流量转发到上游服务 action: pass: artemis-tcp-upstream
2. 部署TransportServer到集群
执行kubectl命令应用配置:
kubectl apply -f artemis-tcp-transportserver.yaml
3. 配置NGINX Ingress Controller的端口映射
在minikube环境中,需要确保NGINX Ingress Controller的Service暴露61616端口:
- 查看当前Ingress Controller的Service(默认位于
ingress-nginx命名空间):
kubectl get svc -n ingress-nginx
- 如果Service中没有61616端口的映射,创建或修改Service配置文件
ingress-nginx-controller-svc.yaml:
apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: ports: # 保留原有HTTP/HTTPS端口配置 - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 # 添加Artemis TCP端口映射 - name: artemis-tcp port: 61616 protocol: TCP targetPort: 61616 type: NodePort selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/component: controller
- 应用修改:
kubectl apply -f ingress-nginx-controller-svc.yaml -n ingress-nginx
4. 测试TCP连接
- 获取minikube节点IP:
minikube ip
- 获取61616端口对应的节点端口:
kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.spec.ports[?(@.name=="artemis-tcp")].nodePort}'
- 使用TCP工具(如
telnet或nc)测试连接:
telnet $(minikube ip) <获取到的节点端口>
成功连接后,即可通过tcp://<minikube-ip>:<节点端口>地址使用ActiveMQ客户端发布/消费消息。
内容的提问来源于stack exchange,提问作者Subhidh Agarwal
相关产品推荐
相关产品推荐

