就绪探测失败: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
我已经在我的 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-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