在Azure上部署IPv6的App通过IOS App Store审核
随着中国企业出海Go Global,越来越多的用户开始在Global Azure部署自己的应用。由于对Global Azure功能和文档的不熟悉,使用过程中或多或少遇到了一些坑。事实上呢,这些并不是坑的坑是完全可以解决。这篇博客就是一个真实的客户案例。
客户需求
客户需要在Azure海外region部署自行研发的app后端服务器,这之后客户会向IOS App Store提交App的审核
目前问题
客户在Azure上部署了虚机但是没法分配ipv6的地址,客户还尝试配置IPv6隧道但是也不work。
背景分析
自2016年6月开始,所有提交给Apple App Store的app都必须支持IPv6-only的networking。需要注意的是,这个要求是面向App客户端代码的(https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1)而并不是说app的后端服务器必须有IPv6的地址,注意留心以下的截图。
上述Apple文档的链接里也给出了常见的App编程上的错误导致IPv6审核被reject以及相应的best practise,比如避免在源代码和配置文件里hardcode了IP地址,避免使用了只支持IPv4的API和库等等。这里,建议开发同学在开发初期读一下整篇文档并在测试阶段按文档章节“Test for IPv6 DNS64/NAT64 Compatibility Regularly”进行测试。
在本案中,由于APP提交审核的阶段项目已经结尾没有时间也没有人力来重新改动调试代码。全部的压力就都到了负责部署的运维团队。好在Azure Global其实已经支持部署IPv6的应用,本文会step by step的讲解在Azure中如何部署基于Windows+IIS的IPv6网站以及基于RHEL+Nginx的IPv6网站
Azure中的IPv6架构
我们先看一下在Azure中一个IPv6网站的架构图:
客户端可与public facing 的 Azure Load Balacner公共 IPv4 或 公共 IPv6 地址通信。 Load Balancer则将 IPv6 数据包路由到 VM 的私有 IPv6 地址。
这里需要着重指出的是,LB的IPv6是公有地址,也就是可以用在你的网站的域名管理里的A Record. 而虚机的IPv6则是私有地址,客户端不能通过虚机的这个地址来访问网站及虚机。由此,服务器端的安全性得到了很好的保障。
在Azure上部署
目前Azure的网站上对这个架构服务器提供了三种部署方法,Powershell,Azure CLI 以及ARM模板。对于Portal则列出了由于“无法在 Azure 门户中添加 IPv6 负载均衡规则”而无法支持的限制。然而实测发现Portal上目前已经支持部署这样一套架构了。这里考虑到快速部署的需求采用了ARM模板的方式。同时在上述架构中我们还添加了跳板机,用于在虚机中的配置工作。
Windows+IIS
ARM模板文件可以从以下Link下载:https://ipv6.blob.core.chinacloudapi.cn/template 文件名:windowsipv6.json
这里我们采用了Windows 2012 R2 Datacenter的image,大家可以根据需要改动以下的代码
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2012-R2-Datacenter",
"version": "latest"
},
模板的部署也有Portal,Powershell和CLI三种方式。这里Demo了Azure Portal 的Templates 功能
1. 上传模板
点击“Add”选项,在“Add general information”处填写模板的名字,在“Add template”处把上文模板的内容复制黏贴进去。随后,点击“OK”保存模板。
2. 按模板部署系统
接下来开始部署系统,选定上一步保存的模板,点击“Deploy”选项
填写所需的参数并点击“Purchase”选项
3. 部署成功之后记得远程RDP后端的虚机开启IIS功能,具体步骤可以参照http://jingyan.baidu.com/article/b24f6c82c504d686bfe5da3d.html。
因为我们模板里做了Port在50001和50002的NAT规则,RDP的时候记得要采用相应的Port
4. 部署成功后,可以在任何的浏览器里键入IPv4的DNS或IPv4ip来验证网站的IPv4的connectivity。
但是对于IPv6的验证,只有浏览器的网络环境支持IPv6才可以通过键入IPv6的DNS或者[IPv6ip]进行验证。如果网络环境不支持,可以通过http://ipv6-test.com/validate.php进行IPv6验证
可以看到以上的网站http://bw6.southeastasia.cloudapp.azure.com/ 以及IPv6地址2603:1040:3d4通过了下图的IPv6网站测试。
RHEL+NGINX
ARM模板文件可以从以下Link下载:https://ipv6.blob.core.chinacloudapi.cn/template 文件名:rhelipv6.json (这里我们采用了RHEL6.8的OS Image)
整个的模板部署过程和上文windows+iis是一样的。这里重点讲一下部署之后虚机内部的配置。
1. SSH连入虚机,同样因为我们模板里做了Port在50001和50002的NAT规则,SSH的时候记得要采用相应的Port
2. 部署Nginx,顺序运行以下命令
- sudo vi /etc/yum.repos.d/nginx.repo (若部署其他的linux系统,请参照https://www.nginx.com/resources/admin-guide/installing-nginx-open-source/ 决定以下文本内容)
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/rhel/6/$basearch/
gpgcheck=0
enabled=1
- sudo yum install epel-release
- sudo yum install nginx
- sudo ifdown eth0 && sudo ifup eth0
sudo vi /etc/sysconfig/network
NETWORKING_IPV6=yes
- sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 (在文件中加入以下内容)
IPV6INIT=yes
DHCPV6C=yes
sudo vi /etc/nginx/conf.d/default.conf (确保以下内容加入在default.conf中)
listen [::]:80;
listen 80;
- sudo service niginx start
sudo ip6tables -I INPUT -p tcp --dport 80 -j ACCEPT
- sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
- sudo service network restart
3. 按windows章节IPv6网站验证方法开始验证
http://blog4rh.southcentralus.cloudapp.azure.com/ ,IPv6 2a01:111:f100:4001::4625:a037 确认·可以连接。
改进
在以上的部署过程中,不管是Linux还是Windows都涉及到了post-deployment的配置,比如配置IIS,Nginx,配置DHCP等等的工作。我们可以把这部分工作作为虚机extension资源放入ARM模板从而达到全自动化快速部署的需求
提示
RHEL6.8+NGINX是需要最多额外配置的IPv6组合, 我们还测试了windows+nginx,ubuntu16+nginx等组合都能顺利部署成功IPv6的网站,具体部署可以参考https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-ipv6-for-linux。比较有趣的是,在不同nginx版本测试的过程中,我们发现个别Nginx的版本对IPv6支持上存在bug,大家需要留意这点
在Azure上部署IPv6的App通过IOS App Store审核的更多相关文章
- 在 Windows Azure 上部署预配置 Oracle VM
Microsoft 和 Oracle 近期宣布建立战略合作伙伴关系,基于此,我们将通过 Windows Azure 镜像库推出多种常用的 Oracle 软件配置.即日起,客户可以在 Windows S ...
- Azure上部署FTP服务
FTP是个比较复杂的协议,其协议分为控制层和数据层,工作模式分为主动和被动两种模式. 在默认的Active模式下其工作原理如下: 可以看到,客户端发起FTP的请求道服务器端,FTP的端口是21.用户在 ...
- Azure上部署Barracuda WAF集群 --- 2
前面一篇文章讲了如何在Azure上部署Barracuda.这篇文章聊一聊如何配置Barracuda. License 向Barracuda的销售人员申请WAF的License.得到License后打开 ...
- 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native
[源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...
- 在 Azure 上部署 Asp.NET Core Web App
在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...
- [文章存档]Azure上部署的java app在向第三方服务传送中文时出现乱码
https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-java ...
- 【翻译】使用Visual Studio在Azure上部署Asp.Net Core Web应用
配置运行环境 Install the latest Azure SDK for Visual Studio. The SDK installs Visual Studio if you don't a ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(一)
(一)前言 本文主要介绍了实践部署AzurePack的Website Cloud的过程.在部署之前, 首先要对AzurePack有个基本的了解. Azure Pack是微软的私有云方案,具有弹性. ...
- 在 Windows Azure 上部署并定制化 FreeBSD 虚拟机镜像
发布于 2014-12-11 作者 陈阳 FreeBSD 基础镜像现已登陆中国的 VM Depot! 对于青睐 BSD 而非 Linux 的开源爱好者来说,这无疑是个好消息.同时,随着该基础镜像 ...
随机推荐
- 某互联网后台自动化组合测试框架RobotFramework+Python+Sikuli
一.RobotFramework 1.工具介绍: Robotframework在测试中作为组织测试用例和BDD关键字的平台,主要使用RIDE进行管理,它不是一个工具,而仅仅是一个框架,使用Python ...
- socket.io 入门篇(三)
本文原文地址:https://www.limitcode.com/detail/5926e3a056fba70278bf2044.html 前言 上篇我们介绍了 socket.io 中room的概念和 ...
- 小程序web-view组件
不久前微信小程序发布了web-view组件,这个消息在各个圈里引起不小的涟漪.近期正好在做小程序的项目,便研究了一下这个让大家充满期待的组件. 1,web-view这个组件是什么鬼? 官网的介绍: ...
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
- 安卓自定义控件(三)实现自定义View
前面两篇博客,把View绘制的方法说了一下,但是,我们只在onDraw里面做文章,控件都是直接传入一个Context,还不能在布局文件里使用自定义View.这一篇博客,就不再讲绘制,在我们原先的基础上 ...
- 【原创】通过搬瓦工vps搭建SS环境,供学习用
博主前段时间处于某些不可告人的目的,但又限于各类科学工具被禁的窘境,用搬瓦工的vps搭建了次SS环境,现在就来回顾并不知廉耻的传授下经验. 第一步:购买vps 1.登录官网 https://bwh1. ...
- 腾讯 AI Lab 计算机视觉中心人脸 & OCR团队近期成果介绍(3)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:周景超 在上一期中介绍了我们团队部分已公开的国际领先的研究成果,近期我们有些新的成果和大家进一步分享. 1 人脸进展 人脸是最重要的视觉 ...
- js实现谷歌网站统计
基本方法 function ga() { if (window.ga) { window.ga.apply(null, arguments); } else { stack.push(argument ...
- OpenCASCADE 参数曲线曲面面积
OpenCASCADE 参数曲线曲面面积 eryar@163.com Abstract. 本文介绍了参数曲面的第一基本公式,并应用曲面的第一基本公式,结合OpenCASCADE中计算多重积分的类,对任 ...
- ThinkPHP 5 中AJAX跨域请求头设置方法
最近用thinkphp做项目,在测试环境时,存在接口的测试问题.在tp官网也没能找到相关的解决方法.自已看了一下源码,有如下的解决方案. 在项目目录下面,创建common/behavior/CronR ...