Как получить доступ к сервису с другого компьютера без ранчер-сервера? - PullRequest
0 голосов
/ 09 апреля 2019

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

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

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

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

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

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

EDIT2:
Это ifconfig вывод

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

enp1s0: flags = 4163 mtu 1500 inet 172.16.108.1 маска сети 255.255.255.192 широковещательная передача 172.16.108.63 inet6 fe80 :: 593f: 24d0: 31f2: 4fd8 prefixlen 64scopeid 0x20 ether d0: 94: 66: a5: 29: 8f txqueuelen 1000 (Ethernet) RX-пакеты 1251 байт 1024069 (1000,0 КиБ) RX-ошибки 0 отброшено 5 переполнений 0 кадр 0 TX-пакеты 980 байтов 157904 (154,2 КиБ) 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.0B) Ошибки RX 0 отброшены 0 переполнений 0 кадра 0 пакетов TX 0 байтов 0 (0,0 B) Ошибки TX 0 отброшены 0 переполнений 0 несущих 0 коллизий 0

EDIT3:
Я попытался указать передачу IP-адресаflag - адрес, когда запускается ранчер и / или хост, и результат тот же: 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

Результаты совпадают ..

RESUME: I 'я пытаюсь создать сервер ранчера в моей локальной сети для доступа к приложениям в моем балансировщике нагрузки с других компьютеров в той же сети.

1 Ответ

1 голос
/ 10 апреля 2019

Редактировать 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: Создать входной

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

...