Puncte:0

Montarea fișierelor Azure în Azure App Service

drapel kh

rezumat

Am un Azure App Service care rulează un container personalizat. Când leg o cale la o partajare Azure Files, containerul meu nu mai funcționează. Privind la Probleme cu containerele loguri, văd eroarea: [BYOS] Volumul(e) de stocare personalizat nu a reușit să se inițialeze: [/var/LWASFiles/Sites/my-app/a3484543-39f9-45a3-816b-9524640dfd50].

Detaliu

  • Containerul meu personalizat are un volum definit /var/www/html/v3/uploads.

  • Încerc să mapez acest lucru la o partajare Azure Files, care se află pe un cont de stocare în aceeași rețea virtuală cu ASE de găzduire, cu reguli care permit traficul între subrețeaua ASE și partajarea fișierelor pe porturile 137, 138, 138 și 445. .

  • ASE-ul de găzduire este configurat cu un echilibrator de încărcare intern (adică este un ASE privat).

  • Contul de stocare are un punct final privat configurat.

  • Volumul este mapat în Setări > Configurare > Mapări ale căilor din serviciul de aplicație, folosind o cheie validă și o cale de montare care se potrivește cu calea volumului de pe container.

  • Înainte de a adăuga maparea căilor, serviciul de aplicație rulează conform așteptărilor.

  • După adăugarea mapării căii, containerul nu reușește să pornească / singura informație de excepție pe care o pot găsi este din Probleme cu containerele jurnalele, conform rezumatului de mai sus.

  • Dacă elimin maparea căii, problema persistă, chiar și după forțarea repornirii. Singura modalitate de a rezolva problema este să renunțați și să redistribuiți serviciul de aplicație.

  • Se conectează cu succes la o bază de date MySql (bază de date Azure pentru servere MySQL) printr-un punct final privat.

  • Folosind dig {privateEndpointFqdn} Pot dovedi că punctul final privat al contului de stocare este rezolvat corect (la fel ca și MySQL; așa cum v-ați aștepta)

  • Folosind tcptraceroute {privateEndpointFqdn} {destinationPort} Pot să demonstrez că mă pot conecta la contul de stocare de pe portul 445 (și la DB MySQL de pe portul 3306).

  • Notă: nu mă pot conecta la contul de stocare pe porturile 137, 138 sau 139, în ciuda faptului că acestea sunt permise prin NSG pe aceleași reguli de intrare și de ieșire ca cele utilizate pentru 445, mai sus; deși bănuiesc că acele porturi nu mai sunt necesare pentru CIFS (le-am adăugat doar ca măsură de caz după ce am lovit prima dată problema în cazul în care au fost într-un fel relevante așa cum au fost menționate în unele postări).

  • Rulez testele de mai sus prin SSHing în container, astfel încât comenzile sunt executate din contextul său. Notă: Deoarece nu pot porni containerul după ce am adăugat maparea căilor, aceste teste sunt efectuate după crearea serviciului de aplicație, dar înainte de adăugarea maparii căilor.

  • am crescut WEBSITES_CONTAINER_START_TIME_LIMIT la valoarea sa maximă: 1800

  • Containerul meu expune portul 80 (adică unul dintre porturile implicite acceptate de App Service pentru container); iar site-ul web funcționează atunci când maparea căilor nu există, așa că aceasta nu ar trebui să fie problema. am stabilit si eu WEBSITE_PORT la 80, doar pentru centură și bretele.

  • WEBSITES_ENABLE_APP_SERVICE_STORAGE este setat sa fals (deși am experimentat și cu setarea lui Adevărat, în caz că / nu a făcut nicio diferență, așa că am revenit la fals).

  • Partajarea mea de fișiere are câțiva GB de date. Am încercat să creez o partajare de fișiere identică, fără conținut și să o mapez cu aceasta (imediat după ce am recreat serviciul de aplicație și am demonstrat că a funcționat; pentru a mă asigura că testele mele nu au fost afectate de mahmureala partajării mai mari de fișiere). Acest lucru dă aceeași problemă ca și cu partajarea de fișiere mai mare.

  • Imaginea pentru containerul meu este încărcată dintr-un Azure Container Repo.

  • Imaginea se bazează pe ubuntu:21.04

  • Am inclus azure-cli și cifs-utils pachete (cred că acest lucru este necesar doar atunci când se efectuează operația de montare din container, mai degrabă decât din configurația AppService; dar am vrut să acopăr toate ipotezele)

  • ASE-ul de găzduire este în Sudul Marii Britanii regiune (cum este contul de stocare/toate resursele).

Notă: aceasta este prima mea experiență cu rularea containerelor în App Service; deci PEBKAC este cu siguranță o posibilitate.

Orice sugestie sau sfat de depanare ar fi foarte apreciat. Mulțumesc.

drapel ng
Doar pentru a confirma, se montează o partajare Azure Files SMB, nu NFS, nu?
drapel kh
Corect; SMB/CIFS.
Puncte:0
drapel kh

Am rezolvat problema schimbând rețeaua contului de stocare din rețelele selectate (în care am trecut pe lista albă de către rețeaua virtuală a ASE și IP-urile de ieșire pentru aplicația web) pentru a toate rețelele prin portal:

https://portal.azure.com/#@<myTentantName>.onmicrosoft.com/resource/subscriptions/<mySubscrption>/resourceGroups/<myStorageAccountsResourceGroup>/providers/Microsoft.Storage/storageAccounts/<myStorageAccountName>/network

Apoi mi-am repornit aplicația (inclusiv scăderea și adăugarea din nou a monturii... nu sunt sigur dacă acest lucru a fost necesar, dar pentru o bună măsură):

# opriți aplicația web
az webapp stop \
    --subscription <sub id> \
    -g <grup de resurse> \
    -n <sitename> 

# abandonați maparea căilor existente
az webapp config stocare-ștergere cont \
    --subscription <sub id> \
    -g <grup de resurse> \
    -n <sitename> \
    --custom-id <nume-mapping-cale> \

# re-adăugați maparea căilor
az webapp config stocare-adăugare cont \
    --subscription <sub id> \
    -g <grup de resurse> \
    -n <sitename> \
    --custom-id <nume-mapping-cale> \
    --storage-type AzureFiles \
    --account-name [numele contului de stocare Azure] \
    --share-name [nume de partajare de stocare Azure] \
    --access-key [cheie de acces la stocare] \
    --mount-path [/path/to/mount in container] 

# reporniți aplicația web
az webapp start \
    --subscription <sub id> \
    -g <grup de resurse> \
    -n <sitename> 

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.