由於健康檢查失敗,我無法讓Ingress在GKE上工作。我已經嘗試了所有我能想到的調試步驟,包括:爲什麼LoadBalancer在GKE上工作時Ingress會失敗?
- 驗證我不是
- 驗證的任何配額所剩無幾,我的服務是從集羣
- 驗證中訪問該我的服務在k8s/GKE負載均衡器後面工作。
- 已驗證
healthz
檢查傳入的Stackdriver登錄
......我很想了解如何調試或修復任何建議。以下詳情!
我已經建立了與GKE LoadBalancer
類型的服務。通過外部IP的偉大工程:
apiVersion: v1
kind: Service
metadata:
name: echoserver
namespace: es
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
type: LoadBalancer
selector:
app: echoserver
然後我嘗試建立一個入口在這同一服務之上:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echoserver-ingress
namespace: es
annotations:
kubernetes.io/ingress.class: "gce"
kubernetes.io/ingress.global-static-ip-name: "echoserver-global-ip"
spec:
backend:
serviceName: echoserver
servicePort: 80
入口被創建,但它認爲後端節點都是不健康的:
$ kubectl --namespace es describe ingress echoserver-ingress | grep backends
backends: {"k8s-be-31102--<snipped>":"UNHEALTHY"}
檢查在GKE Web控制檯的入口後端的狀態下,我看到了同樣的事情:
健康檢查細節出現預期:
...並在我的羣集吊艙內我可以調用成功服務:
# curl -vvv echoserver 2>&1 | grep "< HTTP"
< HTTP/1.0 200 OK
# curl -vvv echoserver/healthz 2>&1 | grep "< HTTP"
< HTTP/1.0 200 OK
我可以通過NodePort解決該服務:
# curl -vvv 10.0.1.1:31102 2>&1 | grep "< HTTP"
< HTTP/1.0 200 OK
(這不用說,是因爲我在步驟1中設置負載平衡器服務,導致在的工作就好了一個網站)
我也看到healthz
抽查合格的爲Stackdriver日誌:
有關配額,我檢查,看看我只使用3月30日的後端服務:
$ gcloud compute project-info describe | grep -A 1 -B 1 BACKEND_SERVICES
- limit: 30.0
metric: BACKEND_SERVICES
usage: 3.0
不知道如果這會引起你的問題,但至少在你張貼在這裏的入口是一個錯字,在「kubernetes.io/ingress.class」註釋「kubernetes」與「N」來代替「s」結尾 –
感謝您的密切閱讀 - 只是我的文章中的一個錯字(我更新以解決錯字;問題依然存在)。 – Bosh
您的Ingress部署是否爲HTTP(S)負載均衡器/運行狀況檢查器創建了所需的防火牆規則?有關防火牆規則的詳細信息,請訪問[本文](https://cloud.google.com/compute/docs/load-balancing/http/#firewall_rules)。 – Kamran