Awesome
<p align="center"> <img src="https://user-images.githubusercontent.com/35096265/65359707-33216900-dbb2-11e9-8622-dc76c3882c02.png" width="500"> </p>Admiral provides automatic configuration and service discovery for multicluster Istio service mesh
Istio has a very robust set of multi-cluster capabilities. Managing this configuration across multiple clusters at scale is challenging. Admiral takes an opinionated view on this configuration and provides automatic provisioning and syncing across clusters.
Admiral defines two custom resources, the Dependency and GlobalTrafficPolicy, which are used to configure ServiceEntries, VirtualServices, and DestinationRules on each cluster for each cross-cluster service. This removes the complexity for developers and mesh operators.
Docs
Who uses Admiral?
Organizations below are officially using Admiral. Please send a PR with your organization name if you are using Admiral.
Blogs and Presentations
-
Multicluster Istio configuration and service discovery using Admiral
-
Stitching a Service Mesh Across Hundreds of Discrete Networks
-
Scaling Service Mesh to an Enterprise Microservices Ecosystem
Collaboration and Communication
Note:
This channel is under Istio slack org, please fill out this form to get access to Istio slack.
Local Development
Refer to Local Development Setup
Contributing
Refer to Contributing doc
Release Cadence
Details can be found here
Admiral Sequence Diagram
Legend:
SE - Istio ServiceEntry
VS - Istio VirtualService
K8s API - Kubernetes API Server
GTP - Admiral GlobalTrafficPolicy
sequenceDiagram
autonumber 1
Service/VirtualService Handler->>+Rollout/Deployment Handler: Add/Update/Delete events
autonumber 1
GTP/OutlierDetection Handler->>Update All Resources: Add/Update
autonumber 1
DependencyRecord Handler->>Update All Resources: Add/Update
autonumber 1
Rollout/Deployment Handler->>Update All Resources: Add/Update
autonumber 2
Update All Resources->>RemoteControllers: Fetch All Cluster Controllers
rect rgb(255, 255, 220)
loop
Update All Resources->>K8sAPI 1..N: For each cluster, get corresponding service object
K8sAPI 1..N-->>Update All Resources: Continue if service does not exist for deployment/rollout
K8sAPI 1..N-->>Update All Resources: Build list of source services
end
end
rect rgb(255, 255, 220)
loop
Update All Resources->>K8sAPI 1..N: Derive SE from each service in the list
Update All Resources->>GTP/OutlierDetection Cache: Derive DR from GTP/OutlierDetection
rect rgb(204, 255, 204)
loop
Update All Resources->>K8sAPI 1..N: Add/Update SE/DR/VS in source clusters
Update All Resources->>DynamoDB: Add/Update WorkloadData for source clusters
end
end
end
end
Update All Resources->>DependencyCache: Fetch dependent clusters
rect rgb(204, 255, 204)
loop
Update All Resources->>K8sAPI 1..N: Add/Update SE/DR/VS in dependent clusters
Update All Resources->>DynamoDB: Add/Update WorkloadData for dependent clusters
end
end