2015-12-30 2 views
0

Пробуя Kubernetes на мой макинтош, следуя this guide и использованием Докер-инструментов, я не понимаю, почему мне нужен этот шаг:Kubernetes локально через Docker: зачем нам переадресация портов?

Note: On OS/X you will need to set up port forwarding via ssh: 

boot2docker ssh -L8080:localhost:8080 

АНИ сервер работает с --net=host, так что я должен быть в состоянии curl <ip-of-my-docker-machine>:8080 но Я получил «отказ от связи». Настройка перенаправления портов с помощью ssh решает проблему, но все же я не понимаю, почему я не могу скручивать непосредственно хост. Любое объяснение было бы здорово.

+0

Kubernetes документы немного устарели, с панели инструментов команда переадресации будет 'Докер-машина SSH machine_name -L8080: localhost: 8080' –

ответ

1

Сервер api слушает только локальный хост, а не IP-адрес докер-машины.

Вы можете иметь хост VM вперед запросы от докер-машины IP на локальный с

docker-machine ssh default sudo /usr/local/sbin/iptables -t nat -I PREROUTING -p tcp -d $(docker-machine ip) --dport 8080 -j DNAT --to-destination 127.0.0.1:8080 
0

На компьютерах Mac docker runs inside the boot2docker virtual machine. С опцией --net=host сервер api работает в хост-сети VM, а не в вашей сетевой сети Mac. Вы также можете ssh в VM-загрузчик boot2docker без переадресации портов и скручивать API оттуда, тогда вам просто нужно загрузить клиента kubectl, а ssh-ed - в виртуальную машину.

Вы не можете curl <ip-of-my-docker-machine>:8080, потому что Docker VM по умолчанию отказывается от внешнего трафика, а Docker не устанавливает правила брандмауэра, чтобы разрешить трафик при использовании --net=host. This article глубже.

+0

Thx, я хорошо знаю все это, однако, я могу легко пинговать докер-машину, а мой клиент-докер, работающий на моем mac, знает, где связаться с демоном docker с помощью 'DOCKER_HOST = 'tcp : //192.168.99.100: 2376" '. Вот почему я удивлен, что не могу напрямую разговаривать с сервером api. – rmonjo

+1

Извините, неверно сформулировал вопрос. При использовании хост-сети Docker не будет автоматически настраивать правила брандмауэра, чтобы разрешить входящий трафик. Я думаю, что эта статья хорошо объясняет это: http://www.dasblinkenlichten.com/docker-networking-101-host-mode/ –

+0

Thx, по-прежнему звучит странно для меня, я думаю, boot2docker добавляет некоторые ограничения. Я использую для запуска Ubuntu VM и могу установить tcp-соединение между моим хостом и виртуальной машиной (например, с netcat). Оказывается, я могу netcat на порту демона докеров (2376), но не на других портах. – rmonjo