Pemisahan lalu lintas di Azure Container Apps

Secara default, saat ingress diaktifkan, semua lalu lintas dirutekan ke revisi terbaru yang disebarkan. Saat mengaktifkan beberapa mode revisi di aplikasi kontainer, Anda dapat membagi lalu lintas masuk antara revisi aktif.

Pemisahan lalu lintas berguna untuk menguji pembaruan ke aplikasi kontainer Anda. Anda dapat menggunakan pemisahan lalu lintas untuk secara bertahap dalam revisi baru dalam penyebaran biru-hijau atau dalam pengujian A/B.

Pemisahan lalu lintas didasarkan pada bobot (persentase) lalu lintas yang dirutekan ke setiap revisi. Berat gabungan dari semua aturan pemisahan lalu lintas harus sama dengan 100%. Anda dapat menentukan revisi dengan nama revisi atau label revisi.

Artikel ini memperlihatkan kepada Anda cara mengonfigurasi aturan pemisahan lalu lintas untuk aplikasi kontainer Anda. Untuk menjalankan contoh berikut, Anda memerlukan aplikasi kontainer dengan beberapa revisi.

Mengonfigurasi pemisahan lalu lintas

Konfigurasikan pemisahan lalu lintas antara revisi menggunakan az containerapp ingress traffic set perintah . Anda dapat menentukan revisi berdasarkan nama dengan --revision-weight parameter atau dengan label revisi dengan --label-weight parameter .

Perintah berikut mengatur bobot lalu lintas untuk setiap revisi menjadi 50%:

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --revision-weight <REVISION_1>=50 <REVISION_2>=50

Pastikan untuk mengganti nilai tempat penampung yang dikelilingi oleh <> dengan nilai Anda sendiri.

Perintah ini mengatur bobot lalu lintas untuk revisi <LABEL_1> menjadi 80% dan revisi <LABEL_2> menjadi 20%:

az containerapp ingress traffic set \
    --name <APP_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --label-weight <LABEL_1>=80 <LABEL_2>=20

  1. Buka aplikasi kontainer Anda di portal Azure.
  2. Pilih Manajemen revisi dari menu sisi kiri.
  3. Jika mode revisi adalah Tunggal, atur mode ke beberapa.
    1. Pilih Pilih mode revisi.
    2. Pilih Beberapa: Beberapa revisi aktif secara bersamaan.
    3. Pilih Terapkan.
    4. Tunggu Hingga Mode Revisi diperbarui ke Beberapa. Screenshot of the revision management revision mode setting.
  4. Pilih Perlihatkan revisi yang tidak aktif.
  5. Jika Anda tidak memiliki beberapa revisi, Anda dapat membuat revisi baru.
    1. Pilih Buat revisi baru.
    2. Anda dapat menggunakan pengaturan default atau menyesuaikan revisi.
    3. Masukkan Nama/Akhiran untuk revisi.
    4. Pilih Buat. Screenshot of Create and deploy new revision.
    5. Tunggu hingga revisi disebarkan.
  6. Pilih Aktif untuk revisi yang ingin Anda rutekan lalu lintasnya.
  7. Masukkan persentase lalu lintas yang ingin Anda rutekan ke setiap revisi di kolom Lalu Lintas . Persentase gabungan dari semua lalu lintas harus sama dengan 100%.
  8. Pilih Simpan. Screenshot of traffic splitting in Revision management.

Aktifkan pemisahan lalu lintas dengan menambahkan configuration.ingress.traffic properti ke bagian ingress templat aplikasi kontainer Anda. Anda dapat menentukan revisi berdasarkan nama dengan revisionName properti atau dengan label revisi dengan label properti .

Contoh berikut menetapkan 100% lalu lintas ke revisi terbaru yang disebarkan:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
        {
          "latestRevision": true,
          "weight": 100
        }
      ]
    },
  },

Contoh berikut menunjukkan pemisahan lalu lintas antara dua revisi berdasarkan nama:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "revisionName": "my-example-app--5g3ty20",
              "weight": 50
          },
          {
              "revisionName": "my-example-app--qcfkbsv",
              "weight": 50
            }
        ],
    },
  },

Contoh berikut menunjukkan pemisahan lalu lintas antara dua revisi menurut label:

{
  ...
  "configuration": {
    "ingress": {
      "external": true,
      "targetPort": 80,
      "allowInsecure": false,
      "traffic": [
          {
              "weight": 50,
              "label": "v-2"
          },
          {
              "weight": 50,
              "label": "v-1"
          }
        ],
    },
  },

Kasus penggunaan

Skenario berikut menjelaskan pengaturan konfigurasi untuk kasus penggunaan umum. Contoh ditampilkan dalam format JSON, tetapi Anda juga dapat menggunakan portal Azure atau Azure CLI untuk mengonfigurasi pemisahan lalu lintas.

Iterasi cepat

Dalam situasi di mana Anda sering mengulangi pengembangan aplikasi kontainer, Anda dapat mengatur aturan lalu lintas untuk selalu mengalihkan semua lalu lintas ke revisi terbaru yang disebarkan.

Contoh templat berikut merutekan semua lalu lintas ke revisi terbaru yang disebarkan:

"ingress": { 
  "traffic": [
    {
      "latestRevision": true,
      "weight": 100
    }
  ]
}

Setelah puas dengan revisi terbaru, Anda dapat mengunci lalu lintas ke revisi tersebut ingress dengan memperbarui pengaturan ke:

"ingress": { 
  "traffic": [
    {
      "latestRevision": false, // optional
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    }
  ]
}

Memperbarui revisi yang ada

Pertimbangkan situasi di mana Anda memiliki revisi baik yang diketahui yang melayani 100% lalu lintas Anda, tetapi Anda ingin mengeluarkan pembaruan ke aplikasi Anda. Anda dapat menyebarkan dan menguji revisi baru menggunakan titik akhir langsung mereka tanpa memengaruhi revisi utama yang melayani aplikasi.

Setelah puas dengan revisi yang diperbarui, Anda dapat mengalihkan sebagian lalu lintas ke revisi baru untuk pengujian dan verifikasi.

Templat berikut memindahkan 20% lalu lintas ke revisi yang diperbarui:

"ingress": {
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 80
    },
    {
      "revisionName": "myapp--newerrevision",
      "weight": 20
    }
  ]
}

Layanan mikro penahapan

Saat membangun layanan mikro, Anda mungkin ingin mempertahankan titik akhir produksi dan penahapan untuk aplikasi yang sama. Gunakan label untuk memastikan bahwa lalu lintas tidak beralih di antara revisi yang berbeda.

Contoh templat berikut menerapkan label ke revisi yang berbeda.

"ingress": { 
  "traffic": [
    {
      "revisionName": "myapp--knowngoodrevision",
      "weight": 100
    },
    {
      "revisionName": "myapp--98fdgt",
      "weight": 0,
      "label": "staging"
    }
  ]
}

Langkah berikutnya