一般来说,做个网站,并开放给全世界,有以下几种方式:
- 直接使用公网IP+端口号
- 买个域名,做解析,使用域名访问
- 套上 Cloudflare,让 Cloudflare去反向代理源站
- 用 Cloudflare Argo Tunnel,服务器有没有公网IP都无所谓了
- 其他CDN方案
最近在用 Azure,一直想利用一下他们的Front Door。简单的摸索了一下如何把Front Door、Load Balancer 和 vm三者结合起来使用。
创建一台 vm
不分配公网 IP 没关系,简单起见这里先只创建一个了
创建 LB
给 LB的类型设置为 Public,创建一个IP,可以选Microsoft网络也可以选公网,具体区别可以看 https://learn.microsoft.com/zh-cn/azure/virtual-network/ip-services/routing-preference-overview
添加 NIC,选择虚拟机的那个网卡
此负载均衡器会有一个公网IP地址,并且连接到了我们的vnet,只是我们还没有定义 NAT出入规则,所以还需要继续配置
打开LB的Inbound NAT rules,由于我们的backend其实只有一台vm,因此类型选择 azure 虚拟机就可以了
这个时候 ssh 就会发现能够连到vm啦,但是vm还上不了网
要添加出网规则机器才能上网,outbound rules中添加一个
Port allocation 选择 default就行
这个时候机器就可以上网了,体验了一把自己配置 SNAT的快感🤡
那就先跑个nginx 方便我们后续测试 http
sudo docker run -d -p 80:80 nginx:alpine curl localhost
之后时候你在这台机器外面 curl
还是不行的,因为还得继续加一条 inbound 80 规则和上面一样,这时在外面就可以访问啦!
创建 Front Door
Front door有三种,Classic、Standard、Premium
Classic即将在2027年3月退役
Classic 按照流量和路由规则、WAF等计费,Standard、Premium则是月费、流量和请求数量计费。
按照提示来就行,之后 Front Door会让我们配置
Domain
Domain 那里就选创建 Front Door的时候的那个域名
Backend pools
需要注意这里 https port也要写80
因为在我们的vm上只跑了80端口,所以只能都80。如果我们的应用是跑在其他端口的话,也要跟着更改
routing rules
要注意 forwarding protocol 选择 http only,原因同上
然后部署,等几分钟,就有啦
总结
- Azure Front Door Premium 可以用 Private Link 连接到内部负载均衡器。但是 Premium 月费要330美元,我可能确实用不起……
- 如果单机性能足够,那么给vm分配个公网IP,然后配置 Front Door写这个IP就行
- 如果单机性能不够,那么可以再加多台vm,然后用LB做负载均衡;也可以直接 Front Door 加 backend pool
- 走微软全球网络路由的性能应该不错
参考文档
- https://learn.microsoft.com/en-us/azure/frontdoor/front-door-faq
- https://learn.microsoft.com/zh-cn/azure/frontdoor/standard-premium/how-to-enable-private-link-internal-load-balancer