专栏首页华来四Azure混合云国内账号部署Azure私有云,该如何搞定App Service?

国内账号部署Azure私有云,该如何搞定App Service?

今天我们就来聊聊如何用中国区账号搞定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:\ClusterStorage\Volume1\Shares\SU1_ObjStore\CRP\PlatformImages\d8d72463-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

用AzureStack\AzureStackAdmin身份登录主机,并双击打开安装程序,然后在对话框上选择部署选项。

指定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 .\Connect\AzureStack.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,即可完成所需的配置。

本文分享自微信公众号 - 华来四Azure混合云(sysinternal),作者:盆盆

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Azure Stack测试Serverless(Azure Functions)

    生产环境里的Azure Stack,就不能仅仅将其看作是Hyper-V虚拟化平台、或者分布式存储、软件定义网络这样的产品。否则就暴殄天物。

    盆盆
  • 在Azure Stack上部署Kubernetes

    要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:

    盆盆
  • 在Azure Stack上部署Kubernetes

    Azure Stack是我们实现DevOps的重要利器,而要实现DevOps,离不开容器编排平台Kubernetes的支持。本文将介绍如何在Azure Sta...

    盆盆
  • 使用Azure云原生构建博客是怎样一种体验?(上篇)

    我的网站是在.NET Core 平台上使用 C#语言编写的开源博客系统,运行于微软智慧云 Azure 国际版上。

    Edi Wang
  • 为matplotlib设置不同的主题

    所谓主题,其实就是一套样式规则,对背景色,坐标轴,标题等图形基本元素的样式进行设定。R语言的ggplot2中,通过theme来指定图片主题,既可以采用系统自带的...

    生信修炼手册
  • SpringBoot之hello world!

    SpringBoot入门学习参考:https://www.cnblogs.com/ityouknow/p/5662753.html

    别先生
  • 常见数据库问答题

    Delete 命令用来删除表的全部或者一部分数据行,执行 delete 之后,用户需要提交(commmit)或者回滚(rollback) 事务来执行删除或者撤销...

    吾非同
  • 神秘的探索性测试?

    探索式测试(Exploratory Testing,简称ET)是一种自由的软件测试风格,强调测试人员同时展开测试学习、测试设计、测试执行和测试结果评估等活动,...

    吾非同
  • 软件测试(原书第二版)

    之前给新人推荐入门的软件测试书籍,我一般会推荐京东上排名靠前的《软件测试(第二版)》,但是之前我也只是简单的翻了一下,所以没有给更详细的建议。

    sylan215
  • Mac OSX 开发基础控件学习之 NSOutlineView

    在开发基于osx的Application的过程中,当我们需要显示一组列表结构的数据时,比较容易想到的控件是NSTableView;但如果你显示的数据有层级结构...

    代码行者

扫码关注云+社区

领取腾讯云代金券