外部サービス

Service Mesh はよく1つの環境 - 例えば、1つの Kubernetes クラスタ - 全体に及びます。また、その環境で接続されているすべてのサービスがメッシュの管理ドメインを形成し、そこからメトリクスを見たりポリシーを設定できます。

しかし、クラスタの外部でもサービスを実行している場合や、外部 API に依存している場合はどうでしょうか。

心配は要りません。Istio は ServiceEntry と呼ばれるリソースを提供します。これにより、それがあなたの所有するサービスでなくても外部サービスを論理的にあなたのメッシュへ取り込むことができます。

外部ホスト名の ServiceEntry を作成すると、その外部サービスに到達するまでのメトリクスとトレースを表示できます。これらの外部サービスにリトライロジックなどのトラフィックポリシーを設定することもできます。ServiceEntries を追加すると、Istio 管理ドメインの範囲が効果的に広がります。例を見てみましょう。

external currency service

ここではユーザの居住地に基づいて商品の価格を変換する currency サービスを備えた、グローバルの EC サイトを動かしています。サードパーティの通過変換 API である ヨーロッパ中央銀行 を使用して、リアルタイムの為替を提供しています。

メッシュ内のサービスからこの外部 API へのすべての読み出しに3秒のタイムアウトを設定します。これを行うには、2つの Istio リソースが必要です。

最初に、ヨーロッパの中央銀行ホスト名 ecb.europa.eu をメッシュに論理的に追加する ServiceEntry です。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: currency-api
spec:
  hosts:
  - www.ecb.europa.eu
  ports:
  - number: 80
    name: http
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS

次に、API 呼び出しのタイムアウトを設定するための VirtualService トラフィックルールです。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: currency-timeout
spec:
  hosts:
    - www.ecb.europa.eu
  http:
  - timeout: 3s
    route:
      - destination:
          host: www.ecb.europa.eu
        weight: 100

通貨 API の ServiceEntry を作成すると、Kiali service graph に自動的に ecb.europa.eu が表示されます。(そして,誰かがそれを呼んでいるのかすぐ知ることができます)

service graph

また、この外部サービスのレスポンスコードやレイテンシなどのデータを表示する Grafana dashboard もあります。

grafana

Istio ドキュメント を参照して、外部サービスの管理とセキュリティについて学びましょう。