Istio 服務的健康檢查 === Kubernetes 存活和就緒探針描述了幾種配置存活和就緒探針的方法: 命令 HTTP 請求 TCP 探針 命令方式無需更改即可工作,但 HTTP 請求和 TCP 探針需要 Istio 更改 Pod 的配置。 對服務的健康檢查請求由 Kubelet 發送。 當啟用雙向 TLS 時,這會成為一個問題,因為 Kubelet 沒有 Istio 頒發的證書。 因此,健康檢查請求將失敗。liveness-http TCP 探針檢查需要特殊處理,因為 Istio 將所有傳入的流量重定向到 Sidecar,所以所有 TCP 連接埠都顯示為開放。 Kubelet 僅檢查某個進程是否正在監聽指定的埠,因此只要 Sidecar 正在運行,該探針就總會成功。 Istio 通過重寫應用程式 就緒/存活探針來解決這兩個問題,以便將探針請求發送到 Sidecar 代理PodSpec。 對於 HTTP 請求,Sidecar 代理將請求重定向到應用程式並剝離響應體,僅返回響應代碼。 對於 TCP 探針,Sidecar 代理會在避免流量重定向的同時進行埠檢查。 在所有內置的 Istio 配置檔中,有問題的探針的重寫是默認啟用的,但可以如下所述禁用。 # 使用命令方式的存活和就緒探針 Istio 提供了一個存活示例來實現這種方式。 為了演示該探針在啟用雙向 TLS 的情況下如何工作,本例先創建一個命名空間: $ kubectl create ns istio-io-health 要設定 雙向 TLS,請執行:STRICT ``` $ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1beta1 kind: PeerAuthentication metadata: name: "default" namespace: "istio-io-health" spec: mtls: mode: STRICT EOF ``` 接下來,運行以下命令來部署範例服務: ``` $ kubectl -n istio-io-health apply -f <(istioctl kube-inject -f samples/health-check/liveness-command.yaml) ``` 要確認存活探針是否正常工作,請檢查範例 Pod 的狀態以驗證它是否正在運行。 ``` $ kubectl -n istio-io-health get pod NAME READY STATUS RESTARTS AGE liveness-6857c8775f-zdv9r 2/2 Running 0 4m ``` 使用 HTTP 或 TCP 方式的存活和就緒探針 如上所述,Istio 預設使用探針重寫來實現 HTTP/TCP 探針。 您可以為特定 Pod 或全域禁用此特性。 為 Pod 禁用探針重寫 您可以使用 來為 Pod 加入註解sidecar.istio.io/rewriteAppHTTPProbers: "false" 以禁用探針重寫選項。 確保將註解添加到 Pod 資源,因為它會在其他任何地方被忽略(例如,在封閉的 Deployment 資源上)。 ``` kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: liveness-http spec: selector: matchLabels: app: liveness-http version: v1 template: metadata: labels: app: liveness-http version: v1 annotations: sidecar.istio.io/rewriteAppHTTPProbers: "false" spec: containers: - name: liveness-http image: docker.io/istio/health:example ports: - containerPort: 8001 livenessProbe: httpGet: path: /foo port: 8001 initialDelaySeconds: 5 periodSeconds: 5 EOF ``` 這種方式允許您在單個 Deployment 上逐步禁用健康檢查探針重寫,而無需重新安裝 Istio。 全域禁用探針重寫 安裝 Istio 時使用 全域禁用探針重寫。 或者,更新 Istio Sidecar 注入器的配置映射:--set values.sidecarInjectorWebhook.rewriteAppHTTPProbe=false ``` $ kubectl get cm istio-sidecar-injector -n istio-system -o yaml | sed -e 's/"rewriteAppHTTPProbe": true/"rewriteAppHTTPProbe": false/' | kubectl apply -f - ``` 清理 移除這些範例所用的命名空間: ``` $ kubectl delete ns istio-io-health ``` https://istio.io/latest/zh/docs/ops/configuration/mesh/app-health-check/
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.