Iṣẹ́ Compose rẹ ń parí àkókò sí API tí ẹ̀rọ ìwò lórí ẹ̀rọ kan náà ń ṣí láìsí ẹ̀sùn kankan. Ìyàtọ̀ yẹn ni àmì: ìbéèrè tí ń ṣiṣẹ́ ń jáde láti olùgbàlejò tí ó ní tọ́ọ̀nù VPN, ìbéèrè tí ń ro kọ́ ń jáde láti kòtíìnà tí ó ní àkójọpọ̀ nẹ́tíwọ́kì tirẹ̀. Kò sí ohunkóhun nínú kòtíìnà tí ó mọ àwọn ọ̀nà tọ́ọ̀nù náà, nítorí náà ibi ìkọ̀kọ̀ náà kò ní í dé bí a ti ń kọ orúkọ náà. Ojútùú náà ni fífò mọ̀ọ́mọ̀ la olùgbàlejò kọjá, kì í ṣe tábìlì ọ̀nà tí ó gbọ́n jù.

Bẹ̀rẹ̀ pẹ̀lú ìdí tí àwọn ọ̀nà méjì fi yàtọ̀, lẹ́yìn náà pinnu ibi tí tọ́ọ̀nù náà yẹ kí ó gbé.

Ìdí tí olùgbàlejò fi ń ṣiṣẹ́ tí kòtíìnà kò ṣe

Gbígbé tọ́ọ̀nù náà sókè ń fún olùgbàlejò ní ìfararora, àkójọ ọ̀nà àti, ní gbogbogbòò, àkọsílẹ̀ olùyẹnú tí VPN ń pèsè. Kòtíìnà kò jogún ohunkóhun nínú èyí: ó bẹ̀rẹ̀ pẹ̀lú ìfararora kan lórí afárá ẹ̀rọ náà àti ọ̀nà àkọ́kọ́ tí ó tọ́ka sí afárá yẹn. Àwọn ọ̀nà tí a fi sórí olùgbàlejò kò hàn sí ohunkóhun tí ń ṣiṣẹ́ nínú ààyè orúkọ yẹn.

Ìdí niyẹn tí àwọn àmì fi dàbí aláìbáramu dípò kíkún jẹ́ bàjẹ́. Olùgbàlejò ń yanjú orúkọ ìkọ̀kọ̀ ó sì ń so, nítorí orúkọ àti ọ̀nà méjèèjì wà níbẹ̀. Kòtíìnà ń fi àpò rẹ̀ ránṣẹ́ sí àdírẹ́sì ìkọ̀kọ̀ tí kò sí ohunkóhun lórí ọ̀nà afárá tí ó lè dé, ìbéèrè náà sì ń parí àkókò. Fífi orúkọ náà kún fáìlì hosts kòtíìnà kò yí ohunkóhun padà, nítorí àdírẹ́sì fúnra rẹ̀ kò dé láti ibi tí kòtíìnà wà.

Dé olùgbàlejò láti inú kòtíìnà

Ìlànà nínú kòtíìnà tí ń pe localhost ń pe kòtíìnà náà. Docker Desktop ń ṣe àtẹ̀jáde host.docker.internal gẹ́gẹ́ bí orúkọ tí ó tọ́ka padà sí ẹ̀rọ tí ń darí ẹ̀rọ náà; àwọn ẹ̀rọ Linux ń fi í sílẹ̀ láìsí ìtumọ̀ àyàfi tí iṣẹ́ náà bá béèrè, ìyẹn sì ni ohun tí àwòrán ìsàlẹ̀ yìí ń ṣe. Pẹ̀lú èyí, ohun èlò náà ń fojú sóde orúkọ àti ibùdó dípò àdírẹ́sì ìkọ̀kọ̀.

services:
  app:
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      INTERNAL_API_HOST: "host.docker.internal:8666"

Tọ́ọ̀nù náà ń dúró ní ẹ̀gbẹ́ olùgbàlejò ti fífò náà, ibùdó inú oníyipada yẹn sì ni ibùdó tí proxy yóò gbọ́. Kòtíìnà tí ó pàdánù tọ́ọ̀nù náà yóò kùnà ní fífò kan tí a mọ̀ dípò gbígbìyànjú ọ̀nà tí kò tíì ní rí.

Yan ibi tí tọ́ọ̀nù náà ń gbé

Àwọn ìrísí mẹ́ta ṣeé ṣe fún iṣẹ́ Compose tí ó nílò API ìkọ̀kọ̀, wọ́n sì yàtọ̀ nípa ìlànà wo ni ó ni tọ́ọ̀nù náà. Oníbàárà VPN lè ṣiṣẹ́ nínú àwòrán kòtíìnà, èyí tí ó nílò fífi ẹ̀rọ tọ́ọ̀nù hàn àti fífún ní agbára ìṣàkóso nẹ́tíwọ́kì tí ó bá a lọ. Ohun èlò náà lè pín ààyè orúkọ nẹ́tíwọ́kì kòtíìnà tọ́ọ̀nù ọ̀tọ̀ọ̀tọ̀, kí àwọn ìlànà méjèèjì lè rí àkójọpọ̀ kan àti tábìlì ọ̀nà kan. Tàbí tọ́ọ̀nù náà lè dúró lórí olùgbàlejò, pẹ̀lú olùtọ́jú ọ̀nà tí ó díẹ̀ láti olùgbàlejò sínú kòtíìnà.

Àwọn méjì àkọ́kọ́ ń fa àwọn fáìlì ìtàn, ìhùwàsí àtúnso pọ̀ àti ìlànà olùyẹnú sínú iṣẹ́ náà, wọ́n sì ń jẹ́ kí gbogbo iṣẹ́ nínú fáìlì náà dúró lórí ìlera tọ́ọ̀nù náà. Ìyẹn jẹ́ ìsopọ̀ púpọ̀ fún ìpè API kan. Fún àkójọpọ̀ ìdàgbàsókè tí ń ka ibi ìparí inú kan ṣoṣo, olùtọ́jú ọ̀nà ní ẹ̀gbẹ́ olùgbàlejò ni iyipada tí ó kéré jù tí ó ṣì ń pa àwọn ẹ̀rí mọ́ ní ibi tí ẹgbẹ́ pẹpẹ ń darí wọn.

Ṣe àtẹ̀jáde ọ̀nà díẹ̀ kan lórí olùgbàlejò

Bẹ̀rẹ̀ pẹ̀lú ohun tí olùtọ́jú ọ̀nà jogún: ṣiṣẹ́ rẹ̀ lábẹ́ àkọsílẹ̀ tí ó ni tọ́ọ̀nù náà, àwọn sọ́kẹ́tì jáde rẹ̀ yóò sì gba àwọn ọ̀nà olùgbàlejò àti olùyẹnú olùgbàlejò. Àkójọ location kan ti nginx ń bo ọ̀nà kan.

server {
    listen 8666;
    location /search/ {
        proxy_pass http://10.20.30.40:8090/;
        proxy_set_header Host internal-api.example;
        proxy_read_timeout 60s;
    }
}

Wo àdírẹ́sì àti ibùdó gẹ́gẹ́ bí ohun àfipamọ́ kí o sì fi orísìísì tí API ń gbọ́ ní ti gidi sí. Gbogbo upstream àfikún yẹ ní àkójọ location tirẹ̀, àkójọ kọ̀ọ̀kan sì yẹ kí ó gba àwọn ọ̀nà tí iṣẹ́ yìí ń pè nìkan, kí proxy má bàa di ilẹ̀kùn gbogbogbò sínú nẹ́tíwọ́kì ìkọ̀kọ̀. So olùgbọ́ mọ́ àdírẹ́sì afárá fún àwọn oníbàárà tí ó ń wá nípasẹ̀ host-gateway, mọ́ loopback nígbà tí oníbàárà bá ń pín ààyè orúkọ nẹ́tíwọ́kì olùgbàlejò nìkan, kí o má sì so mọ́ 0.0.0.0 rárá. Yan ibùdó tí ó ṣì wà lómìnira pẹ̀lú: nọ́mbà tí a ti gbà yóò fi proxy sílẹ̀ láìgbọ́ nígbà tí kòtíìnà ń parí àkókò lọ, èyí tí a kò lè yàtọ̀ sí àṣìṣe nẹ́tíwọ́kì tí o bẹ̀rẹ̀ pẹ̀lú.

Àwọn ibùdó, orúkọ àti ìpinnu TLS

Yíyanjú orúkọ ń pín bí i ti ìtọ́sọ́nà. Àwọn ìwádìí gbangba kòtíìnà ń gba olùyẹnú ẹ̀rọ kọjá, nítorí náà orúkọ ìkọ̀kọ̀ tí a yanjú lórí olùgbàlejò kò ní yanjú nínú kòtíìnà. Proxy ni èròjà tí ń yanjú orúkọ ìkọ̀kọ̀, nítorí ó jogún olùyẹnú olùgbàlejò.

TLS ni ìpinnu tí a ń fi sílẹ̀ tí yóò sì ṣàlàyé ìkùnà tí ó kàn. Tí proxy bá gbé àwọn báìtì kọjá láìfọwọ́ kàn, kòtíìnà yóò rí ìwé-ẹ̀rí API fúnra rẹ̀ yóò sì nílò CA inú nínú ibi ìtọ́jú ìgbẹ́kẹ̀lé rẹ̀. Tí proxy bá parí TLS, ìgbẹ́kẹ̀lé yẹn yóò lọ sí olùgbàlejò ohun èlò náà yóò sì bẹ̀rẹ̀ kíkọ àwọn ìsopọ̀ láti orí-ìròyìn host tí ó ń gbà. Yan ètò kan kí o sì lò ó lórí gbogbo ohun àmúṣọrọ̀, nítorí ìtúnjú tí èkejì ń gbé jáde ń tọ́ka sí orúkọ olùgbàlejò tí kòtíìnà kò lè yanjú.

Jẹ́rìí láti inú iṣẹ́ náà

Fi ìbéèrè náà ránṣẹ́ láti kòtíìnà, kì í ṣe láti olùgbàlejò: curl lasan sí ọ̀nà proxy, lẹ́yìn náà àyẹ̀wò ìlera ohun èlò náà fúnra rẹ̀. Nígbà tí proxy bá dáhùn ṣùgbọ́n ohun èlò náà ṣì ń kùnà, fi àwọn ohun mẹ́ta wé: URL ìpìlẹ̀ tí ó ń kọ́, oníyipada proxy kankan nínú àyíká rẹ̀, àti CA tí ó gbẹ́kẹ̀lé. Gbogbo wọn wà nínú àyíká àti àwọn àkọsílẹ̀ kòtíìnà, títún ọ̀kankan nínú wọn pa VPN mọ́ ní àlàáfíà.

Kọ ètò tí a yàn sínú README iṣẹ́ náà nígbà tí ó ṣì tuntun. Bí bẹ́ẹ̀ kọ́, ẹni tí ó kàn yóò pàdé àkókò parí yìí yóò lo ọ̀sán kan náà láti tún ṣàwárí pé tọ́ọ̀nù náà ń gbé lórí olùgbàlejò.

Àwọn àpilẹ̀kọ tó jọra