Я пытаюсь настроить очередь задач RabbitMQ в кластере kubernetes и должен иметь возможность заполнять очередь задач снаружи кластера kubernetes. Я пытаюсь выполнить это sh, используя входной контроллер nginx. Я сталкиваюсь с ошибками при попытке объявить очередь или отправить сообщения в существующую очередь за пределами кластера. Используя amqp-tools cli в Ubuntu из-за пределов кластера, я получаю сообщение об ошибке:
$ export BROKER_URL=amqp://<host-name>:80/rabbitmq
$ /usr/bin/amqp-declare-queue --url=$BROKER_URL -q foo -d
logging in to AMQP server: invalid AMQP data
Если я делаю то же самое с виртуальной машины внутри кластера, я могу нормально создавать и отправлять сообщения в очередь , Я также могу подключиться к интерфейсу управления RabbitMQ извне кластера, но если я пытаюсь объявить очередь из интерфейса, я получаю сообщение об ошибке Management API returned status code 405 -
, отображаемое внизу экрана.
Я был читая, что виртуальный хост в RabbitMQ '/' имеет проблемы с nginx из-за того, как он анализирует хост, но я не очень разбираюсь в подобных вещах и не знаю, как это исправить.
Любая помощь с этим будет очень признателен.
Я развернул входной контроллер nginx с рекомендованным манифестом:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
RabbitMQ развернут с этим манифестом:
---
apiVersion: v1
kind: Namespace
metadata:
name: rabbitmq
labels:
app: rabbitmq
---
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-service
namespace: rabbitmq
labels:
component: rabbitmq
spec:
type: ClusterIP
ports:
- name: amqp
port: 5672
targetPort: 5672
protocol: TCP
- name: http
port: 80
targetPort: 15672
protocol: TCP
selector:
app: taskQueue
component: rabbitmq
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rabbit-ingress
namespace: rabbitmq
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: <host-name>
http:
paths:
- path: /rabbitmq/?(.*)
backend:
serviceName: rabbitmq-service
servicePort: 5672
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rabbit-manage-ingress
namespace: rabbitmq
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: <host-name>
http:
paths:
- path: /rabbitmq-manage/?(.*)
backend:
serviceName: rabbitmq-service
servicePort: 80
---
apiVersion: v1
kind: ReplicationController
metadata:
labels:
app: taskQueue
component: rabbitmq
name: rabbitmq-controller
namespace: rabbitmq
spec:
replicas: 1
template:
metadata:
labels:
app: taskQueue
component: rabbitmq
spec:
containers:
- image: rabbitmq:3-management
name: rabbitmq
ports:
- containerPort: 5672
- containerPort: 15672
resources:
limits:
cpu: 100m