Kubernetes pod не может подключиться к локальному экземпляру rabbit mq, работающему локально - PullRequest
0 голосов
/ 22 ноября 2018

Я перемещаю свое приложение из докера в kubernetes \ helm - и до сих пор я добился успеха, за исключением настройки входящих \ исходящих соединений.

Одна конкретная проблема, с которой я сталкиваюсь, заключается в том, что я не могу подключитьсяк экземпляру rabbitmq, работающему локально на моей машине в другом док-контейнере.

app-deployment.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jks
  labels:
    app: myapp
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      imagePullSecrets:
      - name: ivsecret
      containers:
      - env:
        - name: JOBQUEUE
          value: jks_jobqueue
        - name: PORT
          value: "80"
        image: repo.url
        name: jks
        ports:
        - containerPort: 80
        volumeMounts:
          - name: config-vol
            mountPath: /etc/sys0
      volumes:
        - name: config-vol
          configMap:
            name: config

      restartPolicy: Always

------------

app-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: jks
spec:
  ports:
  - name: "80"
    port: 80
    targetPort: 80
  selector:
    app: myapp

Я вижу ошибки в моем контейнере, жалуясь на то, что он не может подключиться к моей машине.Я попробовал curl изнутри контейнера:

curl 10.2.10.122:5672
curl: (7) Failed to connect to 10.20.11.11 port 5672: Connection timed out

Но то же самое, когда я развертываю как контейнер Docker, работает нормально - и я могу подключиться к экземпляру rabbit mq, работающему на моей машине через порт 5672.

Есть ли что-то, что мне нужно сделать, чтобы установить соединение между модулем и моей локальной машиной?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Если я понял настройку:

  • minikube работает на локальной машине.
  • rabbitmq также работает на локальном компьютере и прослушивает порт 5672.
  • IP-адрес, на котором работает rabbitmq: 10.2.10.122.
  • приложение - jks- работает на minikube.

Проблема в том, что невозможно подключиться из приложения jks к rabbitmq, верно?

Один из способов заставить его работать - сначала создатьa Сервис без селектора :

apiVersion: "v1"
kind: "Service"
metadata:
  name: "svc-external-rabbitmq"
spec:
  ports:
  - name: "rabbitmq"
    protocol: "TCP"
    port: 5672
    targetPort: 5672
    nodePort: 0
selector: {}

... далее, создайте объект Endpoints для Сервиса:

apiVersion: "v1"
kind: "Endpoints"
metadata:
  name: "svc-external-rabbitmq"
subsets:
  - addresses:
    - ip: "10.2.10.122"
    ports:
    - name: "rabbitmq"
      port: 5672

... затем используйте имя сервиса -svc-external-rabbitmq - в приложении jks для подключения к rabbitmq.

Объяснение см. В Службы без селекторов в документации Kubernetes.Я использовал эту настройку с кластером Cassandra, где все IP-адреса узлов Cassandra были перечислены как addresses.

EDIT: обратите внимание, что в некоторых случаях может работать служба типа ExternalName тоже.

0 голосов
/ 22 ноября 2018

Вы открываете порт 80 как для пакета, так и для службы.Затем вы свернетесь на порт 5672.

Либо откройте порт 5672 модуля и сверните его напрямую, либо откройте порт 5672 службы и оставьте порт 80 на модуле, а затем сверните порт 5672 службы.

Это был бы высокоуровневый «набросок» того, как поразить капсулу:

you -curl-> service1(80:80) -> pod1(80)
you -curl-> service2(80:5672) -> pod2(5672)

Итак, у вас есть две капсулы.Один из них обслуживает порт 80, а другой - порт 5672. Вы можете создать две службы;каждый из них нацелен на одну капсулу.Службы могут быть запущены на порту 80 и отображать запросы на порты 80 и 5672 модулей.

Теперь вы не можете создать одну службу для обеих переадресаций.Должен быть один сервис на стручок.Может быть развертыванием или группой модулей, но они должны обслуживаться на одном и том же порту.

...