錯誤描述:
每一次在升級微服務時(更新微服務版本),會有一段時間訪問報 503 。並在 istio-proxy
日誌中有記錄:”upstream connect error or disconnect/reset before headers. reset reason: connection failure“
原因:
Kubernetes 檢測 Pod 準備好(Running 狀態)是 Pod 中的一個容器準備好就可以了。但是部署了 Istio 後,Pod 最先準備好的是 istio-proxy
容器。此時真正的微服務容器還沒有被啓動,流量就進入了 Pod,istio-proxy
接受到流量,並發現 upstream 微服務沒有啓動,所以 istio-proxy
會返回 503 。
解決辦法:
知道原因後,思路就很簡單了,只要在 Pod 中所有容器都啓動完成後,再告知 Kubernetes Pod 準備好了就可以了。對 Pod 中其他容器加上 readinessProbe(就緒探針)就可以讓 Kubernetes 確認容器準備就緒後再進行流量轉發。如在 Pod 模板中添加
livenessProbe:
httpGet:
path: /healthz
port: 80
httpHeaders:
initialDelaySeconds: 10
periodSeconds: 3
readinessProbe
參考:https://k8smeetup.github.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/