本實踐指導您如何搭建一套ENS邊緣節點的基礎設施環境。您將逐一瞭解如何在ENS節點建立VPC網路、虛擬交換器,如何建立計算執行個體,如何通過邊緣負載平衡ELB進行流量分發及如何通過SNAT、EIP,實現流量的代理。雲速搭CADT產品已同步上線本部署方案。如果您需要通過圖形化方式快速部署環境,可點擊https://bp.aliyun.com/detail/387進行一鍵部署使用。
前提條件
請確保您的阿里雲賬戶已完成實名認證。您可以登入阿里雲控制台,前往帳號中心查看是否已完成實名認證。
操作步驟
開通ENS服務
服務開通
進入阿里雲邊緣節點服務ENS首頁,單擊立即開通,填寫您的資訊並提交審核。您也可以聯絡您的客戶經理進行開通。
售前配置
請您聯絡您的客戶經理,對必要的資源及節點進行售前配置,避免對您後續流程造成阻礙。
RAM許可權配置
阿里雲帳號擁有所有API的存取權限,建議您建立並使用RAM使用者進行API訪問或日常營運。
建立VPC網路、虛擬交換器
您可以根據網路規劃,填寫內網網段、交換器等配置,進行VPC和交換器的建立。
建立ENS計算執行個體
通過Server Load Balancer執行個體進行流量分發
建立邊緣Server Load Balancer執行個體。
說明在您建立Server Load Balancer執行個體時,請確保與建立的執行個體處於同一地區。
登入ENS控制台。
在左側導覽列,單擊
。在邊緣負載平衡頁面,單擊建立執行個體。
確認資訊無誤後,單擊確認訂單。
您可在邊緣Server Load Balancer執行個體頁面,查看建立的邊緣Server Load Balancer執行個體,確認邊緣Server Load Balancer執行個體處於運行中。
為邊緣Server Load Balancer執行個體配置後端伺服器。
在邊緣負載平衡頁面,單擊對應邊緣Server Load Balancer執行個體執行個體操作列下的添加後端伺服器。
在預設伺服器組頁面,單擊添加,確認資訊無誤後,單擊下一步。
配置權重後,單擊添加。
說明權重越高的ENS執行個體將被分配到更多的訪問請求。
為邊緣Server Load Balancer執行個體綁定邊緣Elastic IP Address,詳細配置請參見綁定Elastic IP Address。
在邊緣負載平衡頁面,單擊操作下的> 綁定公網IP。
在彈窗內選擇您已建立的邊緣Elastic IP Address,確認資訊無誤後單擊確定。如果您未建立邊緣Elastic IP Address,請參見建立和管理邊緣Elastic IP Address。
邊緣Server Load Balancer執行個體伺服器位址出現對應公網IP,代表綁定邊緣Elastic IP Address成功。
為邊緣Server Load Balancer執行個體配置監聽。詳細參數請參見配置監聽。
在邊緣負載平衡頁面,單擊操作下的監聽設定精靈。
在監聽頁面單擊添加監聽。
在基本資料頁面上配置資訊,確認資訊無誤後單擊下一步。
在健全狀態檢查頁面,配置健全狀態檢查規則,配置完成後單擊下一步。
確認完成頁面確認資訊無誤後,單擊建立。
驗證公網可通過邊緣Server Load Balancer執行個體訪問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 Gateway協助ENS執行個體訪問互連網
建立NAT Gateway。詳細參數請參見建立和管理邊緣NAT Gateway執行個體。
在左側導覽列,單擊
。在NAT Gateway頁面,單擊建立NAT Gateway,在您建立邊緣Server Load Balancer執行個體相同節點建立NAT Gateway。
為NAT Gateway綁定邊緣Elastic IP Address,之後該EIP用於訪問公網(對應SNAT規則),或是被公網訪問(對應DNAT規則)。
為NAT Gateway綁定邊緣Elastic IP Address。
在操作列中單擊綁定公網IP。
在彈窗內選擇您已建立的邊緣Elastic IP Address,確認資訊無誤後單擊確定。
說明在您綁定公網IP前,請確保您已建立好同節點下的邊緣Elastic IP Address。
為NAT Gateway設定SNAT。
在操作欄中單擊設定SNAT。
在設定SNAT頁面中根據您的需要進行配置,確認資訊無誤後單擊確定。
驗證訪問公網可通。
使用dig命令驗證:
說明請勿使用ping測試連通性,不進行額外配置的情況下ping公網可能會不通。這是因為:
ENS安全性群組具備預設的入方向的不同規則,當執行個體綁定安全性群組,且沒有添加允許存取規則時,ping的回包會被攔截。
ENS的NAT當前沒有ICMP協議的session保持功能。