Mengekspos aplikasi dengan TLS ujung ke ujung dalam jaringan virtual
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: ✔️ Basic/Standard ✔️ Enterprise
Artikel ini akan menjelaskan cara mengekspos aplikasi ke internet menggunakan Application Gateway. Saat instans layanan Azure Spring Apps disebarkan di jaringan virtual Anda, aplikasi pada instans layanan hanya dapat diakses di jaringan privat. Untuk membuat aplikasi dapat diakses di Internet, Anda perlu berintegrasi dengan Azure Application Gateway.
Prasyarat
- Azure CLI versi 2.0.4 atau yang lebih baru.
- Instans layanan Azure Spring Apps yang disebarkan di jaringan virtual dengan aplikasi yang dapat diakses melalui jaringan privat menggunakan sufiks domain
.private.azuremicroservices.io
default. Untuk informasi selengkapnya, lihat Menyebarkan Azure Spring Apps dalam jaringan virtual - Domain kustom yang akan digunakan untuk mengakses aplikasi.
- Sertifikat, disimpan di Key Vault, yang cocok dengan domain kustom yang akan digunakan untuk membentuk pendengar HTTPS. Untuk informasi selengkapnya, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault.
Mengonfigurasikan Application Gateway untuk Azure Spring Apps
Kami menyarankan agar nama domain, seperti yang terlihat oleh browser, sama dengan nama host yang digunakan Application Gateway untuk mengarahkan lalu lintas ke bagian belakang Azure Spring Apps. Rekomendasi ini memberikan pengalaman terbaik saat menggunakan Application Gateway untuk mengekspos aplikasi yang dihosting di Azure Spring Apps dan berada di jaringan virtual. Jika domain yang diekspos oleh Application Gateway berbeda dari domain yang diterima oleh Azure Spring Apps, cookie dan URL pengalihan yang dihasilkan (misalnya) dapat rusak. Untuk informasi selengkapnya, lihat Pelestarian nama host.
Untuk mengonfigurasikan Application Gateway di depan Azure Spring Apps, gunakan langkah-langkah berikut.
- Ikuti instruksi di Menyebarkan Azure Spring Apps di jaringan virtual.
- Ikuti instruksi di Mengakses aplikasi Anda di jaringan privat.
- Dapatkan sertifikat untuk domain pilihan Anda dan simpan di Key Vault. Untuk informasi selengkapnya, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault.
- Konfigurasikan domain kustom dan sertifikat yang sesuai dari Key Vault pada aplikasi yang diterapkan ke Azure Spring Apps. Untuk informasi selengkapnya, lihat Tutorial: Memetakan domain kustom yang sudah ada ke Azure Spring Apps.
- Sebarkan Application Gateway dalam jaringan virtual yang dikonfigurasi sesuai dengan daftar berikut:
- Gunakan Azure Spring Apps di kumpulan backend, direferensikan oleh domain yang diakhiri dengan
private.azuremicroservices.io
. - Sertakan pendengar HTTPS menggunakan sertifikat yang sama dari Key Vault.
- Konfigurasikan jaringan virtual dengan pengaturan HTTP yang menggunakan nama domain kustom yang dikonfigurasikan di Azure Spring Apps sebagai ganti dari domain yang diakhiri dengan
private.azuremicroservices.io
.
- Gunakan Azure Spring Apps di kumpulan backend, direferensikan oleh domain yang diakhiri dengan
- Konfigurasikan DNS publik Anda untuk menunjuk ke Application Gateway.
Tentukan variabel
Berikutnya, gunakan perintah berikut untuk menentukan variabel untuk grup sumber daya dan jaringan virtual yang Anda buat sebagaimana diarahkan dalam Menyebarkan Azure Spring Apps di jaringan virtual. Sesuaikan nilai berdasarkan lingkungan Anda yang sebenarnya. Saat Anda menentukan SPRING_APP_PRIVATE_FQDN
, hapus https://
dari URI.
export SUBSCRIPTION='subscription-id'
export RESOURCE_GROUP='my-resource-group'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='name-of-spring-cloud-instance'
export APPNAME='name-of-app-in-azure-spring-apps'
export SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
export VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
export APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
export APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'
Masuk ke Azure
Gunakan perintah berikut untuk masuk ke Azure CLI dan pilih langganan aktif Anda.
az login
az account set --subscription $SUBSCRIPTION
Memperoleh sertifikat
- Menggunakan sertifikat yang ditandatangani publik
- Menggunakan sertifikat yang ditandatangani sendiri
Untuk penyebaran produksi, kemungkinan besar Anda akan menggunakan sertifikat yang ditandatangani publik. Dalam kasus ini, impor sertifikat di Azure Key Vault. Untuk informasi selengkapnya, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault. Pastikan sertifikat mencakup seluruh rantai sertifikat.
Konfigurasikan nama domain publik di Azure Spring Apps
Lalu lintas akan memasuki aplikasi yang disebarkan di Azure Spring Apps menggunakan nama domain publik. Untuk mengonfigurasikan aplikasi Anda untuk mendengarkan nama host ini dan melakukannya melalui HTTPS, gunakan perintah berikut untuk menambahkan domain kustom ke aplikasi Anda:
export KV_NAME='name-of-key-vault'
export KV_RG='resource-group-name-of-key-vault'
export CERT_NAME_IN_AZURE_SPRING_APPS='name-of-certificate-in-Azure-Spring-Apps'
export CERT_NAME_IN_KEY_VAULT='name-of-certificate-with-intermediaries-in-key-vault'
export DOMAIN_NAME=myapp.mydomain.com
# provide permissions to Azure Spring Apps to read the certificate from Key Vault:
export VAULTURI=$(az keyvault show \
--resource-group $KV_RG \
--name $KV_NAME \
--query properties.vaultUri \
--output tsv)
# get the object id for the Azure Spring Apps Domain-Management Service Principal:
export ASADM_OID=$(az ad sp show \
--id 03b39d0f-4213-4864-a245-b1476ec03169 \
--query objectId \
--output tsv)
# allow this Service Principal to read and list certificates and secrets from Key Vault:
az keyvault set-policy \
--resource-group $KV_RG \
--name $KV_NAME \
--object-id $ASADM_OID \
--certificate-permissions get list \
--secret-permissions get list
# add custom domain name and configure TLS using the certificate:
az spring certificate add \
--resource-group $RESOURCE_GROUP \
--service $SPRING_CLOUD_NAME \
--name $CERT_NAME_IN_AZURE_SPRING_APPS \
--vault-certificate-name $CERT_NAME_IN_KEY_VAULT \
--vault-uri $VAULTURI
az spring app custom-domain bind \
--resource-group $RESOURCE_GROUP \
--service $SPRING_CLOUD_NAME \
--domain-name $DOMAIN_NAME \
--certificate $CERT_NAME_IN_AZURE_SPRING_APPS \
--app $APPNAME
Membuat sumber daya jaringan
Azure Application Gateway yang akan dibuat akan bergabung dengan jaringan virtual yang sama seperti--atau jaringan virtual yang di-peering ke--contoh layanan Azure Spring Apps. Pertama-tama, buat subnet baru untuk Application Gateway di jaringan virtual menggunakan az network vnet subnet create
, dan juga buat alamat IP Publik sebagai Frontend Application Gateway menggunakan az network public-ip create
.
export APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
az network vnet subnet create \
--name $APPLICATION_GATEWAY_SUBNET_NAME \
--resource-group $RESOURCE_GROUP \
--vnet-name $VIRTUAL_NETWORK_NAME \
--address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--allocation-method Static \
--sku Standard
Membuat identitas terkelola untuk Application Gateway
Application Gateway akan harus dapat mengakses Key Vault untuk membaca sertifikat. Untuk melakukannya, ia akan menggunakan identitas terkelola yang ditetapkan pengguna. Buat identitas terkelola dengan menggunakan perintah berikut:
export APPGW_IDENTITY_NAME='name-for-appgw-managed-identity'
az identity create \
--resource-group $RESOURCE_GROUP \
--name $APPGW_IDENTITY_NAME
Kemudian ambil objectId untuk identitas terkelola karena akan digunakan nanti untuk memberikan hak untuk mengakses sertifikat di Key Vault:
export APPGW_IDENTITY_CLIENTID=$(az identity show \
--resource-group $RESOURCE_GROUP \
--name $APPGW_IDENTITY_NAME \
--query clientId \
--output tsv)
export APPGW_IDENTITY_OID=$(az ad sp show \
--id $APPGW_IDENTITY_CLIENTID \
--query objectId \
--output tsv)
Mengatur kebijakan pada Key Vault
Konfigurasikan Key Vault menggunakan perintah berikut sehingga identitas terkelola untuk Application Gateway diizinkan untuk mengakses sertifikat yang disimpan di Key Vault:
az keyvault set-policy \
--name $KV_NAME \
--resource-group $KV_RG \
--object-id $APPGW_IDENTITY_OID \
--secret-permissions get list \
--certificate-permissions get list
Membuat Application Gateway
Buat gateway aplikasi menggunakan az network application-gateway create
dan tentukan nama domain yang sepenuhnya memenuhi syarat (FQDN) pribadi aplikasi sebagai server di kumpulan backend. Pastikan untuk menggunakan identitas terkelola yang ditetapkan pengguna dan untuk mengarahkan ke sertifikat di Key Vault menggunakan ID Rahasia sertifikat. Kemudian, perbarui pengaturan HTTP menggunakan az network application-gateway http-settings update
untuk menggunakan nama host publik.
export APPGW_NAME='name-for-application-gateway'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
--name $CERT_NAME_IN_KEY_VAULT \
--vault-name $KV_NAME \
--query sid \
--output tsv)
az network application-gateway create \
--name $APPGW_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--capacity 2 \
--sku Standard_v2 \
--frontend-port 443 \
--http-settings-cookie-based-affinity Disabled \
--http-settings-port 443 \
--http-settings-protocol Https \
--public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--vnet-name $VIRTUAL_NETWORK_NAME \
--subnet $APPLICATION_GATEWAY_SUBNET_NAME \
--servers $SPRING_APP_PRIVATE_FQDN \
--key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
--identity $APPGW_IDENTITY_NAME
Diperlukan waktu hingga 30 menit bagi Azure untuk membuat gateway aplikasi.
Memperbarui Pengaturan HTTP untuk menggunakan nama domain ke backend
- Menggunakan sertifikat yang ditandatangani publik
- Menggunakan sertifikat yang ditandatangani sendiri
Perbarui pengaturan HTTP untuk menggunakan nama domain publik sebagai nama host alih-alih domain yang diakhiri dengan ".private.azuremicroservices.io" untuk mengirim lalu lintas ke Azure Spring Apps dengan.
az network application-gateway http-settings update \
--resource-group $RESOURCE_GROUP \
--gateway-name $APPGW_NAME \
--host-name-from-backend-pool false \
--host-name $DOMAIN_NAME \
--name appGatewayBackendHttpSettings
Periksa penyebaran Application Gateway
Setelah dibuat, periksa kesehatan backend dengan menggunakan perintah berikut. Output dari perintah ini memungkinkan Anda menentukan apakah application gateway mencapai aplikasi Anda melalui FQDN privatnya.
az network application-gateway show-backend-health \
--name $APPGW_NAME \
--resource-group $RESOURCE_GROUP
Output menunjukkan status sehat kumpulan backend, seperti yang ditunjukkan pada contoh berikut:
{
"backendAddressPools": [
{
"backendHttpSettingsCollection": [
{
"servers": [
{
"address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
"health": "Healthy",
"healthProbeLog": "Success. Received 200 status code",
"ipConfiguration": null
}
]
}
]
}
]
}
Mengonfigurasikan DNS dan mengakses aplikasi
Sekarang konfigurasikan DNS publik untuk menunjuk ke Application Gateway menggunakan CNAME atau A-record. Anda dapat menemukan alamat publik untuk Application Gateway dengan menggunakan perintah berikut:
az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--query [ipAddress] \
--output tsv
Anda sekarang dapat mengakses aplikasi menggunakan nama domain publik.