Google-Kubernetes-Engine

GCP - GKE:每個 Ingress 配置都會自動重置。如何設置 HTTPS 健康檢查?

  • August 20, 2019

我知道 Ingress 需要處於健康狀態的服務才能通過 HTTP(S) 提供其內容,為此我在我的工作負載部署中配置了一個 ReadinessProbe:

       readinessProbe:
         failureThreshold: 10
         httpGet:
           path: /api/healthz
           port: 4400
           scheme: HTTPS
         periodSeconds: 30
         successThreshold: 1
         timeoutSeconds: 20

本質上,我有一個在埠上提供 HTTPS 請求的網路伺服器,4400並且我配置了一個healthz資源以返回 HTTP 200 響應。我的網路伺服器正在偵聽埠上的傳入連接:

  • HTTP -> 4300
  • HTTPS -> 4400

現在,為了訪問這些埠,我有一個myService針對網路伺服器的 GKE 服務 (),特別是:

 ports:
 - name: port-1
   nodePort: 31277
   port: 80
   protocol: TCP
   targetPort: 4300
 - name: port-2
   nodePort: 32167
   port: 443
   protocol: TCP
   targetPort: 4400

現在,如果我創建一個與 GCPmyIngress相關的新 Ingress 服務 () ,myService則會返回以下 Kubernetes 配置:

spec:
 backend:
   serviceName: my-service
   servicePort: port-2
 rules:
- host: test-domain-name-here.net
   http:
     paths:
     - backend:
         serviceName: my-service
         servicePort: port-2
 tls:
- secretName: letsencrypt-custom-cert

正如您在此處看到的,它的目標是 servicePort port-2

在此處輸入圖像描述

GKE 為這個名為 的入口配置(自動)創建了一個新的後端服務k8s-be-32167--XXXX,它的目標是port-2 32167,最重要的是預設 kubernetes L7 負載平衡健康檢查,它應該監控服務的健康狀態 -準備情況

問題是這個健康檢查應該32167使用 HTTPS 而不是 HTTP 來測試埠,每當我在幾分鐘後嘗試為 HTTPS 設置這個健康檢查時,GCP 都會將所有內容重置為其預設值,這非常煩人!!!

目前目標池僅允許 HTTP 健康檢查,而舊式風格,您可以查看此文件,其中顯示了允許的健康檢查概念和協議。

此外,我還發現了這個問題跟踪器,您可以在其中跟進並發表評論,以了解何時允許/支持 HTTPS 進行健康檢查。

引用自:https://serverfault.com/questions/979792