就绪探测失败:HTTP 探测失败,状态码:ISTIO 中的 503

Readiness probe failed: HTTP probe failed with statuscode: 503 in ISTIO

我已经在我的 AKS 集群中部署了 istio 服务网格。我在 istio 中配置了 ui 和后端服务以进行服务通信。我可以通过istio调用后端服务,访问我的后端服务没有问题。

但是当我看到 pod 状态

时,我在 test-ui pod 中遇到问题
NAME                                  READY   STATUS    RESTARTS   AGE
Test-api-deployment-59f6c6f67-ml4xm   2/2     Running   0          3d21h
Test-ui-deployment-b54fd89b-2ndsv     1/2     Running   0          52m

在上述状态下,我的 ui pod,我的 istio 容器之一未处于就绪状态,无法满足我的请求。当我查看容器状态时,出现以下错误..

Warning  Unhealthy  2m24s (x299 over 12m)  kubelet, aks-wmsdevk8s-25812762-4  
Readiness probe failed: HTTP probe failed with statuscode: 503

我认为这是一个悬而未决的问题 issue in github.. 有什么解决方法吗...

编辑

我的 istio 版本

version.BuildInfo{Version:"1.1.5", GitRevision:"9b6d31b74d1c0cc9358cc82d395b53f71393326b", User:"root", Host:"3e29fde4-6c3f-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Clean", GitTag:"1.1.4-10-g9b6d31b"}

istio proxy version -   Image:         docker.io/istio/proxyv2:1.1.2

它应该适用于 istio 1.1.5。我想你没有配置 istio 来重写 HTTPProbes。您需要使用 sidecarInjectorWebhook.rewriteAppHTTPProbe=true (source).

安装 Istio

您可以检查您的 istio-sidecar-injector configmap,它应该有 rewriteAppHTTPProbe: true

ps。它适用于 istio 1.1.2,我相信

就我而言,我在带有 ServiceMesh TP 0.10 的 OpenShift 3.11 上进行了测试,并使用了 ovs-multitenant(SDN 插件),因此 inter-projects 通信被阻止。我有同样的问题并将 istio-system 命名空间的 netid 设置为“0”,然后问题就解决了。 检查应用程序的命名空间和具有 istio-sidecar-injector 的命名空间之间的网络通信。

您可以注入 sidecar 代理并使用 istioctl 重写应用探测端点

kb get <deployment/statefulset> -n <namespace> <resource_name> -o yaml | istioctl kube-inject --rewriteAppProbe -f - | kubectl apply -f -

您需要为 pods 启用活性探测:

如果您已经安装了 Istio,您可以在命名空间 istio-system

中更改配置映射
kubectl get cm istio-sidecar-injector -n istio-system -o yaml | \ 
sed -e 's/rewriteAppHTTPProbe:false/rewriteAppHTTPProbe:true/' | \
kubectl apply -f -

如果您要安装 Istio,您可以使用 istioctl

全局启用它
istioctl manifest apply --set values.sidecarInjectorWebhook.rewriteAppHTTPProbe=true

如果您想为特定部署或 pod 启用 HTTP 探测而不全局影响其他已安装的资源,只需使用 sidecar.istio.io/rewriteAppHTTPProbers: "true" 注释 pod。如果您想自定义探针部分,请查看以下示例:

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: "true"
    spec:
      containers:
      - name: liveness-http
        image: docker.io/istio/health:example
        ports:
        - containerPort: 8001
        livenessProbe:
          httpGet:
            path: /foo
            port: 8001
          initialDelaySeconds: 5
          periodSeconds: 5

有关 Istio 服务健康检查的更多信息,请查看他们的 documentation here

我在 OKD 3.11 和 Istio 1.1.2 上也遇到了同样的问题。将 istio-system 命名空间的 netid 设置为“0”后,问题就解决了。

检查 netid :

oc get netnamespaces

将 netid 设置为“0”:

oc adm pod-network make-projects-global istio-system