Distribuera ett program med en anpassad containeravbildning

Varning

Den här artikeln refererar till CentOS, en Linux-distribution som närmar sig EOL-status (End Of Life). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

Den här artikeln gäller för: ✔️ Standard ✔️ Enterprise

Den här artikeln beskriver hur du distribuerar Spring Boot-program i Azure Spring Apps med hjälp av en anpassad containeravbildning. Distribution av ett program med en anpassad container stöder de flesta funktioner som när du distribuerar ett JAR-program. Andra Java- och icke-Java-program kan också distribueras med containeravbildningen.

Förutsättningar

  • En containeravbildning som innehåller programmet.
  • Avbildningen skickas till ett avbildningsregister. Mer information finns i Azure Container Registry.

Kommentar

Webbprogrammet måste lyssna på porten 1025 för Standard-planen och på porten 8080 för Enterprise-planen. Hur du ändrar porten beror på programmets ramverk. Ange till exempel SERVER_PORT=1025 för Spring Boot-program eller ASPNETCORE_URLS=http://+:1025/ för ASP.NET Core-program. Du kan inaktivera avsökningen för program som inte lyssnar på någon port. Mer information finns i Konfigurera hälsoavsökningar och graciösa avslutningsperioder för appar som finns i Azure Spring Apps.

Distribuera appen

Använd följande steg för att distribuera ett program till en anpassad containeravbildning:

Om du vill distribuera en containeravbildning använder du något av följande kommandon:

  • Om du vill distribuera en containeravbildning till den offentliga Docker Hub till en app använder du följande kommando:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Om du vill distribuera en containeravbildning från ACR till en app eller från ett annat privat register till en app använder du följande kommando:

    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>
    

Om du vill skriva över startpunkten för avbildningen lägger du till följande två argument i något av ovanstående kommandon:

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

Om du vill inaktivera lyssning på en port för avbildningar som inte är webbprogram lägger du till följande argument i kommandona ovan:

    --disable-probe true

Matris för funktionsstöd

Följande matris visar vilka funktioner som stöds i varje programtyp.

Funktion Spring Boot Apps – containerdistribution Polyglot Apps – containerdistribution Kommentar
Applivscykelhantering ✔️ ✔️
Stöd för containerregister ✔️ ✔️
Tilldela slutpunkt ✔️ ✔️
Azure Monitor ✔️ ✔️
APM-integrering ✔️ ✔️ Stöds av manuell installation.
Blå/grön distribution ✔️ ✔️
Anpassad domän ✔️ ✔️
Skalning – automatisk skalning ✔️ ✔️
Skalning – manuell skalning (in/ut, upp/ned) ✔️ ✔️
Hanterad identitet ✔️ ✔️
Spring Cloud Eureka & Config Server ✔️
API-portalen för VMware Tanzu ✔️ ✔️ Endast företagsplan.
Spring Cloud Gateway för VMware Tanzu ✔️ ✔️ Endast företagsplan.
Programkonfigurationstjänst för VMware Tanzu ✔️ Endast företagsplan.
Programmets livevy för VMware Tanzu ✔️ Endast företagsplan.
VMware Tanzu Service Registry ✔️ Endast företagsplan.
VNET ✔️ ✔️ Lägg till registret i listan över tillåtna i NSG eller Azure Firewall.
Utgående IP-adress ✔️ ✔️
E2E TLS ✔️ ✔️ Lita på en självsignerad CA.
Inställningar för livskraft och beredskap ✔️ ✔️
Avancerad felsökning – tråd/heap/JFR-dump ✔️ Bilden måste innehålla Bash och JDK med PATH angivet.
Ta med din egen lagring ✔️ ✔️
Integrera tjänstbindning med Resource Anslut or ✔️
Tillgänglighetszon ✔️ ✔️
Händelser i appens livscykel ✔️ ✔️
Minskad appstorlek – 0,5 vCPU och 512 MB ✔️ ✔️
Automatisera appdistributioner med Terraform ✔️ ✔️
Mjuk borttagning ✔️ ✔️
Interaktiv diagnostikupplevelse (AppLens-baserad) ✔️ ✔️
SLA ✔️ ✔️

Kommentar

Polyglot-appar inkluderar Java-appar som inte är Spring Boot Java, NodeJS, AngularJS, Python och .NET.

Vanliga punkter att vara medveten om när du distribuerar med en anpassad container

Följande punkter hjälper dig att hantera vanliga situationer när du distribuerar med en anpassad avbildning.

Lita på en certifikatutfärdare

Det finns två alternativ för att lita på en certifikatutfärdare:

Alternativ 1: Ladda upp via Azure Spring Apps

Information om hur du läser in CA-certifikaten i dina appar finns i Använda TLS/SSL-certifikat i ditt program i Azure Spring Apps. Sedan monteras certifikaten på platsen /etc/azure-spring-cloud/certs/public/.

Alternativ 2: Manuell installation i avbildningen

Om du vill lita på en ca i avbildningen anger du följande variabler beroende på din miljö:

  • Du måste importera Java-program till förtroendearkivet genom att lägga till följande rader i Din Dockerfile:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Ange miljövariabeln NODE_EXTRA_CA_CERTS för Node.js program:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • För Python, eller andra språk som förlitar sig på system-CA-arkivet, på Debian- eller Ubuntu-avbildningar lägger du till följande miljövariabler:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • För Python, eller andra språk som förlitar sig på system-CA-arkivet, på CentOS- eller Fedora-baserade avbildningar lägger du till följande miljövariabler:

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

Undvik oväntat beteende när bilder ändras

När programmet startas om eller skalas ut hämtas alltid den senaste avbildningen. Om avbildningen har ändrats använder de nyligen startade programinstanserna den nya avbildningen medan de gamla instanserna fortsätter att använda den gamla avbildningen.

Kommentar

Undvik att använda taggen latest eller skriv över avbildningen utan en taggändring för att undvika oväntat programbeteende.

Undvik att kunna ansluta till containerregistret i ett virtuellt nätverk

Om du distribuerade instansen till ett virtuellt nätverk kontrollerar du att du tillåter nätverkstrafik till containerregistret i NSG eller Azure Firewall (om den används). Mer information finns i Kundens ansvar för att köra i VNet för att lägga till nödvändiga säkerhetsregler.

Installera en APM i avbildningen manuellt

Installationsstegen varierar på olika programprestandaövervakare (API:er) och språk. Följande steg gäller för New Relic med Java-program. Du måste ändra Dockerfile med hjälp av följande steg:

  1. Ladda ned och installera agentfilen i avbildningen genom att lägga till följande i Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Lägg till de miljövariabler som krävs av APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Ändra startpunkten för bilden genom att lägga till: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Om du vill installera agenterna för andra språk läser du den officiella dokumentationen för de andra agenterna:

Ny relik:

Dynatrace:

AppDynamics:

Visa containerloggarna

Om du vill visa konsolloggarna för ditt containerprogram kan du använda följande CLI-kommando:

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

Om du vill visa containerhändelseloggarna från Azure Monitor anger du frågan:

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

Skärmbild av Azure Monitor som visar containerhändelseloggen.

Sök igenom avbildningen efter sårbarheter

Vi rekommenderar att du använder Microsoft Defender för molnet med ACR för att förhindra att dina bilder blir sårbara. Mer information finns i Microsoft Defender för molnet

Växla mellan JAR-distribution och containerdistribution

Du kan växla distributionstypen från JAR-distribution till containerdistribution direkt genom att distribuera om med hjälp av följande kommando:

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

Eller omvänt:

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

Skapa en annan distribution med en befintlig JAR-distribution

Du kan skapa en annan distribution med hjälp av en befintlig JAR-distribution med hjälp av följande kommando:

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

Automatisera distributioner med hjälp av Azure Pipelines-uppgifter eller GitHub Actions stöds nu. Mer information finns i Automatisera programdistributioner till Azure Spring Apps och Använda Azure Spring Apps CI/CD med GitHub Actions

Nästa steg