說明

常見的 Ingress 定義方法包含 Host 與 Path,而在某些情境 (下面案例並非最佳實踐) 也需要開放 WebAPI 給指定 IP 位置使用,若直接使用 Path 方式存取 WebSite 與 WebAPI,有可能會有需要修改既有程式路由。 若在 WebAPI 沒有良好設計前提下,臨時變更可能造成其他使用者不便。所以我們會透過 host 設定 +  WAF v2 Custom Rule,限制 WebAPI 存取。






前置作業

開始實作之前,你需要先建立 Azure Kubernetes Service 與 Application Gateway Ingress Controller,若您沒有現成的環境,可以先考慮透過 Application Gateway Ingress Controller 建立實驗環境。

另外,因為我們的範例為 www.duranhsieh.com 存取 A 網站服務、test.duranhsieh.com, 存取 B 網站服務,所以您必須先行設定 A record 與 CName 至 Application Gateway。





建立自訂 WAF 規則

在 Azure 上搜尋 WAF Policy (或 Web 應用程式防火牆原則),點選建立




輸入基本資料 (請參考下圖)
註:請注意位置與資源群組,可能會影響到關聯的 Application Gateway




選擇 受控規則,請選擇與您 Application Gateway 一致的原則






原則設定如下圖所示



點選 新增自訂規則





接下來要設定兩個規則,一個是允許特定 IP 存取 Azure  Kubernetes Service 內服務。另一個為禁止特定 IP 以外的存取。首先我們先打名字與允許順序





第一個條件
比對類型: 字串
比對變數: RequestHeaders
標頭名稱: host 
運算: 是
運算子: 包含
轉換: 小寫
比對值: www.duranhsieh.com (您要允許的 host)



第二個條件
比對類型: IP 位置
運算: 包含
運算子: 包含
IP位置與範圍:  您要允許的 IP 位置




最下方: 則為允許流量,點選更新




接下來設定第二個規則,輸入名稱與優先順序 (記得要在上一條允許規則之後)




比對類型: IP
運算選擇: 不包含
IP位置或範圍: 輸入你要可以存取的 IP 位置




第二個條件
比對類型: 字串
比對變數: RequestHeaders
標頭名稱: host 
運算: 是
運算子: 包含
轉換: 小寫
比對值: www.duranhsieh.com (您要允許的 host)




最後選擇拒絕流量,完成了自訂規則設定




點選新增關聯 > 應用程式閘道 > 選擇您要關聯的應用程式閘道,勾選與目前不同也要套用







標籤,點選下一步




檢閱確定沒問題後,點選建立,完成原則設定






Ingress YAML

開啟 Azure Portal > Cloud Shell 輸入 code aspnetapp.yaml,輸入下列 ingress 設定


完成後存檔,輸入 kubectl apply -f aspnetapp.yaml





實際測試

在外部隨意一台電腦,則無法存取 www.duranhsieh.com;而在特定 IP 的電腦,則可以瀏覽。







參考資料

1. Application Gateway Ingress Controller