IstioサービスメッシュをAKSクラスターに展開しました。サービス通信用にistioで構成されたuiサービスとバックエンドサービスがあります。 istioを介してバックエンドサービスを呼び出すことができます。バックエンドサービスへのアクセスに問題はありません。
しかし、ポッドのステータスを表示すると、test-uiポッドで問題が発生します
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ポッド、istioコンテナーの1つがリクエストを処理する準備ができていません。コンテナーの状態を調べたところ、以下のエラーが発生しました。
Warning Unhealthy 2m24s (x299 over 12m) kubelet, aks-wmsdevk8s-25812762-4
Readiness probe failed: HTTP probe failed with statuscode: 503
私はそれが未解決の問題であると見ています githubの問題 ..これには回避策があります...
編集
私のistioバージョン
version.BuildInfo {Version: "1.1.5"、GitRevision: "9b6d31b74d1c0cc9358cc82d395b53f71393326b"、User: "root"、Host: "3e29fde4-6c3f-11e9-b00d-0a580a2c0205"、GolangVersion: "go1.10.4"、DockerHub .io/istio "、BuildStatus:" Clean "、GitTag:" 1.1.4-10-g9b6d31b "}
istio proxy version - Image: docker.io/istio/proxyv2:1.1.2
ポッドの活性プローブを有効にする必要があります。
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
インストールされている他のリソースにグローバルに影響を与えずに、特定のデプロイメントまたはポッドに対してHTTPプローブを有効にする場合は、sidecar.istio.io/rewriteAppHTTPProbers: "true"
でポッドに簡単に注釈を付けます。プローブセクションをカスタマイズする場合は、次の例をご覧ください。
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サービスのヘルスチェックの詳細については、サービスの ドキュメントはこちら をご覧ください。
サイドカープロキシを挿入し、istioctlを使用してアプリプローブエンドポイントを書き換えることができます
kb get <deployment/statefulset> -n <namespace> <resource_name> -o yaml | istioctl kube-inject --rewriteAppProbe -f - | kubectl apply -f -
私の場合、OpenShift 3.11でServiceMesh TP 0.10をテストし、ovs-multitenant(SDNプラグイン)を使用して、プロジェクト間の通信がブロックされました。同じ問題が発生し、istio-system名前空間のnetidを「0」に設定すると、問題が解決しました。アプリケーションの名前空間とistio-sidecar-injectorがある名前空間の間のネットワーク通信を確認します。