Anthos における Locality Balancing によるトラフィック制御
概要
今回は Anthos Multi-cluster Mesh における Destination Rule を用いたトラフィック制御のお話しです。
Goal
マルチクラスタ・マルチリージョン環境下において同一名の Service がある場合に対象 Service に対するトラフィック制御を柔軟に行う方法についてです。
複数リージョンで GKE クラスタ構築し、 Anthos Multi-cluster Mesh 環境下で同一の Service 名でアプリケーションをデプロイしている場合、対象 Service へのアクセスはラウンドロビンでアクセスされるため、無駄な大陸間トラフィックが発生しコスト・レスポンス的にも悪影響を及ぼすことになります。
そこで Istio Destination Rule の trafficPolicy
の outlierDetection
を用いることで、正常時には同一リージョンの GKE クラスタに対してトラフィックを流し、同一リージョンの Service が落ちている場合などの異常時にのみ Multi-cluster Mesh を組んでいる他のクラスタにトラフィックを流すことで可用性を担保することが出来ます。 ( Locality Balancing )
以下の例では sample
Namespace に配置しているワークロードから `helloworld.sample.svc.cluster.local に対するアクセスに対して Destination Rule を設定します。
この設定により、 helloworld.sample
が Multi-cluster Mesh 環境下の複数環境にデプロイされている場合に、上記の説明のように Locality Balancing を実現することが出来ます。
なお、 Locality Balancing を有効化するには以下の outlierDetection
のポリシーの任意の 1 つのポリシーを記載するだけで有効になります。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: helloworld
namespace: sample
spec:
host: helloworld.sample.svc.cluster.local
trafficPolicy:
outlierDetection:
consecutive5xxErrors: 7
interval: 5m
baseEjectionTime: 15m
splitExternalLocalOriginErrors: true
consecutiveLocalOriginFailures: 1
consecutiveGatewayErrors: 1
maxEjectionPercent: 10
minHealthPercent: 10
Discussion