Mengonfigurasi satu alamat IP publik untuk lalu lintas keluar dan masuk ke grup kontainer

Menyiapkan grup kontainer dengan alamat IP eksternal memungkinkan klien eksternal menggunakan alamat IP untuk mengakses kontainer dalam grup. Misalnya, browser dapat mengakses aplikasi web yang dijalankan dalam kontainer. Namun, saat ini grup kontainer menggunakan alamat IP yang berbeda untuk lalu lintas keluar. Alamat IP keluar ini tidak diekspos secara terprogram, yang membuat pemantauan grup kontainer dan konfigurasi aturan firewall klien lebih kompleks.

Artikel ini menjelaskan langkah-langkah untuk mengonfigurasi grup kontainer dalam jaringan virtual yang terintegrasi dengan Azure Firewall. Dengan menyiapkan rute yang ditentukan pengguna ke grup kontainer dan aturan firewall, Anda dapat merutekan dan mengidentifikasi lalu lintas ke dan dari grup kontainer. Masuk dan keluarnya grup kontainer menggunakan alamat IP publik firewall. Satu alamat IP keluar dapat digunakan oleh beberapa grup kontainer yang disebarkan di subnet jaringan virtual yang didelegasikan ke Azure Container Instances.

Dalam artikel ini, Anda menggunakan Azure CLI untuk membuat sumber daya untuk skenario ini:

  • Grup kontainer yang disebarkan di subnet yang didelegasikan di jaringan virtual
  • Firewall Azure yang disebarkan di jaringan dengan alamat IP publik statik
  • Rute yang ditentukan pengguna di subnet grup kontainer
  • Aturan NAT untuk masuknya firewall dan aturan aplikasi untuk keluarnya firewall

Anda kemudian memvalidasi masuk dan keluar dari grup kontainer contoh melalui firewall.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

Meluncurkan Azure Cloud Shell

Azure Cloud Shell adalah shell interaktif gratis yang dapat Anda gunakan untuk menjalankan langkah-langkah dalam artikel ini. Shell ini memiliki alat Azure umum yang telah dipasang sebelumnya dan dikonfigurasi untuk digunakan dengan akun Anda.

Untuk membuka Cloud Shell, cukup pilih Cobalah dari sudut kanan atas blok kode. Anda juga dapat meluncurkan Cloud Shell di tab browser terpisah dengan membuka https://shell.azure.com.

Saat Cloud Shell terbuka, verifikasi bahwa Bash dipilih untuk lingkungan Anda. Sesi berikutnya akan menggunakan Azure CLI dalam lingkungan Bash, Pilih Salin untuk menyalin blok kode, tempelkan ke Cloud Shell, lalu tekan Enter untuk menjalankannya.

Masuk ke Azure

Cloud Shell diautentikasi secara otomatis dengan akun awal yang digunakan untuk masuk. Gunakan skrip berikut untuk masuk menggunakan langganan yang berbeda, menggantikan <Subscription ID> dengan ID Langganan Azure Anda. Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

subscription="<subscriptionId>" # add subscription here

az account set -s $subscription # ...or use 'az login'

Untuk informasi selengkapnya, lihat mengatur langganan aktif atau masuk secara interaktif

Catatan

Untuk mengunduh skrip lengkap, buka skrip lengkap.

Mulai

Tutorial ini menggunakan variabel acak. Jika Anda menggunakan grup sumber daya yang ada, ubah nilai variabel ini dengan tepat.

resourceGroup=resourceGroup$RANDOM

Grup sumber daya Azure: Jika Anda belum memiliki grup sumber daya Azure, buat grup sumber daya dengan perintah az group create. Modifikasi nilai lokasi yang sesuai.

az group create --name $resourceGroup --location eastus

Menyebarkan ACI dalam jaringan virtual

Dalam kasus umum, Anda mungkin sudah memiliki jaringan virtual Azure tempat grup kontainer disebarkan. Sebagai demonstrasi, perintah berikut membuat jaringan virtual dan subnet saat grup kontainer dibuat. Subnet didelegasikan ke Azure Container Instances.

Grup kontainer menjalankan aplikasi web kecil dari gambar aci-helloworld. Seperti yang diperlihatkan dalam artikel lain dalam dokumentasi, gambar ini mengemas aplikasi web kecil yang ditulis Node.js yang menyajikan halaman HTML statik.

Buat grup kontainer dengan perintah az container create:

az container create \
  --name appcontainer \
  --resource-group $resourceGroup \
  --image mcr.microsoft.com/azuredocs/aci-helloworld \
  --vnet aci-vnet \
  --vnet-address-prefix 10.0.0.0/16 \
  --subnet aci-subnet \
  --subnet-address-prefix 10.0.0.0/24

Tip

Sesuaikan nilai --subnet address-prefix untuk ruang alamat IP yang Anda butuhkan di subnet Anda. Subnet terkecil yang didukung adalah /29, yang menyediakan delapan alamat IP. Beberapa alamat IP disediakan untuk digunakan oleh Azure.

Untuk penggunaan pada langkah selanjutnya, dapatkan alamat IP privat grup kontainer dengan menjalankan perintah [az container show][az-container-show]:

aciPrivateIp="$(az container show --name appcontainer \
  --resource-group $resourceGroup \
  --query ipAddress.ip --output tsv)"

Menyebarkan Azure Firewall dalam jaringan

Di bagian berikut, gunakan Azure CLI untuk menyebarkan firewall Azure di jaringan virtual. Untuk latar belakang, lihat Tutorial: Menyebarkan dan mengonfigurasi Azure Firewall menggunakan portal Microsoft Azure.

Pertama, gunakan az network vnet subnet create untuk menambahkan subnet bernama AzureFirewallSubnet untuk firewall. AzureFirewallSubnet adalah nama yang diperlukan dari subnet ini.

az network vnet subnet create \
  --name AzureFirewallSubnet \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet   \
  --address-prefix 10.0.1.0/26

Gunakan perintah Azure CLI berikut untuk membuat firewall di subnet.

Jika belum diinstal, tambahkan ekstensi firewall ke Azure CLI menggunakan perintah az extension add:

az extension add --name azure-firewall

Buat sumber daya firewall menggunakan perintah az network firewall create:

az network firewall create \
  --name myFirewall \
  --resource-group $resourceGroup \
  --location eastus

az network public-ip create \
  --name fw-pip \
  --resource-group $resourceGroup \
  --location eastus \
  --allocation-method static \
  --sku standard
    
az network firewall ip-config create \
  --firewall-name myFirewall \
  --name FW-config \
  --public-ip-address fw-pip \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet

Perbarui konfigurasi firewall menggunakan perintah az network firewall update:

az network firewall update \
  --name myFirewall \
  --resource-group $resourceGroup

Dapatkan alamat IP privat firewall menggunakan perintah az network firewall ip-config list. Alamat IP privat ini digunakan dalam perintah berikutnya.

fwPrivateIp="$(az network firewall ip-config list \
  --resource-group $resourceGroup \
  --firewall-name myFirewall \
  --query "[].privateIpAddress" --output tsv)"

Dapatkan alamat IP publik firewall menggunakan perintah az network public-ip show. Alamat IP publik ini digunakan dalam perintah berikutnya.

fwPublicIp="$(az network public-ip show \
  --name fw-pip \
  --resource-group $resourceGroup \
  --query ipAddress --output tsv)"

Menentukan rute yang ditentukan pengguna di subnet ACI

Tentukan rute yang ditentukan pengguna di subnet ACI untuk mengalihkan lalu lintas ke firewall Azure. Untuk informasi selengkapnya, lihat Merutekan lalu lintas jaringan.

Buat tabel rute

Pertama, jalankan perintah az network route-table create berikut untuk membuat tabel rute. Buat tabel rute di wilayah yang sama dengan jaringan virtual.

az network route-table create \
  --name Firewall-rt-table \
  --resource-group $resourceGroup \
  --location eastus \
  --disable-bgp-route-propagation true

Membuat rute

Jalankan perintah az network-route-table route create untuk membuat rute dalam tabel rute. Untuk merutekan lalu lintas ke firewall, atur jenis hop berikutnya ke VirtualAppliance, dan lewati alamat IP privat firewall sebagai alamat hop berikutnya.

az network route-table route create \
  --resource-group $resourceGroup \
  --name DG-Route \
  --route-table-name Firewall-rt-table \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $fwPrivateIp

Mengaitkan tabel rute ke subnet ACI

Jalankan perintah az network vnet subnet update untuk mengaitkan tabel rute dengan subnet yang didelegasikan ke Azure Container Instances.

az network vnet subnet update \
  --name aci-subnet \
  --resource-group $resourceGroup \
  --vnet-name aci-vnet \
  --address-prefixes 10.0.0.0/24 \
  --route-table Firewall-rt-table

Mengonfigurasi aturan pada firewall

Secara default, Azure Firewall menolak (memblokir) lalu lintas masuk dan keluar.

Mengonfigurasi aturan NAT pada firewall ke subnet ACI

Buat aturan NAT di firewall untuk menerjemahkan dan memfilter lalu lintas internet masuk ke kontainer aplikasi yang Anda mulai sebelumnya di jaringan. Untuk detailnya, lihat Memfilter lalu lintas Internet masuk dengan DNAT Azure Firewall

Buat aturan koleksi dan aturan NAT menggunakan perintah az network firewall nat-rule create:

az network firewall nat-rule create \
  --firewall-name myFirewall \
  --collection-name myNATCollection \
  --action dnat \
  --name myRule \
  --protocols TCP \
  --source-addresses '*' \
  --destination-addresses $fwPublicIp \
  --destination-ports 80 \
  --resource-group $resourceGroup \
  --translated-address $aciPrivateIp \
  --translated-port 80 \
  --priority 200

Tambahkan aturan NAT sesuai kebutuhan untuk memfilter lalu lintas ke alamat IP lain di subnet. Misalnya, grup kontainer lain di subnet dapat mengekspos alamat IP untuk lalu lintas masuk, atau alamat IP internal lainnya dapat ditetapkan ke grup kontainer setelah dimulai ulang.

Membuat aturan aplikasi keluar di firewall

Jalankan perintah az network firewall application-rule create berikut untuk membuat aturan keluar di firewall. Contoh aturan ini memungkinkan akses dari subnet yang didelegasikan ke Azure Container Instances ke FQDN checkip.dyndns.org. Akses HTTP ke situs digunakan dalam langkah selanjutnya untuk mengonfirmasi alamat IP keluar dari Azure Container Instances.

az network firewall application-rule create \
  --collection-name myAppCollection \
  --firewall-name myFirewall \
  --name Allow-CheckIP \
  --protocols Http=80 Https=443 \
  --resource-group $resourceGroup \
  --target-fqdns checkip.dyndns.org \
  --source-addresses 10.0.0.0/24 \
  --priority 200 \
  --action Allow

Menguji akses grup kontainer melalui firewall

Bagian berikut memverifikasi bahwa subnet yang didelegasikan ke Azure Container Instances dikonfigurasi dengan benar di belakang firewall Azure. Langkah-langkah sebelumnya merutekan lalu lintas masuk ke subnet dan lalu lintas keluar dari subnet melalui firewall.

Menguji akses masuk ke grup kontainer

Uji akses masuk ke yang appcontainer berjalan di jaringan virtual dengan menelusuri ke alamat IP publik firewall. Sebelumnya, Anda telah menyimpan alamat IP publik dalam variabel $FW_PUBLIC_IP:

echo $fwPublicIp

Output kurang lebih seperti:

52.142.18.133

Jika aturan NAT di firewall dikonfigurasi dengan benar, Anda akan melihat berikut saat memasukkan alamat IP publik firewall di browser Anda:

Browse to firewall's public IP address

Menguji akses keluar dari grup kontainer

Sebarkan contoh kontainer berikut ke dalam jaringan virtual. Saat dijalankan, satu permintaan HTTP ke http://checkip.dyndns.org akan dikirim, yang menampilkan alamat IP pengirim (alamat IP keluar). Jika aturan aplikasi di firewall dikonfigurasi dengan benar, alamat IP publik firewall akan ditampilkan.

az container create \
  --resource-group $resourceGroup \
  --name testegress \
  --image mcr.microsoft.com/azuredocs/aci-tutorial-sidecar \
  --command-line "curl -s http://checkip.dyndns.org" \
  --restart-policy OnFailure \
  --vnet aci-vnet \
  --subnet aci-subnet

Lihat log kontainer untuk mengonfirmasi bahwa alamat IP sama dengan alamat IP publik firewall.

az container logs \
  --resource-group $resourceGroup \
  --name testegress 

Output kurang lebih seperti:

<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>

Membersihkan sumber daya

Jika tidak diperlukan lagi, Anda dapat menggunakan hapus grup az untuk menghapus grup sumber daya, dan semua sumber daya terkait sebagaimana berikut ini. Parameter --no-wait mengembalikan kontrol ke permintaan tanpa menunggu operasi selesai. Parameter --yes mengonfirmasi bahwa Anda ingin menghapus sumber daya tanpa permintaan tambahan untuk melakukannya.

az group delete --name $resourceGroup --yes --no-wait

Langkah berikutnya

Dalam artikel ini, Anda menyiapkan grup kontainer di jaringan virtual di belakang firewall Azure. Anda telah mengonfigurasi rute yang ditentukan pengguna dan NAT serta aturan aplikasi di firewall. Dengan menggunakan konfigurasi ini, Anda menyiapkan satu alamat IP statik untuk akses masuk dan keluar dari Azure Container Instances.

Untuk informasi selengkapnya tentang mengelola lalu lintas dan melindungi sumber daya Azure, lihat dokumentasi Azure Firewall.