/admiral

Admiral provides automatic configuration generation, syncing and service discovery for multicluster Istio service mesh

Primary LanguageGoApache License 2.0Apache-2.0

CircleCI codecov

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.

alt text

Admiral Demo

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

Collaboration and Communication

Admiral Slack Channel - Note: This channel is under Istio slack org, please fill out this form to get access to Istio slack.

Contributing

Refer to Contributing doc

Release Cadence

Details can be found here

Admiral sequence diagram

sequenceDiagram
		autonumber 1
    Service/VirtualService Handler->>+Rollout/Deployment Handler: Add/Update/Delete events
    loop
			autonumber 1
			GTP Handler->>GTP Handler: Add/Update/Delete events
    end
		autonumber 1
    GTP Handler ->> ServiceEntry Handler: Add/Update
		loop
				autonumber 1
        Rollout/Deployment Handler->>Rollout/Deployment Handler: Add/Delete events of rollout/deployment
    end
		autonumber 1
		Rollout/Deployment Handler->>ServiceEntry Handler: Add/Update
    autonumber 2
    ServiceEntry Handler->>RemoteControllers: Fetch All Cluster Controllers
		rect rgb(255, 255, 220)
	    loop
		    ServiceEntry Handler->>K8sAPI 1..N: For each cluster, get corresponding service object
				K8sAPI 1..N-->>ServiceEntry Handler: Continue if service does not exist for deployment/rollout
				K8sAPI 1..N-->>ServiceEntry Handler: Build list of source services
	    end
		end
	  rect rgb(255, 255, 220)
	    loop
				ServiceEntry Handler->>K8sAPI 1..N: Derive SE from each service in the list
				ServiceEntry Handler->>GTP Cache: Derive DR from GTP
			  rect rgb(204, 255, 204)
			    loop
				    ServiceEntry Handler->>K8sAPI 1..N: Add/Update SE/DR in source clusters
					end
		    end
	    end
		end

    ServiceEntry Handler->>DependencyCache: Fetch dependent clusters
		rect rgb(204, 255, 204)
	    loop
				ServiceEntry Handler->>K8sAPI 1..N: Add/Update SE/DR in dependent clusters
			end
		end