Istioにおけるトラフィック管理 – 詳細ガイド
こんにちは、読者の皆さん!この記事では、詳しい説明付きでIstioにおけるトラフィック管理のリソースについて話します。
それでは、始めましょう!(Sore dewa, hajimemashou!)
また、KubernetesクラスターにIstioをインストールする方法についてもお読みください。
交通管理とは何ですか? (Kōtsū kanri to wa nan desu ka?)
交通管理は、データやブラウジングの転送、またはAPI呼び出しの一環として生成されるトラフィックの管理を指します。
オンプレミスサーバーまたはクラウド上にアプリケーションを設定している場合、そのアプリケーションが特定のAPI呼び出しや他の第三者のサービスへの呼び出し、またはインターネットを介したデータ転送を試みる際にトラフィックが生成されます。
データはどんなアプリケーションにおいても重要でかつ脆弱な要素であり、インフラストラクチャはそのセットアップの根幹です。 インフラストラクチャのセキュリティを確保した上で、インターネット上のトラフィックを監視することは必要不可欠です。これにより、同じプラットフォーム/インフラストラクチャ上でサービスのセキュリティと管理が向上します。
次に進みますと、次のセクションではトラフィック管理ツールとしてIstioを見ていきます。
Istioはトラフィック管理ツールとしての役割を果たします。
Istioは、提供されるトラフィックルーティングルールによって、トラフィックの管理方法を私たちに紹介します。アプリケーションは障害に対してより強い耐久性を持ちます。なぜならば、インターネット経由でアプリケーションに行き来するトラフィックのすべてが監視されるからです。
Istioは、アプリケーションコンテナにサイドカーとしてEnvoyプロキシを設定します。API呼び出しやサービスの参加など、アプリケーションポッドへの出入りするすべてのトラフィックを監視します。
これにより、基礎となるアプリケーションサービスは影響を受けず、全体のトラフィック監視は耐障害性とトラフィック管理のためにEnvoyサイドカーを介してプロキシされます。
-
- Istioはトラフィックを監視するために、アプリケーションのエンドポイントを理解する必要があります。そのため、サービスディスカバリーシステムに内部的に接続して、アプリケーションのサービスとエンドポイントを認識します。
-
- そのため、ネットワーク呼び出しがアプリケーションに到達すると、まずEnvoyプロキシを経由して最終的にアプリケーションのエンドサービスにルーティングされます。したがって、サイドカーはアプリケーションのトラフィックを完全に処理し、監視します。
- Istioは、インフラストラクチャ内に設定されたロードバランサー間でトラフィックを転送または分散するために、ラウンドロビンモデルを使用します。
イスティオのトラフィック管理リソース
イストイオのトラフィック管理ツールの作業が理解できたら、イストイオによって設定されたリソースを探索しましょう。
1. バーチャルサービス
仮想サービスを使用することで、私たちはアプリケーションがロードバランサーにアクセスする際に役立つトラフィックルーティングルールを定義することができます。私たちはルールとそれに対応するエンドサービスのマッチングプロトコルを定義します。もしルールが条件に一致する場合、トラフィックはエンドサービスに転送されます。
仮想サービスにより、トラフィックの負荷を容易に管理できます。トラフィックのルーティングルールによって、サービスリクエストを切り離すことができます。同じ仮想サービス設定内で、複数のホスト名のトラフィックの動作を指定および維持することができます。
以下の仮想サービスの設定例を理解しましょう。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-vs
spec:
hosts:
- demo.vs.com
http:
- match:
- headers:
end-user:
exact: /api
route:
- destination:
host: /
説明
- The hosts entry includes the domain or CNAME of the application.
- We then cascade down through the http routing and configure the matching backend service to a particular host/destination.
- Under the match section comes the backend service configuration that will be invoked as soon as the host entry matches.
- The http section includes the routing rules that are redirected to the destination.
- As soon as the web traffic/request hits the Istio gateway, it looks for the entry of it’s CNAME/FQDN. Upon successful match, it then moves the traffic to the virtual service which routes it to the particular destination k8 service.
ゲートウェイ
Gatewayによって、グローバル(エンボイ)レベルでの送受信トラフィックの制御と監視が可能になります。Istioサービスメッシュに入るトラフィック(プロトコル/ルール)の種類や宛先へのさらなるルーティングを指定することができます。
それで、アプリケーションのURLがロードバランサーに到達すると、等価のゲートウェイを検索します。エントリーが見つかると、アプリケーションホストをメッシュに入れることを許可します。
以下の例を通して、ゲートウェイの働きを理解しようとしてみましょう。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: demo-gtwy
spec:
selector:
app: demo
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- demo.vs.com
tls:
mode: SIMPLE
credentialName: demo-tls-cert
説明:
- As soon as the web traffic hits the load balancer, it gets routed to the Istio gateway. The gateway enables the traffic to enter the service mesh over the mention port (443 in this case).
- But, no traffic routing to the backend service happens in this stage.
- The gateway looks for the credibility of the CNAME through the TLS secret (credential).
- Once the gateway confirms and allows the traffic from the host in, the virtual service takes the lead and does the routing to the destination service.
3. サイドカー
サイドカーズを使用することで、Envoyプロキシに到達するトラフィックを制限および管理することができます。一般的に、Istioはアプリケーションのワークロードに関連するポートでトラフィックを受け入れるEnvoyプロキシを設定します。サイドカーの配置には以下の利点があります:
– トラフィックの制限と管理が可能
– アプリケーションのワークロードに関連するポートでトラフィックを受け入れるEnvoyプロキシの設定
- We can filter and manage the protocols and ports that the Envoy should accept.
- We can also filter and restrict the Envoy proxy from reaching or forwarding traffic to certain set of services.
- It can allow/restrict traffic to the services within different namespaces.
では、以下の例を使って、サイドカーの概念を理解しましょう。
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
name: default
namespace: default
spec:
egress:
- hosts:
- "./*"
- "bookinfo/*"
説明: 日本語での自然なパラフレーズが必要です。1つのオプションで結構です。
- With the above configuration, it applies a sidecar configuration to the default namespace.
- This configuration allows the external/egress traffic to reach to the backend services of default and bookinfo namespaces only.
- With this, it restricts the traffic routing/accessibility to other namespaces.
結論は、1つの選択肢で日本語で書き直すことができます。
これによって、私たちはこのトピックの終わりに近づきました。もし質問があれば、どうぞ以下にコメントしてください。
Kubernetesに関連するより多くの投稿をご覧いただくには、ぜひお待ちください。
それまで、楽しい学びを! 🙂