昨天博客的 IP 莫名其妙被墙了,今天折腾一波,终于把应用的 IP 给换了,记录一下踩坑经过。

背景

交代下部署环境:

  • Azure:博客主程序、数据库、对象存储
  • AliCloud:域名、域名解析
    被墙的是主程序的入站IP(Inbound address)。

思路与调研

想到解决思路有 2 个方案:

  1. 在阿里云搞个通外网的服务器,再搭个桥,把数据转发过去:需要服务器+公网流量+内网穿透开发。成本有点大,有点为了吃口醋,包了盘饺子的意思。先放一放……
  2. 换掉主程序的入站IP:没买 Azure 的技术支持,得自己调研换 IP 的方法。成本相对小点,先试这个方案。

找到官方文档介绍入站 IP 更新规则:MSDoc: Azure 应用服务中的入站和出站 IP 地址

不管横向扩展的实例数如何,每个应用只有一个入站 IP 地址。 执行以下操作之一时,入站 IP 地址可能会更改:

  1. 删除应用,然后在其他资源组中重新创建它(部署单元可能会更改)。
  2. 删除资源组和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。
  3. 删除现有基于 IP 的 TLS/SSL 绑定,例如在证书续订期间(请参阅续订证书)。

Spoiler alert:最后是通过方案 1 实现的。
现在想起来,是不是应该先研究一下证书绑定,可能更方便。虽然最后证书也是被重新绑过。

踩坑过程

1. 先留一手

最开始使用阿迪王的脚本一键部署的,直接把应用干掉还是有点担心。
先保留原有应用,手动新建一个应用,看连不连得上原本的数据库和对象存储。

选择“容器”方式部署,仓库路径保留默认的 https://index.docker.io 就行,镜像填 ediwang/moonglade,注意前后空格吼,这傻逼文本框不会自动 Trim 空格。
Container

应用创建完成后,把“环境变量” Copy 过来,再重启一下应用,就能跑通了。 环境变量配置

发现新建应用的入站IP跟原本应用是一样的,有点不好的预感😓

2. 单删应用

确认可以重新跑之后,就开始尝试删应用了。
一开始只单独删了应用,应用的计划(App Service Plan)没删。 发现 IP 还是没变。

3. 删应用+计划

接着把计划也一起删掉,不出所料,IP 还是没变。

4. 新建资源组+应用

再去复习了下官方文档:

  1. 删除应用,然后在其他资源组中重新创建它(部署单元可能会更改)。
  2. 删除资源组和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。

看来重点不是重建应用,而是换资源组——大概率这个IP是跟着资源组走的。
那就新建资源组、新建应用计划,再新建应用。

5. 还原配置+数据库防火墙配置

继续,把配置搬过来,访问,报数据库连接错误,怀疑是原资源组的防火墙问题。 数据库连接异常

去原本数据库的“网络”配置里,把新服务的 IP 加上,再重启应用。 数据库网络配置

6. ✅Done

回来了回来啦😆 博客主页

折腾一波下来,也顺便把应用跟持久化的资源组分开了,后面更新/魔改应用啥的,也可以更自由一些,挺好。