本实践指导您如何搭建一套ENS边缘节点的基础设施环境。您将逐一了解如何在ENS节点新建VPC网络、虚拟交换机,如何创建计算实例,如何通过边缘负载均衡ELB进行流量分发及如何通过SNAT、EIP,实现流量的代理。云速搭CADT产品已同步上线本部署方案。如果您需要通过图形化方式快速部署环境,可点击https://bp.aliyun.com/detail/387进行一键部署使用。
前提条件
操作步骤
开通ENS服务
服务开通
进入阿里云边缘节点服务ENS首页,单击立即开通,填写您的信息并提交审核。您也可以联系您的客户经理进行开通。
售前配置
请您联系您的客户经理,对必要的资源及节点进行售前配置,避免对您后续流程造成阻碍。
RAM权限配置
阿里云账号拥有所有API的访问权限,建议您创建并使用RAM用户进行API访问或日常运维。
创建VPC网络、虚拟交换机
您可以根据网络规划,填写内网网段、交换机等配置,进行VPC和交换机的创建。
创建ENS计算实例
通过负载均衡实例进行流量分发
创建边缘负载均衡实例。
说明在您创建负载均衡实例时,请确保与创建的实例处于同一区域。
登录ENS控制台。
在左侧导航栏,单击
。在边缘负载均衡页面,单击创建实例。
确认信息无误后,单击确认订单。
您可在边缘负载均衡实例页面,查看创建的边缘负载均衡实例,确认边缘负载均衡实例处于运行中。
为边缘负载均衡实例配置后端服务器。
在边缘负载均衡页面,单击对应边缘负载均衡实例实例操作列下的添加后端服务器。
在默认服务器组页面,单击添加,确认信息无误后,单击下一步。
配置权重后,单击添加。
说明权重越高的ENS实例将被分配到更多的访问请求。
为边缘负载均衡实例绑定边缘弹性公网IP,详细配置请参见绑定弹性公网IP。
在边缘负载均衡页面,单击操作下的> 绑定公网IP。
在弹窗内选择您已创建的边缘弹性公网IP,确认信息无误后单击确定。如果您未创建边缘弹性公网IP,请参见创建和管理边缘弹性公网IP。
边缘负载均衡实例服务器地址出现对应公网IP,代表绑定边缘弹性公网IP成功。
为边缘负载均衡实例配置监听。详细参数请参见配置监听。
在边缘负载均衡页面,单击操作下的监听配置向导。
在监听页面单击添加监听。
在基本信息页面上配置信息,确认信息无误后单击下一步。
在健康检查页面,配置健康检查规则,配置完成后单击下一步。
确认完成页面确认信息无误后,单击创建。
验证公网可通过边缘负载均衡实例访问ENS实例。
Go环境准备,
更新系统包列表及安装Go。
# 对于基于 Debian/Ubuntu 的系统,更新包列表。其他发行版跳过 sudo apt-get update # 使用包管理器安装 # 对于基于 Debian/Ubuntu 的系统: sudo apt-get install golang # 对于基于 Red Hat/CentOS 的系统: sudo yum install golang
验证安装信息。
go version # 有以下类似输出 go version go1.18.3 linux/amd64
设置环境变量。
编辑
~/.profile
或~/.bashrc
文件,添加 Go 的路径到PATH
环境变量中。echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile source ~/.profile # 或 echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc source ~/.bashrc
创建工作目录。
为了让您更好地组织Go项目,建议创建一个工作目录。例如,创建一个
~/go
目录:mkdir -p ~/go/{bin,src,pkg} echo 'export GOPATH=~/go' >> ~/.profile echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.profile source ~/.profile # 或 echo 'export GOPATH=~/go' >> ~/.bashrc echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc source ~/.bashrc
在ENS实例上部署简单的Webserver服务,您可通过本地8080端口访问服务,并获得响应。
package main import ( "fmt" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello\n") } func main() { http.HandleFunc("/", helloHandler) fmt.Println("Starting server on :8080") if err := http.ListenAndServe(":8080", nil); err != nil { fmt.Println(err) } }
使用以下命令编译上述代码,并在后台运行。
go build -o webserver main.go nohup ./webserver &
本地访问8080端口,验证服务运转正常。
curl http://127.0.0.1:8080/
在ENS实例上部署nginx,并修改nginx配置。
以centos为例,安装并启动nginx。
sudo yum install epel-release sudo yum install nginx sudo systemctl start nginx
编辑nginx.conf,可将请求到不同服务的地址流量转发到不同的服务端口号。配置文件的位置通常在/etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。
根据先前的配置,边缘负载均衡ELB实例的监听端口为80,RS监听端口为80。
在nginx.conf中插入以下段,使得RS服务器监听来自ELB实例绑定的EIP地址且端口号为80的请求,并转发到本地8080端口。
server { listen 80; # 监听 80 端口 server_name your_domain_or_ip; # 替换为你的实际域名或 IP 地址 location / { proxy_pass http://127.0.0.1:8080; # 将请求转发到本地的 8080 端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
校验修改后的配置语法无误。
sudo nginx -t # 返回以下内容,代表语法校验正常 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
重启Nginx使更新后的配置生效。
sudo systemctl reload nginx
在公网,使用
curl
访问<EIP>:80
端口,验证访问畅通。
通过NAT网关帮助ENS实例访问互联网
创建NAT网关。详细参数请参见创建和管理边缘NAT网关实例。
在左侧导航栏,单击
。在NAT网关页面,单击创建NAT网关,在您创建边缘负载均衡实例相同节点创建NAT网关。
为NAT网关绑定边缘弹性公网IP,之后该EIP用于访问公网(对应SNAT规则),或是被公网访问(对应DNAT规则)。
为NAT网关绑定边缘弹性公网IP。
在操作列中单击绑定公网IP。
在弹窗内选择您已创建的边缘弹性公网IP,确认信息无误后单击确定。
说明在您绑定公网IP前,请确保您已创建好同节点下的边缘弹性公网IP。
为NAT网关设置SNAT。
在操作栏中单击设置SNAT。
在设置SNAT页面中根据您的需要进行配置,确认信息无误后单击确定。
验证访问公网可通。
使用dig命令验证:
说明请勿使用ping测试连通性,不进行额外配置的情况下ping公网可能会不通。这是因为:
ENS安全组具备默认的入方向的不同规则,当实例绑定安全组,且没有添加放行规则时,ping的回包会被拦截。
ENS的NAT当前没有ICMP协议的session保持功能。