Kubernetes nginx ingress rabbitmq 管理和 kibana
Kubernetes nginx ingress rabbitmq management and kibana
在我的 AKS 集群上,我有一个 Nginx 入口控制器,我用它在 AKS 上反向代理我的 kibana 服务 运行ning。但是,我想通过入口、rabbitmq 管理控制台添加另一个 http 服务。
我无法同时使用以下配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-aegis
namespace: dev
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- dev.endpoint.net
secretName: dev-secret
rules:
- host: dev.endpoint.net
http:
paths:
- path: /
backend:
serviceName: kibana-kibana
servicePort: 5601
- path: /rabbit
backend:
serviceName: rabbitmq
servicePort: 15672
Kibana 在 root 下运行良好,但 RabbitMQ 无法使用 503
和 /
以外的任何路径加载。如果 RabbitMQ 的路径是 /
那么它工作正常但是 Kibana 不会 运行.
我认为这是因为它们在内部位于根目录 localhost:15672 上,因此它重定向到 dev.endpoint.net 上的 /。
如何从一个端点获得多个服务,例如 Kibana 和 RabbitmQ 运行ning?
一个想法是使用基于主机名的规则来切换后端。但是,这需要通配符或 SAN SSL 证书。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-aegis
namespace: dev
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- dev.endpoint.net
- rabbit.endpoint.net
secretName: dev-secret
rules:
- host: dev.endpoint.net
http:
paths:
- path: /
backend:
serviceName: kibana-kibana
servicePort: 5601
- host: rabbit.endpoint.net
http:
paths:
- path: /
backend:
serviceName: rabbitmq
您需要做的是将 kibana 的 basePath
设置为 /kibana
见下文url
https://www.elastic.co/guide/en/kibana/current/settings.html
您希望将 server.basePath
配置为 /kibana
。然后这将对反向代理问题进行排序,您可以将 MQ 直接保留在根目录 /
您还可以在 kibana
pod 中设置 SERVER_BASEPATH
环境变量,它会自动从该变量中选择基本路径
对于通过入口的 RabbitMQ 管理 UI,在 rabbitmq.conf 文件中设置以下内容(您可以使用 configmaps 并将文件挂载到 pod 中)
management.path_prefix = /rabbit
在 Ingress 中设置以下内容:
...
path: /rabbit(/|$)(.*)
...
在我的 AKS 集群上,我有一个 Nginx 入口控制器,我用它在 AKS 上反向代理我的 kibana 服务 运行ning。但是,我想通过入口、rabbitmq 管理控制台添加另一个 http 服务。
我无法同时使用以下配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-aegis
namespace: dev
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- dev.endpoint.net
secretName: dev-secret
rules:
- host: dev.endpoint.net
http:
paths:
- path: /
backend:
serviceName: kibana-kibana
servicePort: 5601
- path: /rabbit
backend:
serviceName: rabbitmq
servicePort: 15672
Kibana 在 root 下运行良好,但 RabbitMQ 无法使用 503
和 /
以外的任何路径加载。如果 RabbitMQ 的路径是 /
那么它工作正常但是 Kibana 不会 运行.
我认为这是因为它们在内部位于根目录 localhost:15672 上,因此它重定向到 dev.endpoint.net 上的 /。
如何从一个端点获得多个服务,例如 Kibana 和 RabbitmQ 运行ning?
一个想法是使用基于主机名的规则来切换后端。但是,这需要通配符或 SAN SSL 证书。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-aegis
namespace: dev
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- dev.endpoint.net
- rabbit.endpoint.net
secretName: dev-secret
rules:
- host: dev.endpoint.net
http:
paths:
- path: /
backend:
serviceName: kibana-kibana
servicePort: 5601
- host: rabbit.endpoint.net
http:
paths:
- path: /
backend:
serviceName: rabbitmq
您需要做的是将 kibana 的 basePath
设置为 /kibana
见下文url
https://www.elastic.co/guide/en/kibana/current/settings.html
您希望将 server.basePath
配置为 /kibana
。然后这将对反向代理问题进行排序,您可以将 MQ 直接保留在根目录 /
您还可以在 kibana
pod 中设置 SERVER_BASEPATH
环境变量,它会自动从该变量中选择基本路径
对于通过入口的 RabbitMQ 管理 UI,在 rabbitmq.conf 文件中设置以下内容(您可以使用 configmaps 并将文件挂载到 pod 中)
management.path_prefix = /rabbit
在 Ingress 中设置以下内容:
...
path: /rabbit(/|$)(.*)
...