Wdrażanie aplikacji przy użyciu niestandardowego obrazu kontenera

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która zbliża się do stanu zakończenia życia (EOL). Rozważ odpowiednie użycie i zaplanuj. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Uwaga

Azure Spring Apps to nowa nazwa usługi Azure Spring Cloud. Mimo że usługa ma nową nazwę, stara nazwa będzie widoczna w niektórych miejscach przez pewien czas, ponieważ pracujemy nad aktualizowaniem zasobów, takich jak zrzuty ekranu, filmy wideo i diagramy.

Ten artykuł dotyczy: ✔️ Standard ✔️ Enterprise

W tym artykule wyjaśniono, jak wdrażać aplikacje Spring Boot w usłudze Azure Spring Apps przy użyciu niestandardowego obrazu kontenera. Wdrażanie aplikacji z kontenerem niestandardowym obsługuje większość funkcji, jak podczas wdrażania aplikacji JAR. Inne aplikacje Java i inne niż Java można również wdrożyć przy użyciu obrazu kontenera.

Wymagania wstępne

  • Obraz kontenera zawierający aplikację.
  • Obraz jest wypychany do rejestru obrazów. Aby uzyskać więcej informacji, zobacz Azure Container Registry.

Uwaga

Aplikacja internetowa musi nasłuchiwać na porcie 1025 planu standardowego i na porcie 8080 planu Enterprise. Sposób zmiany portu zależy od struktury aplikacji. Na przykład określ SERVER_PORT=1025 dla aplikacji Spring Boot lub ASPNETCORE_URLS=http://+:1025/ dla aplikacji ASP.NET Core. Możesz wyłączyć sondę dla aplikacji, które nie nasłuchują na żadnym porcie. Aby uzyskać więcej informacji, zobacz How to configure health probes and graceful termination periods for apps hosted in Azure Spring Apps (Jak skonfigurować sondy kondycji i okresów prolongaty zakończenia dla aplikacji hostowanych w usłudze Azure Spring Apps).

Wdrażanie aplikacji

Aby wdrożyć aplikację w niestandardowym obrazie kontenera, wykonaj następujące kroki:

Aby wdrożyć obraz kontenera, użyj jednego z następujących poleceń:

  • Aby wdrożyć obraz kontenera w publicznej usłudze Docker Hub w aplikacji, użyj następującego polecenia:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Aby wdrożyć obraz kontenera z usługi ACR w aplikacji lub z innego rejestru prywatnego do aplikacji, użyj następującego polecenia:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
       --container-registry <your-container-registry> \
       --registry-password <your-password> |
       --registry-username <your-username>
    

Aby zastąpić punkt wejścia obrazu, dodaj następujące dwa argumenty do dowolnego z powyższych poleceń:

    --container-command "java" \
    --container-args "-jar /app.jar -Dkey=value"

Aby wyłączyć nasłuchiwanie na porcie obrazów, które nie są aplikacjami internetowymi, dodaj następujący argument do powyższych poleceń:

    --disable-probe true

Macierz obsługi funkcji

Poniższa macierz pokazuje, jakie funkcje są obsługiwane w poszczególnych typach aplikacji.

Funkcja Aplikacje Spring Boot — wdrażanie kontenerów Aplikacje wielolotowe — wdrażanie kontenerów Uwagi
Zarządzanie cyklem życia aplikacji ✔️ ✔️
Obsługa rejestrów kontenerów ✔️ ✔️
Przypisywanie punktu końcowego ✔️ ✔️
Azure Monitor ✔️ ✔️
Integracja Z usługą APM ✔️ ✔️ Obsługiwane przez instalację ręczną.
Wdrożenie niebieskie/zielone ✔️ ✔️
Domena niestandardowa ✔️ ✔️
Skalowanie — skalowanie automatyczne ✔️ ✔️
Skalowanie — skalowanie ręczne (w/wy, w górę/w dół) ✔️ ✔️
Tożsamość zarządzana ✔️ ✔️
Spring Cloud Eureka & Config Server ✔️
Portal interfejsu API dla programu VMware Tanzu ✔️ ✔️ Tylko plan przedsiębiorstwa.
Spring Cloud Gateway for VMware Tanzu ✔️ ✔️ Tylko plan przedsiębiorstwa.
Usługa konfiguracji aplikacji dla programu VMware Tanzu ✔️ Tylko plan przedsiębiorstwa.
Widok na żywo aplikacji dla programu VMware Tanzu ✔️ Tylko plan przedsiębiorstwa.
Rejestr usługi VMware Tanzu ✔️ Tylko plan przedsiębiorstwa.
Sieć wirtualna ✔️ ✔️ Dodaj rejestr, aby dodać listę dozwolonych w sieciowej grupie zabezpieczeń lub w usłudze Azure Firewall.
Wychodzący adres IP ✔️ ✔️
E2E TLS ✔️ ✔️ Ufaj urzędowi certyfikacji z podpisem własnym.
Ustawienia gotowości i aktualności ✔️ ✔️
Zaawansowane rozwiązywanie problemów — zrzut wątku/sterta/JFR ✔️ Obraz musi zawierać powłokę Bash i zestaw JDK z określoną wartością PATH .
Model dostarczania własnego magazynu ✔️ ✔️
Integrowanie powiązania usługi z usługą Resource Połączenie or ✔️
Strefa dostępności ✔️ ✔️
Zdarzenia cyklu życia aplikacji ✔️ ✔️
Zmniejszony rozmiar aplikacji — 0,5 procesorów wirtualnych i 512 MB ✔️ ✔️
Automatyzowanie wdrożeń aplikacji za pomocą narzędzia Terraform ✔️ ✔️
Usuwanie nietrwałe ✔️ ✔️
Interaktywne środowisko diagnostyczne (oparte na usłudze AppLens) ✔️ ✔️
SLA ✔️ ✔️

Uwaga

Aplikacje polyglot obejmują aplikacje inne niż Spring Boot Java, NodeJS, AngularJS, Python i .NET.

Typowe kwestie, o których należy pamiętać podczas wdrażania za pomocą kontenera niestandardowego

Poniższe kwestie ułatwią rozwiązanie typowych sytuacji podczas wdrażania przy użyciu obrazu niestandardowego.

Ufaj urzędowi certyfikacji

Istnieją dwie opcje zaufania urzędowi certyfikacji:

Opcja 1. Przekazywanie za pośrednictwem usługi Azure Spring Apps

Aby załadować certyfikaty urzędu certyfikacji do aplikacji, zobacz Używanie certyfikatów TLS/SSL w aplikacji w usłudze Azure Spring Apps. Następnie certyfikaty zostaną zainstalowane w lokalizacji /etc/azure-spring-cloud/certs/public/.

Opcja 2. Ręczna instalacja na obrazie

Aby ufać urzędowi certyfikacji na obrazie, ustaw następujące zmienne w zależności od środowiska:

  • Aplikacje Java należy zaimportować do magazynu zaufania, dodając następujące wiersze do pliku Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • W przypadku aplikacji Node.js ustaw zmienną NODE_EXTRA_CA_CERTS środowiskową:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • W przypadku języka Python lub innych języków opartych na magazynie systemowego urzędu certyfikacji na obrazach Debian lub Ubuntu dodaj następujące zmienne środowiskowe:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • W przypadku języka Python lub innych języków opartych na magazynie urzędu certyfikacji systemu na obrazach opartych na systemie CentOS lub Fedora dodaj następujące zmienne środowiskowe:

    ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
    RUN /usr/bin/update-ca-trust
    

Unikaj nieoczekiwanego zachowania w przypadku zmiany obrazów

Gdy aplikacja zostanie ponownie uruchomiona lub przeskalowana w poziomie, najnowszy obraz będzie zawsze ściągany. Jeśli obraz został zmieniony, nowo uruchomione wystąpienia aplikacji będą używać nowego obrazu, a stare wystąpienia będą nadal używać starego obrazu.

Uwaga

Unikaj używania tagu latest lub zastępowania obrazu bez zmiany tagu, aby uniknąć nieoczekiwanego zachowania aplikacji.

Unikaj nawiązywania połączenia z rejestrem kontenerów w sieci wirtualnej

Jeśli wystąpienie zostało wdrożone w sieci wirtualnej, upewnij się, że zezwalasz na ruch sieciowy do rejestru kontenerów w sieciowej grupie zabezpieczeń lub w usłudze Azure Firewall (jeśli jest używana). Aby uzyskać więcej informacji, zobacz Obowiązki klienta dotyczące uruchamiania w sieci wirtualnej w celu dodania wymaganych reguł zabezpieczeń.

Ręczne instalowanie aplikacji APM na obrazie

Kroki instalacji różnią się w zależności od różnych monitorów wydajności aplikacji (APM) i języków. Poniższe kroki dotyczą nowych aplikacji Relic z aplikacjami Java. Należy zmodyfikować plik Dockerfile , wykonując następujące czynności:

  1. Pobierz i zainstaluj plik agenta na obrazie, dodając następujący kod do pliku Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Dodaj zmienne środowiskowe wymagane przez APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Zmodyfikuj punkt wejścia obrazu, dodając: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Aby zainstalować agentów dla innych języków, zapoznaj się z oficjalną dokumentacją innych agentów:

Nowa relikwia:

Dynatrace:

AppDynamics:

Wyświetlanie dzienników kontenera

Aby wyświetlić dzienniki konsoli aplikacji kontenera, można użyć następującego polecenia interfejsu wiersza polecenia:

az spring app logs \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --service <your-service-name> \
    --instance <your-instance-name>

Aby wyświetlić dzienniki zdarzeń kontenera z usługi Azure Monitor, wprowadź zapytanie:

AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"

Zrzut ekranu przedstawiający dziennik zdarzeń kontenera w usłudze Azure Monitor.

Skanowanie obrazu pod kątem luk w zabezpieczeniach

Zalecamy używanie Microsoft Defender dla Chmury z usługą ACR, aby zapobiec zagrożeniom obrazów. Aby uzyskać więcej informacji, zobacz Microsoft Defender dla Chmury

Przełączanie między wdrażaniem plików JAR i wdrażaniem kontenera

Typ wdrożenia można przełączyć z wdrożenia JAR na wdrożenie kontenera bezpośrednio przez ponowne wdrożenie przy użyciu następującego polecenia:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

Lub odwrotnie:

az spring app deploy \
    --resource-group <your-resource-group> \
    --name <your-app-name> \
    --artifact-path <your-jar-file> \
    --service <your-service-name>

Tworzenie innego wdrożenia przy użyciu istniejącego wdrożenia JAR

Możesz utworzyć kolejne wdrożenie przy użyciu istniejącego wdrożenia JAR przy użyciu następującego polecenia:

az spring app deployment create \
    --resource-group <your-resource-group> \
    --name <your-deployment-name> \
    --app <your-app-name> \
    --container-image <your-container-image> \
    --service <your-service-name>

CI/CD

Automatyzowanie wdrożeń przy użyciu usługi Azure Pipelines Tasks lub GitHub Actions jest teraz obsługiwane. Aby uzyskać więcej informacji, zobacz Automatyzowanie wdrożeń aplikacji w usłudze Azure Spring Apps i Używanie ciągłej integracji/ciągłego wdrażania usługi Azure Spring Apps za pomocą funkcji GitHub Actions

Następne kroki