昨天博客的 IP 莫名其妙被墙了,今天折腾一波,终于把应用的 IP 给换了,记录一下踩坑经过。
背景
交代下部署环境:
Azure
:博客主程序、数据库、对象存储AliCloud
:域名、域名解析
被墙的是主程序的入站IP(Inbound address)。
思路与调研
想到解决思路有 2 个方案:
- 在阿里云搞个通外网的服务器,再搭个桥,把数据转发过去:需要服务器+公网流量+内网穿透开发。成本有点大,有点为了吃口醋,包了盘饺子的意思。先放一放……
- 换掉主程序的入站IP:没买 Azure 的技术支持,得自己调研换 IP 的方法。成本相对小点,先试这个方案。
找到官方文档介绍入站 IP 更新规则:MSDoc: Azure 应用服务中的入站和出站 IP 地址
不管横向扩展的实例数如何,每个应用只有一个入站 IP 地址。 执行以下操作之一时,入站 IP 地址可能会更改:
- 删除应用,然后在其他资源组中重新创建它(部署单元可能会更改)。
- 删除资源组和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。
- 删除现有基于 IP 的 TLS/SSL 绑定,例如在证书续订期间(请参阅续订证书)。
Spoiler alert:最后是通过方案 1 实现的。
现在想起来,是不是应该先研究一下证书绑定,可能更方便。虽然最后证书也是被重新绑过。
踩坑过程
1. 先留一手
最开始使用阿迪王的脚本一键部署
的,直接把应用干掉还是有点担心。
先保留原有应用,手动新建一个应用,看连不连得上原本的数据库和对象存储。
选择“容器”方式部署,仓库路径保留默认的 https://index.docker.io
就行,镜像填 ediwang/moonglade
,注意前后空格吼,这傻逼文本框不会自动 Trim 空格。
应用创建完成后,把“环境变量” Copy 过来,再重启一下应用,就能跑通了。
发现新建应用的入站IP跟原本应用是一样的,有点不好的预感😓
2. 单删应用
确认可以重新跑之后,就开始尝试删应用了。
一开始只单独删了应用,应用的计划(App Service Plan)没删。
发现 IP 还是没变。
3. 删应用+计划
接着把计划也一起删掉,不出所料,IP 还是没变。
4. 新建资源组+应用
再去复习了下官方文档:
- 删除应用,然后在
其他资源组
中重新创建它(部署单元可能会更改)。 删除资源组
和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。
看来重点不是重建应用,而是换资源组——大概率这个IP是跟着资源组走的。
那就新建资源组、新建应用计划,再新建应用。
5. 还原配置+数据库防火墙配置
继续,把配置搬过来,访问,报数据库连接错误,怀疑是原资源组的防火墙问题。
去原本数据库的“网络”配置里,把新服务的 IP 加上,再重启应用。
6. ✅Done
回来了回来啦😆
折腾一波下来,也顺便把应用跟持久化的资源组分开了,后面更新/魔改应用啥的,也可以更自由一些,挺好。
Comments