使用nginx入口控制器在k8s中设置rabbitmq
我正在尝试在k8s集群中设置rabbitmq,作为pod部署。还设置了Nginx入口控制器,以便通过使用URL对群集中的服务进行外部访问 以下是我能够访问rabbitmq管理控制台的工作配置:使用nginx入口控制器在k8s中设置rabbitmq,nginx,kubernetes,rabbitmq,kubernetes-ingress,Nginx,Kubernetes,Rabbitmq,Kubernetes Ingress,我正在尝试在k8s集群中设置rabbitmq,作为pod部署。还设置了Nginx入口控制器,以便通过使用URL对群集中的服务进行外部访问 以下是我能够访问rabbitmq管理控制台的工作配置: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx-gateway annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: t
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
但是当我从/
将后端.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控制器日志中我看到的是,对于此配置,请求被定向到[上游默认后端]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配置吗?尝试将management.path\u前缀=/rabbit
添加到rabbitmq配置图中。这就解决了我的问题。试试下面的NGINX Ingres重写规则,它适合我:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-gateway
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- backend:
serviceName: rmq-rabbitmq-ha
servicePort: 15672
path: /rabbit/(.*)
下面是截图:
顺便说一下,如果不需要子路径,则入口配置文件如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-gateway
spec:
rules:
- http:
paths:
- backend:
serviceName: rmq-rabbitmq-ha
servicePort: 15672
path: /
我通过在子域上的根路径上作为主机提供RabbitMQ解决了这个问题,配置了Azure DNS区域
首先,我在AKS k8s集群上安装RabbitMQ:
helm install rabbitmq-resource -f .\rabbitmq.production-values.yaml bitnami/rabbitmq
不幸的是,图表中的HealthCheckAPI使用的是所提供主机的根路径。由于我已经在使用入口控制器的静态IP和DNS区域将我的自定义域绑定到群集,因此很容易为静态入口IP设置一个额外的别名,并将其配置为入口资源中的子域主机
因此,在我在上一个命令中使用文件RabbitMQ.production-values.yaml应用的RabbitMQ配置值中,请确保在以下值处使用根路径:
...
rabbitmq:
...
extraConfiguration: |-
...
#management.path_prefix = /
...
ingress:
...
enabled: true
path: /
在Azure门户中,您的k8s特定群集资源组具有名称约定:
MC_<primary_cluster_resource_group>_<cluster_name>_<region>
请注意,通过域的主命名空间,您可以在根路径上为网站或其他服务提供服务,通过子域,您也可以在不干扰Healthcheck API的情况下,通过根路径为RabbitMQ(管理)提供服务
现在应用入口资源,一切都将顺利进行 您能描述一下入口并检查是否应用了设置吗?正如你所说的,它失败的原因毫无意义,一切看起来都很完美。@BinaryBullet这正是让我惊讶的,我通过kubectl Descripte ingress
验证了配置,它清楚地显示了应用的更改。很快,是否只有rabbitmq入口的行为是这样的,或者您是否有其他具有类似路径更改的入口,并且它们工作正常?感谢您的响应!将很快尝试更新结果。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-resource-handler
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- yourdomain.com
- rabbitmq.yourdomain.com
secretName: tls-secret
rules:
- host: yourdomain.com
http:
paths:
- backend:
serviceName: website
servicePort: 80
path: /(.*)
- host: rabbitmq.yourdomain.com
http:
paths:
- backend:
serviceName: rabbitmq-resource
servicePort: 15672
path: /(.*)