Share via


在應用程式閘道使用 TLS 終止向網際網路公開應用程式

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但是您暫時還是會在某些位置看到舊的名稱,我們正在致力更新螢幕擷取畫面、影片和圖表等資產。

本文說明如何使用應用程式閘道向網際網路公開應用程式。

在您的虛擬網路 (VNET) 中部署 Azure Spring Apps 服務執行個體時,服務執行個體上的應用程式只能在私人網路中存取。 若要讓應用程式可在網際網路上存取,您需要與 Azure 應用程式閘道整合。 傳入的加密流量可以在應用程式閘道解密,也可以傳遞至加密的 Azure Spring Apps,以達到端對端 TLS/SSL。 針對開發和測試目的,您可以從應用程式閘道的 SSL 終止開始,本指南涵蓋此內容。 針對生產環境,我們建議使用具有私人憑證的端對端 TLS/SSL,如在虛擬網路中使用端對端 TLS 公開應用程式中所述。

必要條件

設定 Azure Spring Apps 的應用程式閘道

我們建議如瀏覽器所見,網域名稱與應用程式閘道用來將流量導向 Azure Spring Apps 後端的主機名稱相同。 使用應用程式閘道來公開裝載於 Azure Spring Apps 和位於虛擬網路中的應用程式時,這項建議提供最佳體驗。 如果由應用程式閘道公開的網域與 Azure Spring Apps 所接受的網域不同,則 Cookie 和產生的重新導向 URL (舉例來說) 可能會中斷。 如需詳細資訊,請參閱主機名稱保留

若要在私人 VNET 中的 Azure Spring Apps 前設定應用程式閘道,請使用下列步驟。

  1. 請遵循在虛擬網路中部署 Azure Spring Apps 中的指示。
  2. 請遵循在私人網路中存取您的應用程式中的指示。
  3. 取得您選擇的網域憑證,並將該憑證儲存在 Key Vault 中。 如需詳細資訊,請參閱教學課程:在 Azure Key Vault 中匯入憑證
  4. 在部署至 Azure Spring Apps 的應用程式上,從 Key Vault 設定自訂網域和對應憑證。 如需詳細資訊,請參閱教學課程:將現有的自訂網域對應至 Azure Spring Apps
  5. 根據下列清單,在設定的虛擬網路中部署應用程式閘道:
    • 在後端集區中使用 Azure Spring Apps,由尾碼為 private.azuremicroservices.io 的網域所參考。
    • 使用來自 Key Vault 的相同憑證來包含 HTTPS 接聽程式。
    • 使用在 Azure Spring Apps 上所設定自訂網域名稱的 HTTP 設定來設定虛擬網路,而不是使用以 private.azuremicroservices.io 作為尾碼的網域來設定虛擬網路。
  6. 將您的公用 DNS 設定為指向應用程式閘道。

定義變數

接下來,使用下列命令來定義您所建立資源群組和虛擬網路的變數,如同在虛擬網路中部署 Azure Spring Apps 中所指示。 根據您的實際環境,將 <...> 預留位置取代為實際值。 當您定義 SPRING_APP_PRIVATE_FQDN 時,請從 URI 中移除 https://

export SUBSCRIPTION='<subscription-id>'
export RESOURCE_GROUP='<resource-group-name>'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-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'

登入 Azure

使用下列命令登入 Azure CLI 並選擇作用中的訂用帳戶。

az login
az account set --subscription $SUBSCRIPTION

在 Azure Spring Apps 上設定公用網域名稱

流量會進入在 Azure Spring Apps 上使用公用網域名稱部署的應用程式。 若要將您的應用程式設定為透過 HTTP 接聽此主機名稱,請使用下列命令將自訂網域新增至您的應用程式,並用實際值取代 <...> 預留位置:

export KV_NAME='<name-of-key-vault>'
export KV_RG='<resource-group-name-of-key-vault>'
export CERT_NAME_IN_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
export DOMAIN_NAME=myapp.mydomain.com

az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --app $APPNAME

建立網路資源

要建立的應用程式閘道將會加入與 Azure Spring Apps 服務執行個體相同的虛擬網路。 首先,在虛擬網路中建立應用程式閘道的新子網路,然後建立公用 IP 位址作為應用程式閘道的前端,如下列範例所示。

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

為您的應用程式閘道建立受控識別

您的應用程式閘道必須能夠存取 Key Vault 來讀取憑證。 為了達成此目的,應用程式閘道會使用使用者指派的受控識別。 如需詳細資訊,請參閱什麼是 Azure 資源受控識別?使用下列命令建立受控識別,以取代 <...> 預留位置:

export APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
az identity create \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME

然後,使用下列命令來擷取受控識別的 objectId。 此值稍後將用於授與金鑰保存庫中存取憑證的權限。

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)

在 Key Vault 上設定原則

使用下列命令設定 Key Vault,以便允許應用程式閘道的受控識別存取儲存在 Key Vault 中的憑證:

az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $APPGW_IDENTITY_OID \
    --secret-permissions get list \
    --certificate-permissions get list

建立應用程式閘道

使用 az network application-gateway create 建立應用程式閘道,並將應用程式的私人完整網域名稱 (FQDN) 指定為後端集區中的伺服器。 請務必使用使用者指派的受控識別,並使用憑證的祕密識別碼指向 Key Vault 中的憑證。

export APPGW_NAME='<name-for-application-gateway>'
export CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KV \
    --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 80 \
    --http-settings-protocol Http \
    --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

Azure 建立應用程式閘道最多可能需要 30 分鐘。

更新 HTTP 設定,以使用指向後端的網域名稱

更新 HTTP 設定,以使用公用網域名稱作為主機名稱,而不是以 .private.azuremicroservices.io 作為尾碼的網域,將流量傳送至 Azure Spring Apps。

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

檢查應用程式閘道的部署

建立之後,請使用下列命令來檢查後端健康情況。 此命令的輸出可讓您判斷應用程式閘道是否透過其私人完整網域名稱 (FQDN) 到達您的應用程式。

az network application-gateway show-backend-health \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP

輸出會指出後端集區的健全狀態,如下列範例所示:

{
  "backendAddressPools": [
    {
      "backendHttpSettingsCollection": [
        {
          "servers": [
            {
              "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
              "health": "Healthy",
              "healthProbeLog": "Success. Received 200 status code",
              "ipConfiguration": null
            }
          ]
        }
      ]
    }
  ]
}

設定 DNS 並存取應用程式

使用 CNAME 或 A-record,將公用 DNS 設定為指向應用程式閘道。 您可以使用下列命令來尋找應用程式閘道的公用位址:

az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --query [ipAddress] \
    --output tsv

您現在可以使用公用網域名稱來存取應用程式。

清除資源

如果您打算繼續進行後續的文章,可以讓這些資源留在原處。 如果不再需要,請刪除資源群組,這會刪除資源群組中的資源。 若要使用 Azure CLI 刪除資源群組,請使用下列命令:

az group delete --name $RESOURCE_GROUP

下一步