Достап до веб-интерфејс во VPN контејнер: изберете го сопственикот на портата
Апликацијата го дели мрежниот именски простор на VPN, затоа портата му припаѓа на VPN контејнерот. Правилно поврзете го слушачот, објавете кај сопственикот и држете ја патеката тесна.
Со апликацијата сѐ е во ред и со тунелот сѐ е во ред, но контролната табла сепак не се вчитува. Кога услугата работи со network_mode: service:vpn, таа го дели мрежниот именски простор на VPN контејнерот, што значи дека нејзиниот слушач и објавените порти припаѓаат на тој именски простор, а не на услугата. Од тоа произлегуваат три одлуки: каде апликацијата се врзува, кој контејнер ја објавува портата и колку е тесна патеката за управување. Ставете ги по погрешен редослед и секое поединечно поставување изгледа точно, додека комбинацијата не може да работи.
Кој го поседува именскиот простор на портата
Во споделен именски простор, додавањето запис ports: на зависната услуга не прави ништо корисно, а неколку мрежни опции не се поддржани за неа по дизајн. Објавете наместо тоа на контејнерот што го поседува именскиот простор. Тој контејнер е и оној чија адреса се појавува на домаќинот, така што мапирањето се чита како еден запис, а не по еден за секоја услуга.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Внимавајте на адресата лево од мапирањето. Врзувањето на 127.0.0.1 ја задржува објавената порта на loopback на домаќинот, што обично е она што го сака интерфејсот за управување. Врзувањето на 0.0.0.0 ја изложува на секој интерфејс на домаќинот, а тоа е друга безбедносна одлука, не удобност.
Натерајте ја апликацијата да слуша таму каде што именскиот простор го очекува
Слушач врзан на 127.0.0.1 внатре во именскиот простор е достапен само од внатрешноста на тој простор. Објавените порти на домаќинот доаѓаат однадвор, затоа апликацијата мора да врзе поширока адреса за мапирањето да работи. Тоа е промена од еден ред на повеќето сервери, и токму овој чекор луѓето го прескокнуваат откако ќе копираат водич за зацврстување напишан за распоредување без контејнери.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Списокот на слушачи внатре во апликацијата ја кажува вистината за адресата на врзување, а docker port покажува што сопственикот навистина објавил. Ако првиот покажува 127.0.0.1, а вториот покажува мапирање на домаќинот, ја најдовте неусогласеноста без да ја допрете конфигурацијата на VPN.
Изберете како влегува патеката за управување
Постојат три разумни распореди. Објавете на VPN контејнерот и достигнете го од домаќинот или од локалната мрежа. Поставете обратен прокси пред именскиот простор и дајте му ја единствената отворена порта. Или држете ја контролната табла достапна само од внатрешноста на именскиот простор преку exec сесија или SSH тунел, што е најмало изложување и најмалку удобност.
Кој одговара зависи од тоа кому и од каде му треба интерфејсот. Еден администратор на истиот домаќин се задоволува со врзување на loopback. Тимот што достигнува преку VPN има потреба од смислена патека и именуван сопственик. Изборот на прокси опцијата ви дава TLS и дневници за пристап, за сметка на уште една компонента што треба да се одржува ажурна.
Отворете ја портата за управување без да отворите сѐ
Сопствената политика за локален пристап или заклучување на VPN клиентот може да отфрли дојдовно барање за управување дури и додека излезниот тунел работи беспрекорно. Дозволете еден документиран исклучок за предвидениот извор и порта, потоа потврдете дека вообичаената заштита на тунелот е непроменета. Исклучувањето на прекинувачот за итни случаи за да се вчита контролната табла разменува вистинска контрола за картичка во прелистувачот.
Оставете ја сопствената автентикација на апликацијата вклучена. Да се биде во стек поврзан со VPN не дава овластување на секој локален корисник или на секој уред што може да стигне до домаќинот, а административен панел без автентикација зад тунел останува панел без автентикација.
Проверете од уредот за управување, потоа проверете повторно подоцна
Тестирајте од машината што навистина ќе ја управува услугата, не од домаќинот, а потоа одделно проверете ја интернет патеката што апликацијата ја бара. Успехот во управувањето докажува еден правец и не кажува ништо за излезот.
Тестирајте повторно откако стекот ќе се пресоздаде. Заменет сопственик на мрежата го менува именскиот простор на кој се прикачува апликацијата, а URL што работел пред ажурирање може потоа да не покажува никаде. Запишете го објавеното мапирање и адресата на врзување, за да биде следното преизградување двоминутна проверка, а не повторна истрага.