我正在尝试设置rabbitmq,部署为pod,在k8s集群中。还设置了Nginx入口控制器,以便通过使用URL对集群中的服务进行外部访问。
下面是工作配置,通过它我可以访问rabbitmq管理控制台:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-gateway
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- ***ABC***.com
secretName: gateway-tls-secret
rules:
- host: ***ABC***.com
http:
paths:
- backend:
serviceName: ie-rabbitmq
servicePort: 15672
path: /
登录Nginx控制器
10.202.3.59 - - [24/Dec/2019:06:59:19 +0000] "GET /api/auth HTTP/2.0" 200 57 "https://***ABC***.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" 324 0.003 [ie-poc-ie-rabbitmq-15672] [] 10.244.5.235:15672 57 0.003 200 eed95f6d3ee6bddae7a7128b4b500152
10.202.3.59 - - [24/Dec/2019:06:59:19 +0000] "GET /js/tmpl/login.ejs?0.16274381270760774 HTTP/2.0" 200 630 "https://***ABC***.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" 48 0.001 [ie-poc-ie-rabbitmq-15672] [] 10.244.5.235:15672 630 0.001 200 75c43c0e3e3d8de715c4ffa540a4b0a8
但是当我将backend.path
从/
更改为/rabbit
时,服务无法访问。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-gateway
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- ***ABC***.com
secretName: gateway-tls-secret
rules:
- host: ***ABC***.com
http:
paths:
- backend:
serviceName: ie-rabbitmq
servicePort: 15672
path: /rabbit
从Nginx控制器日志中我看到的是,对于此配置,请求被定向到[upstream-default-backend] 10.244.3.84:8080
,但理想情况下,它应将请求重定向到[ie-poc-ie-rabbitmq-15672] [] 10.244.5.235:15672
,这是在请求成功时观察到的。
10.202.3.59 - - [24/Dec/2019:06:57:15 +0000] "GET /api/auth HTTP/2.0" 404 21 "https://i***ABC***.com/rabbit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" 57 0.001 [upstream-default-backend] [] 10.244.3.84:8080 21 0.001 404 2a1d6b6abf1b7ff03884f275c4a15c14
10.202.3.59 - - [24/Dec/2019:06:57:15 +0000] "GET /js/tmpl/login.ejs?0.4076380641124395 HTTP/2.0" 404 21 "https://***ABC***.com/rabbit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" 47 0.001 [upstream-default-backend] [] 10.244.3.84:8080 21 0.001 404 df534e5e9b2e5aabb9fa6bb272d4b5e9
有人能帮助我了解为什么第二个配置不工作/加载rabbitmq配置?
4条答案
按热度按时间kognpnkq1#
尝试下面的NGINX入口重写规则,它对我很有效:
下面是截图:
顺便说一下,如果不需要子路径,Ingress配置文件如下:
hc2pp10m2#
尝试将
management.path_prefix = /rabbit
添加到您的Rabbitmq配置Map中。这为我解决了这个问题。pbpqsu0x3#
我通过在子域的根路径上将RabbitMQ作为主机来提供服务,并使用Azure DNS区域进行配置,从而解决了这个问题。
首先,我使用Helm v3在我的AKS k8s集群上安装RabbitMQ:
不幸的是,图表中的Healthcheck API被配置为使用所提供主机的根路径。由于我已经使用了入口控制器的静态IP,并且还使用了DNS区域将我的自定义域绑定到集群,因此很容易为静态入口IP设置一个额外的别名,并将其配置为入口资源中的子域主机。
因此,在RabbitMQ配置值中(我在前面的命令中使用了文件rabbitmq.production-values.yaml),请确保在以下值处使用根路径:
在Azure门户中,转到您的k8s特定集群ResourceGroup,它具有以下命名约定:
转到绑定到入口控制器的公共IP地址。然后转到设置〉配置并点击“创建别名记录”,填写现有DNS区域的子域名。例如
rabbitmq.yourdomain.com
现在编辑您的Ingress资源,使其看起来如下所示:
现在应用入口资源,一切都将顺利工作!
deikduxw4#
我通过在RabbitMQ additionalConfig中引入'management.path_prefix = /rabbit-mgmt/'修复了这个问题。