RabbitMQ, .NET Core и Kubernetes (конфигурация) - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь настроить несколько микросервисов в Кубернетесе. Все работает как положено, кроме подключения одного микро сервиса к RabbitMQ.

Поток проблем:

  • .NET Core приложение -> rabbitmq-kubernetes-service.yml -> RabbitMQ


В приложении .NET Core конфигурация фабрики соединений кролика выглядит следующим образом:

"RabbitMQ": {
    "Host": "rabbitmq-service",
    "Port": 7000,
    "UserName": "guest",
    "Password": "guest"
}

Служба кролика kubernetes выглядит так:

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-service
spec:
  selector:
    app: rabbitmq
  ports:
    - port: 7000
      targetPort: 5672

А также размещение кролика:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
        - name: rabbitmq
          image: <private ACR with vanilla cfg - the image is: rabbitmq:3.7.9-management-alpine>
          imagePullPolicy: Always        
          resources:
            limits:
              cpu: "1"
              memory: 512Mi
            requests:
              cpu: "0.5"
          ports:
            - containerPort: 5672

Так что эта настройка в настоящее время не работает в k8s. Локально это работает как брелок с базовой композицией docker.

Однако , что я могу сделать в k8s, это перейти от LoadBalancer -> к работающему модулю кролика и получить доступ к GUI управления с этими настройками конфигурации.

apiVersion: v1
kind: Service
metadata:
  name: rabbitmqmanagement-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: rabbitmq
  ports:
  - port: 80
    targetPort: 15672

Куда я иду не так?

1 Ответ

0 голосов
/ 28 мая 2019

Я предполагаю, что вы используете .NET Core app вне кластера Kubernetes.Если это действительно так, тогда вам нужно использовать type: LoadBalancer.

LoadBalancer используется для предоставления услуги Интернету.

ClusterIP предоставляет службу внутри внутреннего IP-адреса кластера.Таким образом, Service будет доступен только из кластера, также это значение по умолчанию ServiceType.

NodePort предоставляет сервис для IP-адреса каждого узла настатический порт.

Для получения более подробной информации об услугах, пожалуйста, проверьте Kubernetes docs .

Вы можете, если соединение работает с использованием сценария Python:

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(
        pika.ConnectionParameters(host='RABBITMQ_SERVER_IP'))
channel = connection.channel()

channel.queue_declare(queue='hello')

channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

Этот скрипт попытается подключиться RABBITMQ_SERVER_IP, используя порт 5672.

Для скрипта требуется библиотека pika, которую можно установить с помощью pip install pika.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...