今天我们就来聊聊如何用中国区账号搞定App Service这个PaaS的部署!
可能您会说,前段时间不是已经写过一篇类似的文章了吗?(参考这里Azure Stack App Service部署测试),由于那篇文章介绍的是TP3 Refresh,而正式版略有些不同,二来有读者反馈希望能写得更加详细一些,所以借着这次正式版发布,再写篇长文章。
在介绍之前,我们先来看看现在的App Service的功能改进:
- ADFS模式部署的Azure Stack,也可以部署Azure Function,也可以配置SSO
- App Service的Worker Tier支持虚拟机扩展集,这样服务管理员可以利用其横向扩展的能力,如附图所示。
- WebApp/Mobile/API支持Java,如附图所示。
部署前准备工作
首先必须部署SQL资源提供程序(简称SQL RP),请参考以下步骤(本文不再赘述):
https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-sql-resource-provider-deploy
必须注意的是,正式版POC,部署SQL资源提供程序时,默认不再部署SQL实例,所以我们需要自己部署一个SQL实例。可以使用以下Azure Stack的ARM模板部署一台新的虚拟机,但是盆盆个人推荐直接部署在SQL RP这台虚拟机(虚拟机名称默认是SQLVM)上,以便节省一台虚拟机。
https://github.com/Azure/AzureStack-QuickStart-Templates/tree/master/sql-2014-standalone
如果您选择手动部署SQL实例,不妨设置SQL的SA账号密码,还可以把本地管理员(例如sqlrpadmin)设置为SQL管理员。
同时还需要确保Azure Stack默认Windows Server 2016镜像已经安装了KB4025339(对应的msu文件约1GB大小),App Service需要这个补丁,否则App Service的整个部署时间可能长达3-4小时(感谢Larry提醒)!可以到微软官网搜索下载这个补丁,并且用以下方法把补丁离线导入到Windows Server 2016的VHD虚拟硬盘里。
首先确保我们已经导入默认的Windows erver 2016镜像,具体步骤可以参考以下文档:
https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-add-default-image
然后进入到以下目录,双击以下的“Server2016DatacenterFullEval.vhd”文件,这就是Windows Server 2016默认镜像。假设将该VHD文件挂载到H盘符。
"C:ClusterStorageVolume1SharesSU1_ObjStoreCRPPlatformImagesd8d72463-412f-4419-a321-d69e3116f3ac"
然后用管理员权限运行命令行窗口,执行以下命令:
Dism /image:H: /add-package /PackagePath:"PathofKB4025339"
命令执行完成后,确保右键单击挂载的H盘符,选择弹出,以退出挂载状态。
生成证书
首先到以下地址下载App Service的部署帮助脚本
http://aka.ms/appsvconmasrc1helper
解压缩后,执行其下的Create-AppServiceCerts.ps1。按照屏幕提示指定PFX证书的私钥保护密码、域名和证书服务器地址。所得证书保存在该脚本所在的目录。
执行App Service安装程序
首先到以下地址下载App Service安装程序:
http://aka.ms/appsvconmasrc1installer
用AzureStackAzureStackAdmin身份登录主机,并双击打开安装程序,然后在对话框上选择部署选项。
指定Azure Stack的管理员和租户的ARM端点,并指定Azure AD的租户名称。安装程序会自动获取这些信息,一般情况下无需修改。
在以下对话框上点击Connect。
会弹出Azure AD账号验证对话框,在此输入Azure Stack部署时的Azure中国区账号和密码。
Azure AD账号验证通过以后,选择所需的Azure Stack管理员订阅名称(默认是Default Provder Subscription),以及数据中心位置(默认是Local)。
然后指定App Service资源管理程序的资源组名称、保存安装脚本和文件的存储账号名称、以及SQL服务器的名称(SQL虚拟机的Public IP对应的域名)、SQL管理员账号和密码。
接下来指定先前所创建的三个证书,以及对应的PFX证书私钥的保护密码。证书名称可以参考附图。
然后指定App Service各个角色服务器的大小和实例数。如果服务器资源足够(不低于128GB),可以选择多个Shared Worker Role。
指定App Service的Windows操作系统镜像,此处建议镜像里已经安装了KB4025339。
指定各个角色的管理员名称和密码。
查看先前所作的选项,并勾选左下方的复选框。
然后安装程序会自动在Azure Stack里创建Blob存储,下载所需的文件、模板和脚本,并上传到Blob存储中,部署App Service资源提供程序(RP),注册DNS、注册App Service RP、注册应用市场项目。在盆盆的环境里,约需要1.5小时。
接下来在Azure Stack的管理员门户上,进入App Service的资源组(默认是AppService_Local),远程桌面登录到CN0-VM,打开桌面上的Web Cloud Management Console。点击左侧的Web Cloud、Managed Servers,可以看到中间详细窗格里的Web Worker的状态是修复中。
等到至少有一台Web Worker的状态为Ready,就可以开始配置SSO了。
配置SSO
在先前下载的脚本里,编辑CreateIdentityApp.ps1这个脚本,将其中的“$AzureStackGraphEnvironment”配置为“AzureChinaCloud”。
确保已经安装Azure Stack的PowerShell环境,可以参考以下文档:
https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-powershell-install
并且已经下载好Azure Stack Tools:
https://docs.microsoft.com/en-us/azure/azure-stack/azure-stack-powershell-download
打开PowerShell命令行窗口,进入到Azure Stack Tools所在的目录,然后执行以下命令(YourDomainName请用您自己的Azure中国区域名替换)
Import-Module .ConnectAzureStack.Connect.psm1 Add-AzureRMEnvironment -Name "AzureStackAdmin" -ArmEndpoint https://adminmanagement.local.azurestack.external $TenantID = Get-AzsDirectoryTenantId -AADTenantName "YourDomainName.partner.onmschina.cn" -EnvironmentName AzureStackAdmin Login-AzureRmAccount -EnvironmentName "AzureStackAdmin" -TenantId $TenantID
然后进入到App Service脚本所在的目录,执行CreateIdentityApp.ps1这个脚本。会提示我们输入Azure中国区的租户名称,并验证Azure AD账号。
接下来指定SSO证书的路径、PFX证书的私钥保护密码、租户ARM端点和Azure Stack域名。
遗憾的是这个脚本在Azure中国区创建了名为"App Service"的服务主体后,会出现报错,应该是无法用Get-AzureRmRoleAssignment这个命令获取该服务主体的RBAC权限(错误信息显示对应脚本的第168行)。
打开CreateIdentityApp.ps1这个脚本,进入到第168行,发现该行命令主要用来获取该服务主体的RBAC权限信息,并用New-AzureRmRoleAssignment这个命令来设置其RBAC权限。可能是由于中国区Azure不支持该PowerShell命令,所以报错。由于我们可以在Azure中国区手动执行这些操作,所以完全可以删掉168-171这段脚本,并保存为新的脚本。
进入Azure中国区的新门户,进入更多服务、订阅、访问控制标识和访问管理。然后选择添加。指定角色为“参与者”,指定服务主体名称为“App Service”,确保该服务主体的App ID和脚本显示的一样。
接下来需要设置该Azure AD服务主体的密钥,这只能在Azure中国的传统门户里执行。可以进入Azure Active Directory,进入“应用程序”,确保显示“我公司拥有的应用程序”,定位到该服务主体的“配置”页面,确保其客户端ID和脚本所显示的一致。在“密钥”部分,指定2年,然后单击底部的保存。
记下所显示的服务主体密钥。
然后重新执行修改后的CreateIdentityApp.ps1脚本,即可生成一个新的脚本UpdateConfigOnController.ps1。这里必须进行修改。请确保将其下的OpenIdConfigurationUrl从"login.microsoftonline.com"改为"login.partner.microsoftonline.cn",如附图所示。
将该脚本UpdateConfigOnController.ps1,和先前生成的SSO证书,复制粘贴到cn01-vm中。打开桌面上的Web Cloud Management Console。在Configuration、Settings部分指定ApplicationClientSecret是先前我们所生成的服务主体密钥。
最后别忘记在Web Cloud Management Console的Web Cloud、Managed Servers,选择修复Managed Server和FrontEnd Server,等状态都显示为Ready,即可完成所需的配置。