tldr
GKEでIstioやってみました
Let's get started
terraform でクラスタ立ち上げ
istioctlのインストール
export ISTIO_VERSION=1.1.2
curl -L -O https://github.com/istio/istio/releases/download//istio--osx.tar.gz
tar xzf istio--osx.tar.gz
cp istio-/bin/istioctl /usr/local/bin/
istioctl version
同じバージョンをインストールする
サンプルアプリをインストール
機能を試す
Visualizing Your Mesh
Istio の理解
トラフィックの管理
service registry
サービスメッシュを構成する各アプリケーションやエンドポイント一覧が保存されているところ。kubernetesで言うところのサービスや外部のエンドポイントで構成される。
Virtual services
仮想的なサービス。ここでサービスとはkubernetesのサービスと概念は一緒。フィルターやルーティングを可能にする。サイドカーであるEnvoyが実際にはやる。
Routing rules
Virtual servicesに設定するルールのこと。
Destination rules
Virtual serviceが入ってくる通信に対して働く一方、Destination rulesは出ていく通信をインターセプトするルール。
Gateways
Envoyだけで構成されるコンポーネント。Ingress/Egressの役割を果たす。例えば、外部からリクエストが来た時にGatewayでまず受け取ってルーティングするときに使う。
Service entries
外部のエンドポイントをService registryに登録するための箱。本来、外部サービスはサービスメッシュの管理下ではないが、ルーティングやサーキットブレイカーを導入する際に管理下にないと困る。だからService entryとして認識させる。
Sidecars
Network resilience and testing
Virtual serviceやDestination ruleに設定を追加することで以下のような機能を実現できる。
Virtual services
- Timeouts
- Retries
- Fault injection
Destination rules
- Circuit breakers
Architecture
Istioのトラフィック管理は以下の2つのコンポーネントで実現される。
- Pilot: the core traffic management component.
- Envoy proxies: which enforce configurations and policies set through Pilot.
大きく分けて3つの機能を提供する。
- Service discovery
- Load balancing
- Traffic routing and control
Pilot
Envoy proxies
Service discovery and load balancing
ポリシーとセキュリティ
Istio identity
以下のIdentityを認識する。
- Kubernetes: Kubernetes service account
- GKE/GCE: may use GCP service account
- GCP: GCP service account
- AWS: AWS IAM user/role account
- On-premises (non-Kubernetes): user account, custom service account, service name, Istio service account, or GCP service account. The custom service account refers to the existing service account just like the identities that the customer’s Identity Directory manages.
Istio security vs SPIFFE
SPIFEE: サービス間認証の仕様
PKI
Kubernetes scenario
On-premises machines scenario
Node agent in Kubernetes
Best practices
Deployment guidelines
Example
How Citadel determines whether to create Service Account secrets
Authentication
Mutual TLS authentication
Permissive mode
Secure naming
Authentication architecture
Authentication policies
Policy storage scope
Target selectors
Transport authentication
Origin authentication
Principal binding
Updating authentication policies
Authorization
Authorization architecture
Enabling authorization
Authorization policy
ServiceRole
ServiceRoleBinding
Using Istio authorization on plain TCP protocols
Authorization permissive mode
Using other authorization mechanisms
Observability
- Metrics
- Distributed Traces
- Access Logs
Metrics
Proxy-level Metrics
Service-level Metrics
Control Plane Metrics
Distributed Traces
分散トレーシングは結局アプリケーション側でheaderを電波させる必要がある。
なぜ?
Istioサイドカーは、関連するアプリケーションインスタンスのインバウンドとアウトバウンドの両方のリクエストを処理しますが、アウトバウンドリクエストをそれらを引き起こしたインバウンドリクエストに暗黙的に関連付ける方法はない。