Istioコンポーネントの詳細


1.istioコンポーネント構成
以下はistio 1.1の公式アーキテクチャ図です.
Istioは複数のプラットフォームをサポートするが、それをKubernetesと組み合わせて使用すると、その優位性がより大きくなり、IstioはKubernetesプラットフォームに対するサポートも最も完備しており、本稿ではIstio+Kubernetesに基づいて展開する.
grafana,prometheus,kiali,jaegerなどのコンポーネントがインストールされている場合、完全な制御面コンポーネントには以下のpodが含まれます.
% kubectl -n istio-system get pod
NAME                                          READY     STATUS 
grafana-5f54556df5-s4xr4                      1/1       Running
istio-citadel-775c6cfd6b-8h5gt                1/1       Running
istio-galley-675d75c954-kjcsg                 1/1       Running
istio-ingressgateway-6f7b477cdd-d8zpv         1/1       Running
istio-pilot-7dfdb48fd8-92xgt                  2/2       Running
istio-policy-544967d75b-p6qkk                 2/2       Running
istio-sidecar-injector-5f7894f54f-w7f9v       1/1       Running
istio-telemetry-777876dc5d-msclx              2/2       Running
istio-tracing-5fbc94c494-558fp                1/1       Running
kiali-7c6f4c9874-vzb4t                        1/1       Running
prometheus-66b7689b97-w9glt                   1/1       Running


Service MeshのSidecarモードでは、データ面のユーザPodへのエージェントの注入が要求され、注入されたエージェントコンテナはサービスガバナンス分野の様々な「汚れ疲れ」を処理し、ユーザコンテナが業務ロジックに専念できるようにする.
上の図から分かるように、Istio制御面自体は複雑なマイクロサービスシステムであり、このシステムは複数のコンポーネントPodを含み、各コンポーネントはそれぞれの役割を果たし、単一のコンテナPodもあれば、複数のコンテナPodもあり、単一のプロセスコンテナもあれば、複数のプロセスコンテナもあり、各コンポーネントは異なるコマンドを呼び出し、各コンポーネントの間でRPCを通じて書く.データ面のユーザーサービスに対する管理制御を共同で完成する.
2.Istioソース、ミラー、コマンド
Isitoプロジェクトコードは主に以下の2つのgit倉庫から構成されています.
倉庫住所
言語
モジュール
https://github.com/istio/istio
Go
istio制御面を含むほとんどのコンポーネント:pilot,mixer,citadel,galley,sidecar-injectorなど、
https://github.com/istio/proxy
C++
istioが使用するエッジエージェントを含み、このエッジエージェントにはenvoyとmixer clientの2つの機能が含まれています.
2.1 istio/istio
https://github.com/istio/istio主なミラーとコマンド:
コンテナ名
ミラー名
スタートアップコマンド
ソースエントリ
Istio_init
istio/proxy_init
istio-iptables.sh
istio/tools/deb/istio-iptables.sh
istio-proxy
istio/proxyv2
pilot-agent
istio/pilot/cmd/pilot-agent
sidecar-injector-webhook
istio/sidecar_injector
sidecar-injector
istio/pilot/cmd/sidecar-injector
discovery
istio/pilot
pilot-discovery
istio/pilot/cmd/pilot-discovery
galley
istio/galley
galley
istio/galley/cmd/galley
mixer
istio/mixer
mixs
istio/mixer/cmd/mixs
citadel
istio/citadel
istio_ca
istio/security/cmd/istio_ca
また、2つのコマンドが上図で使用されていません.
コマンド#コマンド#
ソースエントリ
さぎょう
mixc
istio/mixer/cmd/mixc
Mixerサーバと対話するクライアント
node_agent
istio/security/cmd/node_agent
Nodeにセキュリティエージェントをインストールために使用する、これはMesh Expansionの特性で使用される、すなわちk 8 sとvmがオンである.
2.2 istio/proxy
https://github.com/istio/proxyこのプロジェクト自体はミラーを生成することはなく、istioのサイドカーコンテナミラーname = "Envoy"にADDされるistio/proxyv2のバイナリプログラムをコンパイルすることができる.
istio proxyプロジェクトで使用するコンパイル方式はGoogle製のbazelであり、bazelはコンパイル中に第三者ライブラリを直接導入し、第三者ソースコードをロードすることができる.
このプロジェクトにはEnvoyソースコードへの参照が含まれており、これに基づいて拡張が行われている.これらの拡張はEnvoy filter(フィルタ)の形式で提供されている.このような目的は、サイドカーエージェントがMixerにポリシー実行決定を委託することであるため、istio proxyというプロジェクトには2つの機能モジュールがあることが理解できる.
  • Envoy:Envoyに使用する全機能
  • mixer client:測定と遠隔測定に関するクライアント実現、Envoyに基づいて拡張し、RPCとMixer serverによって相互作用を行い、戦略管理制御と遠隔測定
  • を実現する.
    次に、以上の各モジュール、コマンド、およびそれらの間の協力について探究する.
    3.Istio Podの概要
    3.1データ面ユーザーPod
    データ面ユーザPod注入の内容は以下の通りである.
  • initContainer istio-init:iptablesを構成することによってPod中のトラフィックをハイジャックしenvoy
  • に転送する.
  • sidecar container istio-proxy:2つのプロセスを含み、親プロセスpliot-agentはenvoyを初期化し、管理し、子プロセスenvoyは原生envoyの機能を含むほか、mixer clientの論理を加えた.

  • プライマリ・ポート:
  • --statusPort status serverポート、デフォルトは0で、起動しないことを示し、istio起動時に通常15020
  • に渡される.
  • --proxyAdminPortエージェント管理ポート、デフォルト1500
  • なお、上記パラメータは、起動時に親プロセスpliot-agentに渡すが、実際には上記ポートを傍受するプロセスはサブプロセスenvoyである.
    3.2 istio-sidecar-injector
    単一容器を含む、sidecar-injector-webhook:httpサーバを起動し、kube apiサーバのAdmission Webhook要求を受け、ユーザpodにsidecar注入を行う.
    プロセスはsidecar-injectorで、主なリスニングポート:
  • --port Webhookサービスポート、デフォルト443、k 8 sサービスistio-sidecar-injectorを通じて対外的にサービスを提供します.

  • 3.3 istio-galley
    単一コンテナgalleyを含む:istioにおける構成管理サービスを提供し、IstioのCRDリソースの正当性を検証する.
    プロセスはgalley server ......で、主なリスニングポート:
  • --server-address galley gRPCアドレス、デフォルトはtcp://0.0.0.0:9901
  • --validation-port httpsポート、crdの正当性を検証するサービスを提供するポート、デフォルト443.
  • --monitoringPort httpポート、self-monitoringポート、デフォルト15014
  • 以上のポートは、k 8 sサービスistio-galleyを介して対外的にサービスを提供する.
    3.4 istio-pilot
    pilotコンポーネントのコアPod、ドッキングプラットフォームの適合層、抽象サービス登録情報、流量制御モデルなど、統一的なAPIをカプセル化し、Envoy呼び出しの取得に供する.
    次のコンテナが含まれます.
  • sidecar container istio-proxy
  • container discovery:プロセスpilot-discovery discovery ......
  • プライマリ・リスニング・ポート:
  • 15010:grpcによって提供されるxds取得インタフェース
  • 15011:httpsによって提供されるxds取得インタフェース
  • 8080:httpが提供するxdsによってインタフェースを取得し、v 1バージョンと互換性があり、またhttp readinessプローブ/readyもこのポート
  • にある.
  • --monitoringPort http self-monitoringポート、デフォルト15014
  • 以上のポートはk 8 sサービスistio-pilotを通じて対外的にサービスを提供している.
    3.5 istio-telemetryとistio-policy
    mixerコンポーネントには2つのpod、istio-telemetry、istio-policyが含まれています.istio-telemetryはリモート測定機能、istio-policyはポリシー制御を担当しています.これらにはそれぞれ2つのコンテナが含まれています.
  • sidecar container istio-proxy
  • mixer:プロセスmixs server ……
  • プライマリ・リスニング・ポート:
  • 9091: grpc-mixer
  • 15004: grpc-mixer-mtls
  • --monitoring-port:http self-monitoringポート、デフォルト15014、livenessプローブ/version
  • 3.7 istio-citadel
    安全と証明書管理を担当するPodは、単一コンテナcitadelを含む
    起動コマンド/usr/local/bin/istio_ca --self-signed-ca ......主なリスニングポート:
  • --grpc-port citadel grpcポート、デフォルト8060
  • --monitoring-port:http self-monitoringポート、デフォルト15014、livenessプローブ/version
  • 以上のポートは、k 8 sサービスistio-citadelを介して対外的にサービスを提供する.
    その後、各コンポーネントを逐一分析します.