適用於容器的應用程式閘道工作階段親和性概觀
工作階段親和性 (也稱為「工作階段持續性」或「黏性工作階段」) 是一種在負載平衡中使用的技術,可確保用戶端要求一律傳送到相同的伺服器。 對於將使用者資料儲存在工作階段變數或特定伺服器本機快取的應用程式 (通常稱為具狀態應用程式) 而言,這一點很重要。
使用工作階段親和性,適用於容器的應用程式閘道會在第一個回應的 Set-Cookie 標頭中呈現 Cookie。 如果用戶端在未來的要求中呈現 Cookie,適用於容器的應用程式閘道就會辨識 Cookie,並將流量轉送至相同的後端目標。 請查看下列範例案例:
上圖說明下列步驟:
- 用戶端會起始適用於容器的應用程式閘道的 (適用於容器的應用程式閘道) 前端的要求。
- 適用於容器的應用程式閘道會選取許多可用 Pod 中的其中一個,以對要求進行負載平衡。 在此範例中,我們假設已從四個可用的 Pod 中選取 Pod C。
- Pod C 會傳回適用於容器的應用程式閘道的回應。
- 除了來自 Pod C 的後端回應之外,適用於容器的應用程式閘道也會新增 Set-Cookie 標頭,其包含用於路由的唯一產生的雜湊。
- 用戶端將另一個要求以及上一個步驟中所設定的工作階段親和性 Cookie 傳送至適用於容器的應用程式閘道。
- 適用於容器的應用程式閘道會偵測 Cookie,並選取 Pod C 以為要求提供服務。
- Pod C 會回應適用於容器的應用程式閘道。
- 適用於容器的應用程式閘道會傳回用戶端的回應
使用方式詳細資料
工作階段親和性由下列屬性和特性定義:
名稱 | 描述 |
---|---|
affinityType | 有效值為 application-cookie 或 managed-cookie。 |
cookieName | 如果 affinityType 是 application-cookie,則為必要項目。 這是 Cookie 的名稱。 |
cookieDuration | 如果 affinityType 是 application-cookie,則為必要項目。 這是 Cookie 的持續時間 (存留期),以秒為單位。 |
在受控 Cookie 親和性類型中,在 Cookie 提供給用戶端時,應用程式閘道會使用預先定義的值。
- Cookie 的名稱為:
AGCAffinity
。 - Cookie 的持續時間 (存留期) 為 86,400 秒 (一天)。
- 捨棄
cookieName
和cookieDuration
屬性和值。
在應用程式親和性類型中,必須明確定義 Cookie 名稱和持續時間 (存留期)。
如何設定工作階段親和性
可在以定義的 HTTPRoute 為目標的 RoutePolicy 資源中定義工作階段親和性。 您必須指定其 affinityType
為 application-cookie
或 managed-cookie
的 sessionAffinity
。 在此範例中,我們使用 application-cookie
作為 affinityType,並明確定義 Cookie 名稱和存留期。
使用名為 nomnom
且存留期為 3,600 秒 (1 小時) 的已定義 Cookie 來建立新 RoutePolicy 的範例命令。
kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: RoutePolicy
metadata:
name: session-affinity-route-policy
spec:
targetRef:
kind: HTTPRoute
name: http-route
namespace: test-infra
group: ""
default:
sessionAffinity:
affinityType: "application-cookie"
cookieName: "nomnom"
cookieDuration: 3600
EOF