Я пытаюсь создать сервер докеров, используя rancher в локальной сети (со многими машинами, некоторыми Linux, некоторыми окнами). Я установил rancher-server, создал хост, добавил API для тестирования и создал балансировщик нагрузки для регистрации этого API. Локально работает нормально, я могу получить доступ к контейнеру API, например: «http://test.172.17.0.4.xip.io:3000/», но на других машинах в моей сети я не могу получить доступ.
ПС:test
-> Имя API172.17.0.4
-> Ip докера машины HOST (с агентом-ранчером)xip.io
-> общедоступный DNS с подстановочными знаками (подробнее см.: http://xip.io/)3000
-> Порт API отображается в балансировщике нагрузки
Я пытался изменить сеть контейнера в пользовательском интерфейсе ранчера, это не сработало, я читал кое-что о создании сети докеров, но я немного запутался, потому что докер создает сетевой докер по умолчанию, 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
вывод
докер0: флаги = 4099 mtu 1500 инет 172.17.0.1 сетевая маска 255.255.0.0 широковещательная рассылка 172.17.255.255 эфир 02:42:79:4f:fc:66 txqueuelen 0 (Ethernet) Пакеты RX 0 байт 0 (0,0 Б) Ошибки RX 0 отброшено 0 переполнение 0 кадр 0 Пакеты TX 0 байт 0 (0,0 Б) Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0
enp1s0: флаги = 4163 мту 1500 инет 172.16.108.1 сетевая маска 255.255.255.192 широковещательная рассылка 172.16.108.63 inet6 fe80::593f:24d0:31f2:4fd8 prefixlen 64 scopeid 0x20 эфир d0:94:66:a5:29:8f txqueuelen 1000 (Ethernet) Пакеты RX 1251 байт 1024069 (1000,0 КиБ) Ошибки RX 0 отброшено 5 переполнение 0 кадр 0 Пакеты TX 980 байт 157904 (154,2 КиБ) Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0
вот: флаги=73 mtu 65536 инет 127.0.0.1 сетевая маска 255.0.0.0 inet6 :: 1 prefixlen 128 scopeid 0x10 петля txqueuelen 1000 (локальная петля) Пакеты RX 0 байт 0 (0,0 Б) Ошибки RX 0 отброшено 0 переполнение 0 кадр 0 Пакеты TX 0 байт 0 (0,0 Б) Ошибки передачи 0 отброшено 0 превышение пропускной способности 0 несущей 0 коллизий 0
РЕДАКТИРОВАТЬ3:
Я попытался указать 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
Результаты те же..
РЕЗЮМЕ: Я пытаюсь создать ранчо-сервер в своей локальной сети для доступа к приложениям в моем балансировщике нагрузки с других машин в той же сети.
Хорошо, и вы можете сказать мне, как я это делаю?
Я не знаю IP-адрес вашего хоста. Вы можете попробовать ip addr
из ifconfig
, если используете хост Linux и проверьте IP-адрес сетевого интерфейса. Что-то вроде eth0
или ens1
и т. д.
Обычно, когда вы получаете URL-адрес xip, он должен иметь IP-адрес хоста. Не уверен, что происходит в вашей настройке.
Вы используете сервер Rancher и агент Rancher на одном хосте?
Да, я создаю контейнер с сервером ранчера, а затем контейнер с агентом ранчера.
Пожалуйста, проверьте отредактированный ответ и дайте мне знать, если он работает.
Редактировать 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
Я думаю, вы неправильно поняли мою проблему, я отредактировал EDIT
и EDIT2
, вы можете прочитать их еще раз? знак равно
Прежде всего, спасибо за помощь до сих пор. Я написал EDIT3, чтобы показать результаты вашего предложения, я также написал RESUME, чтобы попытаться сохранить наше внимание =)
Вы упомянули материал xip.io, я думал, что вы используете версию Rancher 2.x. Глядя на вашу команду запуска докера, я понял, что вы используете версию 1.6.x. --address
не для версии 1.6.x. Вам нужно использовать CATTLE_AGENT_IP=172.16.108.63 для версии 1.6.x.
Хорошо, теперь я могу получить доступ к моему приложению на моем ранчере с других машин, используя 172.16.108.2.xip.io:<app-port>. я приму ваш ответ, но позвольте мне задать еще один быстрый вопрос, иногда мой IP (172.16.108.2) меняется, как это легко исправить?
Возможно, вам придется создать сценарий, который отслеживает ваш IP-адрес каждые несколько секунд/минут, и после обнаружения изменения повторно развертывает контейнер агента. Но URL-адрес входа может не измениться (я сам не пробовал этот сценарий). TBH, это действительно не обычный/общий вариант использования :) ... вы не можете запросить статический IP-адрес для своей машины?
Я попробую это сделать, спс на время =)
Вам необходимо использовать общедоступный IP-адрес хоста (или частный IP-адрес, доступный в сети).