Resumo
Eu tenho um serviço de aplicativo do Azure executando um contêiner personalizado. Quando vinculo um caminho a um compartilhamento de Arquivos do Azure, meu contêiner para de funcionar. Olhando para os Container Issues
logs, vejo o erro: [BYOS] Custom storage volume(s) failed to initialize: [/var/LWASFiles/Sites/my-app/a3484543-39f9-45a3-816b-9524640dfd50]
.
Detalhe
Meu contêiner personalizado tem um volume definido
/var/www/html/v3/uploads
.Estou tentando mapear isso para um compartilhamento de arquivos do Azure, que está em uma conta de armazenamento na mesma vnet que o ASE de hospedagem, com regras que permitem o tráfego entre a sub-rede do ASE e o compartilhamento de arquivos nas portas 137, 138, 138 e 445 .
O ASE de hospedagem é configurado com um balanceador de carga interno (ou seja, é um ASE privado).
A conta de armazenamento tem um ponto de extremidade privado configurado.
O volume é mapeado em Configurações > Configuração > Mapeamentos de caminho do Serviço de Aplicativo, usando uma chave válida e um caminho de montagem que corresponda ao caminho do volume no contêiner.
Antes de adicionar o mapeamento de caminho, o serviço de aplicativo é executado conforme o esperado.
Após adicionar o mapeamento de caminho, o contêiner não inicia / as únicas informações de exceção que consigo encontrar são nos
Container Issues
logs, conforme o resumo acima.Se eu remover o mapeamento de caminho, o problema persistirá, mesmo após forçar uma reinicialização. A única maneira de resolver o problema é descartar e reimplantar o serviço de aplicativo.
Ele se conecta com sucesso a um banco de dados MySql (banco de dados do Azure para servidores MySQL) por meio de um ponto de extremidade privado.
Usando
dig {privateEndpointFqdn}
sou capaz de provar que o endpoint privado da conta de armazenamento foi resolvido corretamente (como é o do MySQL; como seria de esperar)Usando
tcptraceroute {privateEndpointFqdn} {destinationPort}
, posso provar que posso me conectar à conta de armazenamento na porta 445 (e ao banco de dados MySQL na porta 3306).Observação: não consigo me conectar à conta de armazenamento nas portas 137, 138 ou 139, apesar de serem permitidas pelo NSG nas mesmas regras de entrada e saída usadas para 445, acima; embora eu suspeite que essas portas não sejam mais necessárias para o CIFS (eu as adicionei apenas como uma medida just-in-case depois de acertar o problema, caso fossem de alguma forma relevantes, pois foram mencionados em alguns posts).
Estou executando os testes acima por SSH no contêiner, para que os comandos sejam executados a partir de seu contexto. Observação: como não consigo iniciar o contêiner após adicionar o mapeamento de caminho, esses testes são realizados após a criação do serviço de aplicativo, mas antes de adicionar o mapeamento de caminho.
Eu aumentei
WEBSITES_CONTAINER_START_TIME_LIMIT
para seu valor máximo:1800
Meu contêiner expõe a porta 80 (ou seja, uma das portas padrão com suporte pelo Serviço de Aplicativo para contêiner); e o site funciona quando o mapeamento de caminho não existe, então esse não deve ser o problema. Também configurei
WEBSITES_PORT
para80
, apenas para cinto e suspensórios.WEBSITES_ENABLE_APP_SERVICE_STORAGE
está definido comofalse
(embora eu também tenha experimentado defini-lo comotrue
, apenas no caso de / não fazer diferença, então reverti parafalse
).Meu compartilhamento de arquivos tem vários GBs de dados. Tentei criar um compartilhamento de arquivo idêntico sem conteúdo e mapeá-lo (imediatamente após recriar o serviço de aplicativo e provar que funcionou; para garantir que meus testes não fossem afetados pela ressaca do compartilhamento de arquivo maior). Isso dá o mesmo problema com o compartilhamento de arquivos maior.
A imagem do meu contêiner está sendo carregada de um Azure Container Repo.
A imagem é baseada na
ubuntu:21.04
Eu incluí os pacotes
azure-cli
ecifs-utils
(acho que isso é necessário apenas ao executar a operação de montagem do contêiner, em vez da configuração do AppService; mas eu queria cobrir todas as suposições)O ASE de hospedagem está na
UK South
região (assim como a conta de armazenamento/todos os recursos).
Observação: esta é minha primeira experiência com a execução de contêineres no Serviço de Aplicativo; então PEBKAC é definitivamente uma possibilidade.
Quaisquer sugestões ou conselhos de solução de problemas seriam muito apreciados. Obrigada.
Resolvi o problema alterando a rede da conta de armazenamento de
selected networks
(na qual eu havia permitido pela VNet do ASE e os IPs de saída para o aplicativo Web) paraall networks
o portal:https://portal.azure.com/#@<myTentantName>.onmicrosoft.com/resource/subscriptions/<mySubscrption>/resourceGroups/<myStorageAccountsResourceGroup>/providers/Microsoft.Storage/storageAccounts/<myStorageAccountName>/networking
Em seguida, reiniciei meu aplicativo (incluindo descartar e adicionar novamente a montagem ... não tenho certeza se isso era necessário, mas para uma boa medida):