AWS: 云上偵探手冊,七步排查ALB與EC2連接疑云

今天,咱們來聊一個對于許多剛接觸AWS的運維同學來說,既常見又有點頭疼的話題:如何優雅地排查和解決AWS上ALB(Application Load Balancer)暴露EC2服務時遇到的種種疑難雜癥。

最近,我剛幫一個朋友解決了類似的問題,他遇到的坑,我相信許多aws韻味朋友可能也踩過。結合他的案例和我的經驗,我整理出了一套清晰的故障定位思路和關鍵檢查點。希望這篇文章能成為大家云上運維工具箱里的一件利器。
在這里插入圖片描述

從宏觀到微觀:理解ALB的工作流

在深入細節之前,我們先來建立一個全局視野。當一個用戶通過互聯網訪問我們的服務時,請求的旅程是怎樣的?下圖清晰地展示了從用戶到EC2服務的完整路徑,以及我們接下來要討論的關鍵檢查點。

在這里插入圖片描述

這個流程圖就像一張地圖,當我們遇到“服務訪問不了”這類問題時,按圖索驥,逐一排查,就能快速定位問題所在。

故障排查實戰:七個關鍵檢查點

下面,我們來詳細拆解朋友總結的七個關鍵點,這也是一套行之有效的故障排查清單。

1. EC2安全組:為服務敞開對內的大門

很多新手或懶鬼會下意識地把EC2安全組的入站規則設置為對所有IP(0.0.0.0/0)開放,這雖然能讓服務跑起來,但存在巨大的安全隱患。

正確的做法是,EC2實例的安全組(Security Group)應該只允許來自ALB所在安全組的流量。這是一個最小權限原則的最佳實踐。

  • 如何配置:

    1. 找到我們的ALB,記下它的安全組ID(例如 sg-alb12345)。
    2. 進入我們的EC2實例的安全組配置頁面。
    3. 添加入站規則:
      • 類型/協議: 選擇我們的服務使用的協議和端口(例如,HTTP/80端口,或我們自定義的8080端口)。
      • 源: 選擇“自定義”,然后輸入ALB的安全組ID sg-alb12345
  • 常見錯誤: 源地址錯誤地配置為ALB的公網IP。請記住,ALB與EC2之間是通過私有IP通信的,并且ALB節點的IP可能會變化,因此引用安全組是最穩定可靠的方式。

2. ALB安全組:對外開放服務的窗口

與EC2安全組的“對內”不同,ALB的安全組需要“對外”,即允許來自最終用戶的訪問。

  • 如何配置:

    • 入站規則:
      • 類型/協議: 通常是HTTP(80端口)和/或HTTPS(443端口)。
      • 源: 一般設置為 0.0.0.0/0,表示允許來自任何互聯網用戶的訪問。如果我們的服務只對特定IP開放,可以在這里做限制。
    • 出站規則: 默認情況下,出站規則是允許所有流量,這通常不需要修改。
  • 實用建議: 將ALB的安全組和EC2的安全組分開管理,職責清晰,一個負責對外,一個負責對內,能有效降低配置錯誤的風險。

3. 健康檢查:ALB的“聽診器”

ALB通過健康檢查來判斷后端的EC2實例是否“活蹦亂跳”且能正常處理請求。如果健康檢查失敗,ALB會認為該實例“不健康”(Unhealthy),并停止向其轉發流量。

  • 關鍵配置項:

    • 協議(Protocol): 應與我們的目標組協議一致。
    • 端口(Port): 應該是我們EC2上服務真正在監聽的端口。
    • 路徑(Path): ALB會向這個路徑發送GET請求。我們需要確保這個URL能返回HTTP 200狀態碼。很多Web框架默認的 / 路徑可能包含復雜的業務邏輯或重定向,建議專門為健康檢查創建一個簡單的路徑,如 /health/ping,它只需直接返回一個200 OK即可。
    • 成功代碼(Success codes): 默認是200。如果我們的健康檢查接口返回其他成功碼(如200-299),需要在這里修改。
  • 排查技巧: 如果目標組中的實例持續處于unhealthy狀態,可以直接從一臺能訪問該EC2的機器上(比如同一VPC下的另一臺EC2),使用curl -v http://<EC2-私有IP>:<端口>/<健康檢查路徑>命令來模擬健康檢查,查看返回的狀態碼和內容是否符合預期。

4. 健康檢查的耐心:了解初始化時間

“為什么我的實例明明啟動了,卻一直是unhealthy?” 這是一個非常常見的問題。ALB將一個新注冊的實例判定為“健康”需要一個過程。

  • 相關配置:
    • 檢查間隔(Interval): 兩次健康檢查之間的間隔時間(默認30秒)。
    • 超時(Timeout): 每次檢查等待響應的最長時間(默認5秒)。
    • 健康閾值(Healthy threshold): 實例從不健康變為健康,需要連續成功的檢查次數(默認5次)。

計算一下:Interval * Healthy threshold = 30s * 5 = 150s。也就是說,在理想情況下,一個新實例至少需要2.5分鐘才能被標記為健康。如果中間有一次失敗,時間會更長。

  • 實用建議: 在服務部署或變更后,請保持耐心。先去喝杯咖啡,再回來看狀態。如果幾分鐘后依然不健康,再根據上一條的技巧進行排查。對于需要快速啟動的應用,可以適當調低這些參數,但要小心過于頻繁的檢查給應用帶來壓力。
5. 目標組協議:與后端服務的“暗號”

ALB的目標組(Target Group)定義了流量將如何被轉發到后端EC2。這里的協議和端口必須與我們EC2上實際運行的服務監聽的協議和端口完全匹配。

  • 常見場景:

    • 用戶通過HTTPS訪問ALB,ALB終止SSL,然后通過HTTP將請求轉發給后端EC2。這時,ALB監聽器是HTTPS:443,而目標組協議是HTTP:80(或8080等)。
    • 端到端加密,ALB和EC2之間也使用HTTPS。這時,目標組協議需要配置為HTTPS,并且EC2上需要配置好證書。
  • 錯誤案例: 后端服務監聽的是8080端口,但目標組里填寫的端口是80。后端服務監聽的是http端口,但目標組里填寫的協議是https。這種“暗號”對不上的情況,流量自然無法送達。

6. 證書與域名:HTTPS的“身份證”

如果我們使用HTTPS監聽器,ALB需要綁定一個SSL/TLS證書。這個證書必須與用戶訪問的域名完全匹配,否則瀏覽器會報“NET::ERR_CERT_COMMON_NAME_INVALID”之類的安全警告。

  • 最佳實踐:
    • 使用AWS Certificate Manager (ACM) 來免費申請和管理我們的SSL證書。
    • 確保證書覆蓋了我們的主域名(example.com)和需要的子域名(如 www.example.com)。使用通配符證書(*.example.com)可以簡化管理。
    • 當證書即將過期時,如果使用的是ACM管理的公有證書,ACM會自動續訂,非常省心。
7. 域名解析與Host頭:測試的捷徑

在服務部署的最后一步,我們需要將我們的域名通過DNS解析到ALB的DNS名稱上(通常是CNAME記錄)。

  • 快速測試技巧: DNS解析在全球生效需要一些時間。如果想立即測試,有兩種方法:

    1. 修改本地hosts文件: 在我們的電腦上,將ALB的IP地址和我們想要測試的域名綁定。
    2. 使用curl--resolveHost頭: 這是一種更優雅的方式,無需修改系統文件。我們可以直接指定域名與IP的解析關系,或者通過Host頭來模擬特定域名的訪問。
    # 使用Host頭,<ALB_DNS_NAME>是ALB的地址
    curl -H "Host: your-domain.com" http://<ALB_DNS_NAME>/path# 或者,如果知道ALB的某個IP
    curl --resolve "your-domain.com:80:123.45.67.89" http://your-domain.com/path
    

    這個技巧在排查基于域名的路由規則時尤其有用。

總結

排查ALB與EC2的通信問題,本質上是一個抽絲剝繭、由外及里的過程。從用戶DNS查詢開始,到ALB的監聽器和安全組,再到目標組的健康檢查和協議配置,最后落到EC2實例自身的安全組和應用服務。

記住這七個關鍵檢查點,下次再遇到“網站打不開”的緊急工單時,相信大家一定能更有條理,從容不迫地定位并解決問題。

希望這篇文章對大家有幫助!如果大家有其他問題或者獨到的經驗,歡迎在評論區分享交流!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90232.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EIDE 創建基于STM32-HD的項目快速創建流程

EIDE 創建基于STM32-HD的項目流程芯片系列定義宏Flash 大小RAM 大小STM32F10x_HD#define STM32F10X_HD256KB~512KB48KB~64KBSTM32F10x_MD#define STM32F10X_MD64KB~128KB20KBSTM32F10x_LD#define STM32F10X_LD16KB~32KB4KB~10KB 新建項目遠程倉庫獲取裸機開發程序STM(意法半導體…

使用 QLExpress 構建靈活可擴展的業務規則引擎

目錄 一、什么是 QLExpress&#xff1f; 二、推薦系統中的規則腳本應用 1 場景描述 2 推薦規則腳本&#xff08;QLExpress&#xff09; 3 系統實現 4 執行結果 5 推薦系統應用建議 三、風控系統中的規則判定 1 場景描述 2 風控規則腳本&#xff08;QLExpress&#xff…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-13,(知識點:DC-DC電源,相位裕度,增益裕度)

目錄 1、題目 2、解答 相位裕度 增益裕度 3、相關知識點 一、波特圖 二、相位裕度 三、增益裕度 四、在 DC - DC 電源中的應用 【硬件-筆試面試題】硬件/電子工程師&#xff0c;筆試面試題匯總版&#xff0c;持續更新學習&#xff0c;加油&#xff01;&#xff01;&a…

學生信息管理系統 - HTML實現增刪改查

學生信息管理系統 - HTML實現增刪改查 效果圖 代碼 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

Agile簡介

Agile&#xff08;敏捷&#xff09;是一種軟件開發方法論&#xff0c;核心是通過快速迭代、靈活響應變化&#xff0c;解決傳統軟件開發中周期長、需求變更困難等問題&#xff0c;最終高效交付符合用戶實際需求的產品。 一、Agile 的起源&#xff1a;為什么需要敏捷&#xff1f;…

關于 URL 中 “+“ 號變成空格的問題

當你在 URL 中傳遞參數時&#xff0c;加號 () 會被自動轉換為空格&#xff0c;這是 URL 編碼的標準行為。問題原因在 URL 中&#xff1a;空格會被編碼為 號當 URL 被解碼時&#xff0c; 號又會被轉換回空格這會導致原始數據中的 號丟失解決方案你需要對參數值進行正確的 URL …

綜合實驗(2)

文章目錄 目錄 文章目錄 前言 OSPF運行在GRE隧道概述 典型應用場景 OSPF over GRE 配置 總結 前言 OSPF運行在GRE隧道概述 GRE&#xff08;Generic Routing Encapsulation&#xff09;隧道是一種通過封裝原始數據包在IP網絡中創建虛擬點對點連接的隧道技術。OSPF&#xff08;…

【應急響應工具教程】司稽(Whoamifuck):純Shell打造的Linux應急響應利器

1、工具簡介司稽&#xff08;Whoamifuck或Chief-Inspector,簡稱"who"&#xff09;&#xff0c;永恒之鋒發布的第一款開源工具&#xff0c;這是一款由shell編寫的Linux應急響應腳本&#xff0c;能對基本的檢查項進行輸出和分析&#xff0c;并支持一些擴展的特色功能。…

新手操作steam搬磚項目,應該如何快速起步

大家好哦&#xff0c;我是阿陽&#xff0c;今天繼續給大家分享一些steam搬磚的知識。在我們操作過程中&#xff0c;問題問得最多的就是&#xff0c;新手應該怎么做&#xff1f;首先&#xff0c;那我們得先來了解-下,什么是steam搬磚,它的項目原理是什么&#xff0c;其次針對于這…

rt-thread加一個庫

背景 官方軟件包里沒有的 可以以庫或組件形式加入 本次僅為了驗證&#xff0c;加到庫 過程 下載源碼 假設為 lib_demo 自己的板子目錄為bsp/stm32 代碼目錄結構 bsp/stm32librarieslib_demo //新建文件夾src //把lib_demo里源碼文件放進來inc //把lib_demo里頭文件放進來SConsc…

c++深拷貝和淺拷貝

一、淺拷貝本質&#xff1a;簡單地復制對象的成員值。如果成員里有指針&#xff0c;新對象和原對象的指針會指向同一塊內存。比如你有對象 A&#xff0c;里面指針 p 指向堆內存 0x123&#xff1b;用 A 拷貝出對象 B&#xff0c;B 的指針 p 也指向 0x123。問題&#xff1a;若其中…

NineData新增SQL Server到MySQL復制鏈路,高效助力異構數據庫遷移

在實際的數據庫遷移工作中&#xff0c;異構庫之間的遷移常常被視為一項“高風險、高工作量、高復雜度”的挑戰任務。這不僅是一次數據庫切換&#xff0c;更是對系統穩定性、數據一致性、業務連續性和技術團隊耐力的全方位考驗。為解決企業在異構數據庫遷移中的痛點&#xff0c;…

字符串和對象的深拷貝和淺拷貝

字符串和對象的深拷貝和淺拷貝【一】基本介紹【1】淺拷貝【2】深拷貝【二】字符串的拷貝【1】字符串的 “淺拷貝”【2】字符串的 “深拷貝”【三】對象的拷貝【1】淺拷貝&#xff08;Shallow Copy&#xff09;【2】深拷貝&#xff08;Deep Copy&#xff09;【四】字符串和對象拷…

4.5 優化器中常見的梯度下降算法

梯度下降算法&#xff08;Gradient Descent&#xff09;的數學公式可以通過以下步驟嚴格表達&#xff1a;1. 基本梯度下降&#xff08;Batch Gradient Descent&#xff09; 目標&#xff1a;最小化損失函數L(θ)\mathcal{L}(\theta)L(θ)&#xff0c;其中 θ\thetaθ是模型參數…

AM1.5G AAA穩態太陽光模擬器特點

光譜匹配度AM1.5G AAA穩態太陽光模擬器的光譜分布嚴格匹配國際標準IEC 60904-9中的AM1.5G光譜&#xff08;波長范圍300-4000nm&#xff09;&#xff0c;確保與自然太陽光的偏差在25%以內&#xff08;AAA級標準&#xff09;。光譜匹配度通過精密濾光片和氙燈或LED組合光源實現&a…

OSPF開放式最短路徑優先

1OSPF簡介&#xff08;1&#xff09;OSPF英文全稱Open Shortest Path First (開放式最短路徑優先)&#xff08;2&#xff09;OSPF是IETF 開發的一種鏈路狀態路由協議&#xff0c;使用基于帶寬的度量值。&#xff08;3&#xff09;OSPF采用SPF算法計算路由&#xff0c;從算法上保…

Lua(模塊與包)

Lua 模塊的基本概念Lua 中的模塊是一個由函數、變量組成的代碼庫&#xff0c;通常保存在獨立的 .lua 文件中。模塊通過 return 語句導出其內容&#xff0c;供其他腳本調用。模塊化設計可以提高代碼復用性&#xff0c;便于管理。創建模塊模塊通常以 .lua 文件形式存在&#xff0…

1. boost::asio之socket的創建和連接

網絡編程基本流程 網絡編程的基本流程對于服務端是這樣的 服務端 1&#xff09;socket——創建socket對象。 2&#xff09;bind——綁定本機ipport。 3&#xff09;listen——監聽來電&#xff0c;若在監聽到來電&#xff0c;則建立起連接。 4&#xff09;accept——再創建一個…

WPF 控制動畫開關

記錄一種實現方式&#xff1a;第一步&#xff1a;首先定義一個靜態類&#xff0c;提供依賴屬性&#xff0c;進而方便在xaml中實現綁定&#xff1a;public static class AnimationBehavior{// 定義附加屬性public static readonly DependencyProperty IsAnimatingProperty Depen…

元素豎向的百分比設定是相對于父容器的高度嗎?

元素豎向的百分比設定是相對于父容器的高度嗎&#xff1f; 核心問題 在CSS中&#xff0c;當設置元素的豎向屬性&#xff08;如height、padding-top等&#xff09;為百分比值時&#xff0c;其計算基準是父容器的高度還是寬度&#xff1f; 權威結論height屬性 百分比值基于父容器…