我有運行在 AKS 上的 web api 應用程式有 2 個副本,因此運行同一應用程式的 2 個實體/副本,后面我們有 NGINX 負載均衡器,它在兩個實體/副本之間分配流量。
現在我有一個 PUT/POST 端點,用于使用 Serilog 動態更改日志級別。
[HttpPut("logLevel")]
public IActionResult ChangeLevel(LogEventLevel eventLevel)
{
_levelSwitch.MinimumLevel = eventLevel;
return Ok();
}
服務 URL 類似于https://XXXXX.com:12345/logLevel,當通過 POSTMAN 工具執行它時,它只對一個副本/POD 有效,而另一個沒有影響(當然!)。
問題是,我在這里有什么選擇,以便我可以為服務的所有副本執行 API 呼叫?有沒有開箱即用的解決方案?
謝謝。
入口規則:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: kube-system
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- XXXXX.com
secretName: aks-ingress-tls
rules:
- host: XXXXX.com
- http:
paths:
- path: /Servive1/(.*)
pathType: Prefix
backend:
service:
name: Servive1
port:
number: 12345
uj5u.com熱心網友回復:
沒有什么好的方法可以做到這一點。您希望在無狀態部署中更改 Pod 的狀態。Ingress 在單個部署/服務的所有 pod 之間分配流量。無法強制入口將流量發送到特定 pod。
如果您洗掉任何型別的粘性會話,那么多個 POST 最終應該會到達您的所有 pod 并相應地更新狀態,但這并不可靠。
我能想到的唯一解決方案是使用匹配的服務將每個 pod 分解為它自己的部署。確保所有部署至少有一個共同的標簽和唯一的其他標簽。然后創建一個以共享標簽為目標的所有 pod 的服務,并為各個標簽創建單獨的服務。然后創建您的 Ingress 規則,以便默認路徑進入共享服務,并為自己創建進入各個 Pod 的“后門”。
這不是一個很好的解決方案。
或者,您可能想要使用 statefulset,然后在您的集群中運行一個 pod,該 pod 可以接收 HTTP 請求以更改日志記錄級別。當該請求傳入時,該 Pod 將向每個 Pod 發送 HTTP 請求(因為您可以使用無頭服務路由到各個 Pod)。這需要更多的作業和開銷,但可以通過單個請求可靠地作業。
最后一點,是否可以將日志級別設定為部署中的變數?如果您可以管理它,而不是直接向 pod 發出 HTTP 請求,您只需要使用一個kubectl patch命令來更新您的部署,所有 pod 都會受到影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392552.html
標籤:nginx Kubernetes asp.net-core-webapi azure-aks
上一篇:在Nginx中重寫URL
