ztunnel の接続に関する問題のトラブルシューティング

このガイドでは、ztunnel プロキシの構成とデータパスを監視するためのいくつかのオプションについて説明します。この情報は、高レベルのトラブルシューティングや、問題がある場合にバグレポートに含めると役立つ情報の特定にも役立ちます。

ztunnel プロキシの状態の表示

ztunnel プロキシは、istiod コントロールプレーンから xDS API を介して構成および検出情報を取得します。

istioctl ztunnel-config コマンドを使用すると、ztunnel プロキシによって認識された検出済みワークロードを表示できます。

最初の例では、ztunnel が現在追跡しているすべてのワークロードとコントロールプレーンコンポーネントが表示されます。これには、そのコンポーネントに接続する際に使用する IP アドレスとプロトコル、およびそのワークロードに関連付けられたウェイポイントプロキシがあるかどうかの情報が含まれます。

$ istioctl ztunnel-config workloads
NAMESPACE POD NAME IP NODE WAYPOINT PROTOCOL default bookinfo-gateway-istio-59dd7c96db-q9k6v 10.244.1.11 ambient-worker None TCP default details-v1-cf74bb974-5sqkp 10.244.1.5 ambient-worker None HBONE default productpage-v1-87d54dd59-fn6vw 10.244.1.10 ambient-worker None HBONE default ratings-v1-7c4bbf97db-zvkdw 10.244.1.6 ambient-worker None HBONE default reviews-v1-5fd6d4f8f8-knbht 10.244.1.16 ambient-worker None HBONE default reviews-v2-6f9b55c5db-c94m2 10.244.1.17 ambient-worker None HBONE default reviews-v3-7d99fd7978-7rgtd 10.244.1.18 ambient-worker None HBONE default curl-7656cf8794-r7zb9 10.244.1.12 ambient-worker None HBONE istio-system istiod-7ff4959459-qcpvp 10.244.2.5 ambient-worker2 None TCP istio-system ztunnel-6hvcw 10.244.1.4 ambient-worker None TCP istio-system ztunnel-mf476 10.244.2.6 ambient-worker2 None TCP istio-system ztunnel-vqzf9 10.244.0.6 ambient-control-plane None TCP kube-system coredns-76f75df574-2sms2 10.244.0.3 ambient-control-plane None TCP kube-system coredns-76f75df574-5bf9c 10.244.0.2 ambient-control-plane None TCP local-path-storage local-path-provisioner-7577fdbbfb-pslg6 10.244.0.4 ambient-control-plane None TCP

ztunnel-config コマンドは、ztunnel プロキシが mTLS に使用するために istiod コントロールプレーンから受け取った TLS 証明書を保持するシークレットを表示するために使用できます。

$ istioctl ztunnel-config certificates "$ZTUNNEL".istio-system
CERTIFICATE NAME TYPE STATUS VALID CERT SERIAL NUMBER NOT AFTER NOT BEFORE spiffe://cluster.local/ns/default/sa/bookinfo-details Leaf Available true c198d859ee51556d0eae13b331b0c259 2024-05-05T09:17:47Z 2024-05-04T09:15:47Z spiffe://cluster.local/ns/default/sa/bookinfo-details Root Available true bad086c516cce777645363cb8d731277 2034-04-24T03:31:05Z 2024-04-26T03:31:05Z spiffe://cluster.local/ns/default/sa/bookinfo-productpage Leaf Available true 64c3828993c7df6f85a601a1615532cc 2024-05-05T09:17:47Z 2024-05-04T09:15:47Z spiffe://cluster.local/ns/default/sa/bookinfo-productpage Root Available true bad086c516cce777645363cb8d731277 2034-04-24T03:31:05Z 2024-04-26T03:31:05Z spiffe://cluster.local/ns/default/sa/bookinfo-ratings Leaf Available true 720479815bf6d81a05df8a64f384ebb0 2024-05-05T09:17:47Z 2024-05-04T09:15:47Z spiffe://cluster.local/ns/default/sa/bookinfo-ratings Root Available true bad086c516cce777645363cb8d731277 2034-04-24T03:31:05Z 2024-04-26T03:31:05Z spiffe://cluster.local/ns/default/sa/bookinfo-reviews Leaf Available true 285697fb2cf806852d3293298e300c86 2024-05-05T09:17:47Z 2024-05-04T09:15:47Z spiffe://cluster.local/ns/default/sa/bookinfo-reviews Root Available true bad086c516cce777645363cb8d731277 2034-04-24T03:31:05Z 2024-04-26T03:31:05Z spiffe://cluster.local/ns/default/sa/curl Leaf Available true fa33bbb783553a1704866842586e4c0b 2024-05-05T09:25:49Z 2024-05-04T09:23:49Z spiffe://cluster.local/ns/default/sa/curl Root Available true bad086c516cce777645363cb8d731277 2034-04-24T03:31:05Z 2024-04-26T03:31:05Z

これらのコマンドを使用すると、ztunnel プロキシがすべての予期されるワークロードと TLS 証明書で構成されていることを確認できます。さらに、不足している情報は、ネットワーキングエラーのトラブルシューティングに使用できます。

all オプションを使用すると、単一の CLI コマンドで ztunnel-config のすべての部分を表示できます。

$ istioctl ztunnel-config all -o json

また、Pod 内のエンドポイントへの curl を使用して、ztunnel プロキシの生の設定ダンプを表示することもできます。

$ kubectl debug -it $ZTUNNEL -n istio-system --image=curlimages/curl -- curl localhost:15000/config_dump

ztunnel xDS リソースの Istiod 状態の表示

場合によっては、ztunnel プロキシ用に特別に定義された xDS API リソースの形式で、istiod コントロールプレーンで管理されている ztunnel プロキシ設定リソースの状態を表示したい場合があります。これは、以下の例に示すように、istiod Pod に exec し、特定の ztunnel プロキシのポート 15014 からこの情報を取得することで実行できます。この出力は、JSON 整形ユーティリティで保存して表示することもでき、より簡単に閲覧できます (例には示されていません)。

$ export ISTIOD=$(kubectl get pods -n istio-system -l app=istiod -o=jsonpath='{.items[0].metadata.name}') $ kubectl debug -it $ISTIOD -n istio-system --image=curlimages/curl -- curl localhost:15014/debug/config_dump?proxyID="$ZTUNNEL".istio-system

ログによる ztunnel トラフィックの検証

ztunnel のトラフィックログは、標準の Kubernetes ログ機能を使用してクエリできます。

$ kubectl -n default exec deploy/curl -- sh -c 'for i in $(seq 1 10); do curl -s -I http://productpage:9080/; done'
HTTP/1.1 200 OK Server: Werkzeug/3.0.1 Python/3.12.1 --snip--

表示されたレスポンスは、クライアント Pod がサービスからレスポンスを受信していることを確認します。これで、ztunnel Pod のログをチェックして、トラフィックが HBONE トンネル経由で送信されたことを確認できます。

$ kubectl -n istio-system logs -l app=ztunnel | grep -E "inbound|outbound"
2024-05-04T09:59:05.028709Z info access connection complete src.addr=10.244.1.12:60059 src.workload="curl-7656cf8794-r7zb9" src.namespace="default" src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.244.1.10:9080 dst.hbone_addr="10.244.1.10:9080" dst.service="productpage.default.svc.cluster.local" dst.workload="productpage-v1-87d54dd59-fn6vw" dst.namespace="productpage" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-productpage" direction="inbound" bytes_sent=175 bytes_recv=80 duration="1ms" 2024-05-04T09:59:05.028771Z info access connection complete src.addr=10.244.1.12:58508 src.workload="curl-7656cf8794-r7zb9" src.namespace="default" src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.244.1.10:15008 dst.hbone_addr="10.244.1.10:9080" dst.service="productpage.default.svc.cluster.local" dst.workload="productpage-v1-87d54dd59-fn6vw" dst.namespace="productpage" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-productpage" direction="outbound" bytes_sent=80 bytes_recv=175 duration="1ms" --snip--

これらのログメッセージは、トラフィックが ztunnel プロキシ経由で送信されたことを確認します。よりきめ細かいモニタリングは、トラフィックの送信元と宛先の Pod と同じノードにある特定の ztunnel プロキシインスタンスのログをチェックすることで実行できます。これらのログが表示されない場合は、トラフィックリダイレクトが正しく機能していない可能性があります。

ztunnel 負荷分散の検証

宛先が複数のエンドポイントを持つサービスの場合、ztunnel プロキシは自動的にクライアント側のロードバランシングを実行します。追加の構成は必要ありません。ロードバランシングアルゴリズムは、L4 接続状態に基づいてトラフィックを分散する内部固定の L4 ラウンドロビンアルゴリズムであり、ユーザーが構成することはできません。

複数のバックエンドを持つサービスを呼び出すことで、クライアントトラフィックがサービスレプリカ全体でバランスされていることを検証できます。

$ kubectl -n default exec deploy/curl -- sh -c 'for i in $(seq 1 10); do curl -s -I http://reviews:9080/; done'
$ kubectl -n istio-system logs -l app=ztunnel | grep -E "outbound"
--snip-- 2024-05-04T10:11:04.964851Z info access connection complete src.addr=10.244.1.12:35520 src.workload="curl-7656cf8794-r7zb9" src.namespace="default" src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.244.1.9:15008 dst.hbone_addr="10.244.1.9:9080" dst.service="reviews.default.svc.cluster.local" dst.workload="reviews-v3-7d99fd7978-zznnq" dst.namespace="reviews" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-reviews" direction="outbound" bytes_sent=84 bytes_recv=169 duration="2ms" 2024-05-04T10:11:04.969578Z info access connection complete src.addr=10.244.1.12:35526 src.workload="curl-7656cf8794-r7zb9" src.namespace="default" src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.244.1.9:15008 dst.hbone_addr="10.244.1.9:9080" dst.service="reviews.default.svc.cluster.local" dst.workload="reviews-v3-7d99fd7978-zznnq" dst.namespace="reviews" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-reviews" direction="outbound" bytes_sent=84 bytes_recv=169 duration="2ms" 2024-05-04T10:11:04.974720Z info access connection complete src.addr=10.244.1.12:35536 src.workload="curl-7656cf8794-r7zb9" src.namespace="default" src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.244.1.7:15008 dst.hbone_addr="10.244.1.7:9080" dst.service="reviews.default.svc.cluster.local" dst.workload="reviews-v1-5fd6d4f8f8-26j92" dst.namespace="reviews" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-reviews" direction="outbound" bytes_sent=84 bytes_recv=169 duration="2ms" 2024-05-04T10:11:04.979462Z info access connection complete src.addr=10.244.1.12:35552 src.workload="curl-7656cf8794-r7zb9" src.namespace="default" src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.244.1.8:15008 dst.hbone_addr="10.244.1.8:9080" dst.service="reviews.default.svc.cluster.local" dst.workload="reviews-v2-6f9b55c5db-c2dtw" dst.namespace="reviews" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-reviews" direction="outbound" bytes_sent=84 bytes_recv=169 duration="2ms"

これはラウンドロビンロードバランシングアルゴリズムであり、以前に説明したように、VirtualService API オブジェクトのすべての側面がウェイポイントプロキシでインスタンス化され、ztunnel プロキシではインスタンス化されないため、VirtualServiceTrafficPolicy フィールド内で構成されている可能性のあるロードバランシングアルゴリズムとは別であり、独立しています。

アンビエントモードトラフィックの可観測性

上記の ztunnel ログやその他のモニタリングオプションのチェックに加えて、通常の Istio モニタリングおよびテレメトリ機能を使用して、アンビエントデータプレーンモードを使用するアプリケーショントラフィックをモニタリングすることもできます。

サービスが ztunnel によって提供されるセキュアオーバーレイのみを使用している場合、報告される Istio メトリクスは L4 TCP メトリクス (つまり、istio_tcp_sent_bytes_totalistio_tcp_received_bytes_totalistio_tcp_connections_opened_totalistio_tcp_connections_closed_total) のみになります。ウェイポイントプロキシが使用されている場合は、Istio および Envoy メトリクスのフルセットが報告されます。

この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!