設定不要の Istio
設定を使用しない場合でも Istio がもたらすメリットについて
新しいユーザーが初めて Istio に触れるとき、その膨大な機能セットに圧倒されることがあります。残念ながら、これにより Istio が不必要に複雑であり、小規模なチームやクラスターには適していないという印象を与える可能性があります。
しかし、Istio の素晴らしい点の1つは、設定なしで、すぐにユーザーにできるだけ多くの価値を提供することを目指していることです。これにより、ユーザーは最小限の労力で Istio のメリットのほとんどを得ることができます。シンプルな要件を持つ一部のユーザーにとっては、カスタム構成はまったく必要ないかもしれません。他のユーザーは、イングレスルーティングの追加、ネットワーク設定の微調整、セキュリティポリシーのロックダウンなど、慣れてきて必要になったら、徐々に Istio 設定を追加できます。
はじめに
まず、Istio のインストール方法を学ぶことができる、入門ガイドのドキュメントをご覧ください。既にご存知の場合は、istioctl install
を実行するだけです。
次に、設定やアプリケーションコードの変更なしに、Istio が提供するすべてのメリットを探ります。
セキュリティ
Istio は、メッシュ内のポッド間のトラフィックに対して、相互 TLS を自動的に有効にします。これにより、アプリケーションは複雑な TLS 設定や証明書管理を省略し、トランスポート層のセキュリティをすべてサイドカーにオフロードできます。
自動 TLS に慣れたら、mTLS トラフィックのみを許可したり、ニーズに合わせてカスタムの承認ポリシーを設定したりすることもできます。
可観測性
Istio は、メッシュ内のすべてのサービス通信に対して、詳細なテレメトリを自動的に生成します。このテレメトリは、サービス動作の可視性を提供し、オペレーターがアプリケーションのトラブルシューティング、保守、最適化を行うことを可能にします。サービス開発者に負担をかけることはありません。Istio を通じて、オペレーターは監視対象のサービスが、他のサービスや Istio コンポーネント自体とどのように相互作用しているかを詳細に理解できます。
この機能はすべて、Istio によって設定なしで追加されます。 Prometheus、Grafana、Jaeger、Zipkin、Kiali などのツールとの統合も利用可能です。
Istio が提供する可観測性の詳細については、可観測性の概要をご覧ください。
トラフィック管理
Kubernetes はサービスディスカバリーや DNS など多くのネットワーク機能を提供していますが、これはレイヤー 4 で行われるため、意図しない非効率が生じる可能性があります。たとえば、3つのレプリカを持つサービスにトラフィックを送信するシンプルな HTTP アプリケーションでは、負荷の偏りが見られます。
$ curl http://echo/{0..5} -s | grep Hostname
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
Hostname=echo-cb96f8d94-2ssll
$ curl http://echo/{0..5} -s | grep Hostname
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
Hostname=echo-cb96f8d94-879sn
ここでの問題は、Kubernetes が接続が確立されたときに送信先のバックエンドを決定し、同じ接続での今後のすべてのリクエストが同じバックエンドに送信されることです。ここでの例では、最初の5つのリクエストはすべて echo-cb96f8d94-2ssll
に送信され、次のセット(新しい接続を使用)はすべて echo-cb96f8d94-879sn
に送信されます。3番目のインスタンスはリクエストをまったく受信しません。
Istio では、HTTP トラフィック(HTTP/2 および gRPC を含む)が自動的に検出され、サービスは *接続* ごとではなく、*リクエスト* ごとに自動的に負荷分散されます。
$ curl http://echo/{0..5} -s | grep Hostname
Hostname=echo-cb96f8d94-wf4xk
Hostname=echo-cb96f8d94-rpfqz
Hostname=echo-cb96f8d94-cgmxr
Hostname=echo-cb96f8d94-wf4xk
Hostname=echo-cb96f8d94-rpfqz
Hostname=echo-cb96f8d94-cgmxr
ここでは、リクエストがすべてのバックエンド間で ラウンドロビン で負荷分散されていることがわかります。
これらのより良いデフォルトに加えて、Istio は、タイムアウト、再試行など、さまざまなトラフィック管理設定のカスタマイズを提供します。