Menyebarkan aplikasi dengan gambar kontainer kustom

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Catatan

Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.

Artikel ini berlaku untuk: ✔️ Standard ✔️ Enterprise

Artikel ini menjelaskan cara menyebarkan aplikasi Spring Boot di Azure Spring Apps menggunakan gambar kontainer kustom. Menyebarkan aplikasi dengan kontainer kustom mendukung sebagian besar fitur seperti saat menyebarkan aplikasi JAR. Aplikasi Java dan non-Java lainnya juga dapat disebarkan dengan gambar kontainer.

Prasyarat

  • Gambar kontainer yang berisi aplikasi.
  • Gambar didorong ke registri gambar. Untuk informasi selengkapnya, lihat Azure Container Registry.

Catatan

Aplikasi web harus mendengarkan port 1025 untuk paket Standar dan di port 8080 untuk paket Enterprise. Cara mengubah port tergantung pada kerangka kerja aplikasi. Misalnya, tentukan SERVER_PORT=1025 untuk aplikasi Spring Boot atau ASPNETCORE_URLS=http://+:1025/ untuk aplikasi ASP.NET Core. Anda dapat menonaktifkan pemeriksaan untuk aplikasi yang tidak mendengarkan di port apa pun. Untuk informasi selengkapnya, lihat Cara mengonfigurasi pemeriksaan kesehatan dan periode penghentian yang anggun untuk aplikasi yang dihosting di Azure Spring Apps.

Menyebarkan aplikasi Anda

Untuk menyebarkan aplikasi ke gambar kontainer kustom, gunakan langkah-langkah berikut:

Untuk menyebarkan gambar kontainer, gunakan salah satu perintah berikut:

  • Untuk menyebarkan gambar kontainer ke Docker Hub publik ke aplikasi, gunakan perintah berikut:

    az spring app deploy \
       --resource-group <your-resource-group> \
       --name <your-app-name> \
       --container-image <your-container-image> \
       --service <your-service-name>
    
  • Untuk menyebarkan gambar kontainer dari ACR ke aplikasi, atau dari registri privat lain ke aplikasi, gunakan perintah berikut:

    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>
    

Untuk menimpa titik entri gambar, tambahkan dua argumen berikut ke salah satu perintah di atas:

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

Untuk menonaktifkan mendengarkan pada port untuk gambar yang bukan aplikasi web, tambahkan argumen berikut ke perintah di atas:

    --disable-probe true

Matriks Dukungan Fitur

Matriks berikut menunjukkan fitur apa yang didukung di setiap jenis aplikasi.

Fitur Spring Boot Apps - penyebaran kontainer Polyglot Apps - penyebaran kontainer Catatan
Manajemen siklus hidup aplikasi ✔️ ✔️
Dukungan untuk registri kontainer ✔️ ✔️
Tetapkan titik akhir ✔️ ✔️
Azure Monitor ✔️ ✔️
Integrasi APM ✔️ ✔️ Didukung oleh penginstalan manual.
Penyebaran biru/hijau ✔️ ✔️
Domain kustom ✔️ ✔️
Penskalaan - penskalaan otomatis ✔️ ✔️
Penskalaan - penskalaan manual (masuk/keluar, atas/bawah) ✔️ ✔️
Identitas terkelola ✔️ ✔️
Spring Cloud Eureka &Config Server ✔️
Portal API untuk VMware Tanzu ✔️ ✔️ Paket perusahaan saja.
Spring Cloud Gateway untuk VMware Tanzu ✔️ ✔️ Paket perusahaan saja.
Layanan Konfigurasi Aplikasi untuk VMware Tanzu ✔️ Paket perusahaan saja.
Application Live View untuk VMware Tanzu ✔️ Paket perusahaan saja.
Registri Layanan VMware Tanzu ✔️ Paket perusahaan saja.
VNET ✔️ ✔️ Tambahkan registri untuk mengizinkan daftar di NSG atau Azure Firewall.
Alamat IP Keluar ✔️ ✔️
E2E TLS ✔️ ✔️ Percayai CA yang ditandatangani sendiri.
Pengaturan keaktifan dan kesiapan ✔️ ✔️
Pemecahan masalah tingkat lanjut - rangkaian/heap/JFR cadangan ✔️ Gambar harus menyertakan Bash dan JDK dengan PATH yang ditentukan.
Membawa penyimpanan Anda sendiri ✔️ ✔️
Integrasikan pengikatan layanan dengan Konektor Sumber Daya ✔️
Zona Ketersediaan ✔️ ✔️
Peristiwa Siklus Hidup Aplikasi ✔️ ✔️
Mengurangi ukuran aplikasi - 0,5 vCPU dan 512 MB ✔️ ✔️
Otomatiskan penyebaran dengan Terraform ✔️ ✔️
Penghapusan Sementara ✔️ ✔️
Pengalaman diagnostik interaktif (berbasis AppLens) ✔️ ✔️
SLA ✔️ ✔️

Catatan

Aplikasi Polyglot termasuk aplikasi non-Spring Boot Java, NodeJS, AngularJS, Python, dan .NET.

Poin umum yang perlu diperhatikan saat menyebarkan dengan kontainer kustom

Poin-poin berikut akan membantu Anda mengatasi situasi umum saat menyebarkan dengan gambar kustom.

Mempercayai Otoritas Sertifikat

Ada dua opsi untuk mempercayai Otoritas Sertifikat:

Opsi 1: Unggah melalui Azure Spring Apps

Untuk memuat sertifikasi CA ke dalam aplikasi Anda, lihat Menggunakan sertifikat TLS/SSL di aplikasi Anda di Azure Spring Apps. Kemudian sertifikat akan dipasang ke lokasi /etc/azure-spring-cloud/certs/public/.

Opsi 2: Penginstalan manual dalam gambar

Untuk mempercayai CA dalam gambar, atur variabel berikut tergantung pada lingkungan Anda:

  • Anda harus mengimpor aplikasi Java ke penyimpanan kepercayaan dengan menambahkan baris berikut ke Dockerfile Anda:

    ADD EnterpriseRootCA.crt /opt/
    RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
    
  • Untuk aplikasi Node.js, atur NODE_EXTRA_CA_CERTS variabel lingkungan:

    ADD EnterpriseRootCA.crt /opt/
    ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
    
  • Untuk Python, atau bahasa lain yang mengandalkan penyimpanan OS sistem, pada gambar Debian atau Ubuntu, tambahkan variabel lingkungan berikut:

    ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
    RUN /usr/sbin/update-ca-certificates
    
  • Untuk Python, atau bahasa lain yang mengandalkan penyimpanan OS sistem, pada gambar berbasis CentOS atau Fedora, tambahkan variabel lingkungan berikut:

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

Hindari perilaku tak terduga saat gambar berubah

Ketika aplikasi Anda dimulai ulang atau diskalakan, gambar terbaru akan selalu ditarik. Jika gambar telah diubah, instans aplikasi yang baru dimulai akan menggunakan gambar baru sementara instans lama akan terus menggunakan gambar lama.

Catatan

Hindari menggunakan latest tag atau timpa gambar tanpa perubahan tag untuk menghindari perilaku aplikasi yang tidak terduga.

Hindari tidak dapat tersambung ke registri kontainer di VNet

Jika Anda menyebarkan instans ke VNet, pastikan Anda mengizinkan lalu lintas jaringan ke registri kontainer Anda di NSG atau Azure Firewall (jika digunakan). Untuk informasi selengkapnya, lihat Tanggung jawab pelanggan untuk berjalan di VNet untuk menambahkan aturan keamanan yang diperlukan.

Menginstal APM ke dalam gambar secara manual

Langkah-langkah penginstalan bervariasi pada pemantauan performa aplikasi (APM) dan bahasa yang berbeda. Langkah-langkah berikut adalah untuk New Relic dengan aplikasi Java. Anda harus mengubah Dockerfile menggunakan langkah-langkah berikut:

  1. Unduh dan instal file agen ke dalam gambar dengan menambahkan yang berikut ini ke Dockerfile:

    ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
    
  2. Tambahkan variabel lingkungan yang diperlukan oleh APM:

    ENV NEW_RELIC_APP_NAME=appName
    ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    
  3. Ubah titik entri gambar dengan menambahkan: java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar

Untuk menginstal agen untuk bahasa lain, lihat dokumentasi resmi untuk agen lain:

Relik Baru:

Dynatrace:

AppDynamics:

Menampilkan log kontainer

Untuk melihat log konsol aplikasi kontainer Anda, perintah CLI berikut dapat digunakan:

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

Untuk menampilkan log peristiwa kontainer dari Azure Monitor, masukkan kueri:

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

Cuplikan layar Azure Monitor yang memperlihatkan log peristiwa kontainer.

Pindai citra Anda untuk kerentanan

Kami menyarankan agar Anda menggunakan Microsoft Defender untuk Cloud dengan ACR untuk mencegah gambar Anda rentan. Untuk informasi selengkapnya, lihat Microsoft Defender untuk Cloud

Beralih antara penyebaran JAR dan penyebaran kontainer

Anda dapat mengalihkan jenis penyebaran dari penyebaran JAR ke penyebaran kontainer secara langsung dengan menyebarkan ulang menggunakan perintah berikut:

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

Atau sebaliknya:

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

Membuat penyebaran lain dengan penyebaran JAR yang ada

Anda dapat membuat penyebaran lain menggunakan penyebaran JAR yang sudah ada menggunakan perintah berikut:

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

Mengotomatiskan penyebaran menggunakan Tugas Alur Azure atau Tindakan GitHub didukung sekarang. Untuk informasi selengkapnya, lihat Mengotomatiskan penyebaran aplikasi ke Azure Spring Apps dan Menggunakan Ci/CD Azure Spring Apps dengan GitHub Actions

Langkah berikutnya