Как получить доступ к услуге с другого компьютера без регистрации сервера-владельца ранчо?

Я пытаюсь создать докер-сервер, используя ранчо в локальной сети (со многими машинами, некоторыми Linux, некоторыми окнами). Я установил ранчер-сервер, создал хост, добавил API для тестирования и создал балансировщик нагрузки для регистрации этого API. Локально, работает нормально, я могу получить доступ к контейнеру API, например: "http://test.172.17.0.4.xip.io:3000/ ", но на других машинах в моей сети я не могу получить доступ ..

PS:
test -> Имя API
172.17.0.4 -> IP докера машины HOST (с агентом-ранчером)
xip.io -> общедоступный DNS с подстановочными знаками (подробнее см .: http://xip.io/)
3000 -> Порт API, отображаемый в балансировщике нагрузки

Я попытался изменить сеть контейнера в пользовательском интерфейсе ранчо, не сработало, я прочитал кое-что о создании сети докеров, но я немного запутался, потому что докер создает defaut netdocker, docker0, это мостовая сеть .. Я немного лежу в сетевых делах.

РЕДАКТИРОВАТЬ:
Я создал macvlan с помощью сети докеров, и теперь я могу пинговать свой контейнер, используя другие машины, но теперь у моего контейнера нет подключения к Интернету для загрузки вещей.

docker network create -d macvlan --subnet=172.16.108.0/26 --gateway=172.16.108.1 -o macvlan_mode=bridge -o parent=enp1s0 rancher

и попытался запустить контейнер в этой сети

РЕДАКТИРОВАТЬ2:
Этот ifconfig вывод

docker0: flags = 4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02: 42: 79: 4f: fc: 66 txqueuelen 0 (Ethernet) Пакеты приема 0 байтов 0 (0,0 Б) Ошибки приема 0 отброшены 0 переполнения 0 кадр 0 пакетов передачи 0 байтов 0 (0,0 B) ошибок передачи 0 отброшено 0 переполнений 0 несущей 0 коллизий 0

enp1s0: flags = 4163 mtu 1500 inet 172.16.108.1 netmask 255.255.255.192 broadcast 172.16.108.63 inet6 fe80 :: 593f: 24d0: 31f2: 4fd8 prefixlen 64 scopeid 0x20 ether d0: 94: 66: a5: 29: 8f txqueuelen 1000 (Ethernet ) RX пакеты 1251 байт 1024069 (1000.0 KiB) RX ошибки 0 отброшено 5 переполнений 0 кадров 0 TX пакетов 980 байтов 157904 (154.2 KiB) TX ошибок 0 отброшено 0 переполнений 0 несущей 0 коллизий 0

lo: flags = 73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 :: 1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Loopback Local) Пакеты RX 0 байтов 0 (0,0 B) Ошибки RX 0 отброшено 0 переполнений 0 кадров 0 пакетов TX 0 байтов 0 (0,0 B) ошибок передачи 0 сброшено 0 переполнений 0 несущей 0 коллизий 0

EDIT3:
Я попытался указать ip-адрес, передав флаг --address при запуске ранчо и / или хоста, и результат тот же: unknown flag: --address команды, которые я пытался сделать, следующие:

docker run -d --restart=unless-stopped --address 172.16.108.63 -p 8080:8080 rancher/server

Для запуска сервера ранчо. Я тоже пробовал с macvlan

docker run --privileged --name some-docker1 --address 172.16.108.63 -d docker:stable-dind
Чтобы запустить ранчо (чтобы стать будущим хостом)
И я попробовал ту же команду выше, но без --address. Затем, прикрепившись к оболочке контейнера, я попытался создать хост

docker run -e CATTLE_AGENT_IP="172.17.0.3" --rm --privileged --address 172.16.108.63 -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher ran cher/agent:v1.2.11 http://172.17.0.2:8080/v1/scripts/3FA0E7B767770264BCAD:1546214400000:P9NfsauqyhZpoeIBgGyCZIHkKtE

Результаты такие же ..

РЕЗЮМЕ. Я пытаюсь создать в своей локальной сети сервер-ранчо для доступа к приложениям в моем балансировщике нагрузки с других компьютеров в той же сети.


person Matheus    schedule 09.04.2019    source источник
comment
Вам необходимо использовать общедоступный IP-адрес хоста (или частный IP-адрес, доступный в сети).   -  person leodotcloud    schedule 09.04.2019
comment
Хорошо, и вы можете сказать мне, как я это делаю?   -  person Matheus    schedule 09.04.2019
comment
Я не знаю, какой у вас IP-адрес. Вы можете попробовать ip addr из ifconfig, если вы используете хост Linux, и проверить IP-адрес сетевого интерфейса. Что-то вроде eth0 или ens1 и т. Д.   -  person leodotcloud    schedule 09.04.2019
comment
Обычно, когда вы получаете URL-адрес xip, он должен содержать IP-адрес хоста. Не уверен, что происходит в вашей настройке.   -  person leodotcloud    schedule 10.04.2019
comment
Вы запускаете Rancher Server и Rancher Agent на одном хосте?   -  person leodotcloud    schedule 10.04.2019
comment
Да, я создаю контейнер с сервером ранчо, затем контейнер с агентом ранчо   -  person Matheus    schedule 11.04.2019
comment
Пожалуйста, проверьте отредактированный ответ и дайте мне знать, работает ли он.   -  person leodotcloud    schedule 11.04.2019


Ответы (1)


Изменить 2: необходимо указать IP-адрес добавляемого хоста с помощью CATTLE_AGENT_IP. В предыдущем редактировании я ошибся в версиях.

Изменить 1:

При использовании одного и того же хоста для запуска и сервера ранчо, и образа агента, важно указать IP-адрес хоста с помощью флага --address <IP address>. В противном случае автоматически обнаруженный IP-адрес будет неверным.

В вашем случае вам нужно указать --address 172.16.108.63 при регистрации хоста.

Тогда сгенерированный xip-адрес будет отражать правильный IP-адрес.

====

Вот один из способов получить доступ к вашему приложению извне кластера. Это предполагает использование Ingress. (Дополнительную информацию можно найти здесь: https://kubernetes.io/docs/concepts/services-networking/ingress/)

Шаг 1. Создайте развертывание (измените образ и настройте другие параметры в соответствии с вашими потребностями)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app1
spec:
  replicas: 1
  selector:
    matchLabels:
      name: app1
  template:
    metadata:
      labels:
        name: app1
    spec:
      containers:
      - name: app1
        image: leodotcloud/swiss-army-knife
        ports:
        - containerPort: 80
          name: http
        env:
        - name: NATO_ALPHABET
          value: "a"

Шаг 2: Создайте службу (можно напрямую создать вход, но я предпочитаю, чтобы вещи были разделены)

apiVersion: v1
kind: Service
metadata:
  labels:
    name: access-app1
  name: access-app1
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    name: app1

Шаг 3. Создайте Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-app1
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: access-app1
          servicePort: 80

Теперь ваше приложение будет доступно по адресу http://<HOST_IP_ADDRESS>/app1

person leodotcloud    schedule 09.04.2019
comment
Я думаю, вы неправильно поняли мою проблему, я редактировал EDIT и EDIT2, вы можете прочитать их еще раз? знак равно - person Matheus; 10.04.2019
comment
Прежде всего, спасибо за помощь. Я написал EDIT3, чтобы показать результаты вашего предложения, я также написал РЕЗЮМЕ, чтобы попытаться сохранить наше внимание =) - person Matheus; 11.04.2019
comment
Вы упомянули про xip.io, я думал, вы используете версию Rancher 2.x. Посмотрев на вашу команду docker run, я понял, что вы используете версию 1.6.x. --address не для версии 1.6.x. Вам необходимо использовать CATTLE_AGENT_IP = 172.16.108.63 для версии 1.6.x. - person leodotcloud; 12.04.2019
comment
Хорошо, теперь я могу получить доступ к своим приложениям на моем ранчо с других машин, используя 172.16.108.2.xip.io: ‹app-port›. Я приму ваш ответ, но позвольте мне задать еще один быстрый вопрос: иногда мой IP-адрес (172.16.108.2) меняется. Как это легко исправить? - person Matheus; 12.04.2019
comment
Возможно, вам придется создать сценарий, который отслеживает ваш IP-адрес каждые несколько секунд / минут, и после обнаружения изменения повторно разверните контейнер агента. Но URL-адрес Ingress может не измениться (я сам не пробовал этот сценарий). TBH, это действительно не обычный / общий вариант использования :) ... вы не можете запросить статический IP-адрес для своей машины? - person leodotcloud; 13.04.2019
comment
Постараюсь это сделать, спасибо пока =) - person Matheus; 14.04.2019