<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Spinnaker – Spinnaker Architecture</title>
    <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/</link>
    <description>Recent content in Spinnaker Architecture on Spinnaker</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Spinnaker Architecture Overview</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/microservices-overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/microservices-overview/</guid>
      <description>
        
        
        &lt;h2 id=&#34;spinnaker-microservices&#34;&gt;Spinnaker microservices&lt;/h2&gt;
&lt;p&gt;Spinnaker is composed of a number of independent microservices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/deck&#34; target=&#34;_blank&#34;&gt;Deck&lt;/a&gt;
 is the browser-based UI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/gate&#34; target=&#34;_blank&#34;&gt;Gate&lt;/a&gt;
 is the API gateway.&lt;/p&gt;
&lt;p&gt;The Spinnaker UI and all api callers communicate with Spinnaker via Gate.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/orca&#34; target=&#34;_blank&#34;&gt;Orca&lt;/a&gt;
 is the orchestration engine.
It handles all ad-hoc operations and pipelines.
Read more on the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/community/contributing/code/developer-guides/service-overviews/orca/&#34;&gt;Orca Service Overview&lt;/a&gt;
.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/clouddriver&#34; target=&#34;_blank&#34;&gt;Clouddriver&lt;/a&gt;
 is responsible for all
mutating calls to the cloud providers and for indexing/caching all deployed
resources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/front50&#34; target=&#34;_blank&#34;&gt;Front50&lt;/a&gt;
 is used to persist the
metadata of applications, pipelines, projects and notifications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/rosco&#34; target=&#34;_blank&#34;&gt;Rosco&lt;/a&gt;
 is the bakery. It produces immutable
VM images (or image templates) for various cloud providers.&lt;/p&gt;
&lt;p&gt;It is used to produce machine images (for example 
&lt;a href=&#34;https://cloud.google.com/compute/docs/images&#34; target=&#34;_blank&#34;&gt;GCE
images&lt;/a&gt;
,

&lt;a href=&#34;http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html&#34; target=&#34;_blank&#34;&gt;AWS AMIs&lt;/a&gt;
,

&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/about-images&#34; target=&#34;_blank&#34;&gt;Azure VM images&lt;/a&gt;
).
It currently wraps 
&lt;a href=&#34;https://www.packer.io/&#34; target=&#34;_blank&#34;&gt;packer&lt;/a&gt;
, but also supports helm, kustomize and helmfile bakes for
kubernetes manifests.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/igor&#34; target=&#34;_blank&#34;&gt;Igor&lt;/a&gt;
 is used to trigger pipelines via
continuous integration jobs in systems like Jenkins and Travis CI, and it allows
Jenkins/Travis stages to be used in pipelines.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/echo&#34; target=&#34;_blank&#34;&gt;Echo&lt;/a&gt;
 is Spinnaker&amp;rsquo;s eventing bus.&lt;/p&gt;
&lt;p&gt;It supports sending notifications (e.g. Slack, email, SMS), and acts
on incoming webhooks from services like Github.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/fiat&#34; target=&#34;_blank&#34;&gt;Fiat&lt;/a&gt;
 is Spinnaker&amp;rsquo;s authorization
service.&lt;/p&gt;
&lt;p&gt;It is used to query a user&amp;rsquo;s access permissions for accounts, applications
and service accounts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/kayenta&#34; target=&#34;_blank&#34;&gt;Kayenta&lt;/a&gt;
 provides automated canary
analysis for Spinnaker.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/tree/main/keel&#34; target=&#34;_blank&#34;&gt;Keel&lt;/a&gt;
 powers 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/managed-delivery&#34;&gt;Managed Delivery&lt;/a&gt;
.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;system-dependencies&#34;&gt;System dependencies&lt;/h2&gt;
&lt;p&gt;This diagram shows which microservices depend on each other. The green
boxes represent &amp;ldquo;external&amp;rdquo; components, including the Deck UI, a single-page
JavaScript application that runs in your browser.&lt;/p&gt;
&lt;div class=&#34;mermaid&#34;&gt;
  
graph TB

deck(Deck) --&gt; gate;
api(Custom Script/API Caller) --&gt; gate(Gate);
gate --&gt; kayenta(Kayenta);
gate --&gt; orca(Orca);
gate --&gt; clouddriver(Clouddriver);
orca --&gt; clouddriver;
gate --&gt; rosco(Rosco);
orca --&gt; front50;
orca --&gt; rosco;
gate --&gt; front50(Front50);
gate --&gt; fiat(Fiat);
orca --&gt; kayenta;
clouddriver --&gt; fiat;
orca --&gt; fiat;
front50 --&gt; fiat;
echo(Echo) --&gt; orca;
echo --&gt; front50;
gate --&gt; echo;
gate --&gt; igor(Igor);
igor(Igor) --&gt; echo;

 keel(Keel) --&gt; clouddriver;
 keel --&gt; orca;
 keel --&gt; front50;
 keel --&gt; fiat;
 keel --&gt; echo;
 keel --&gt; igor;
 gate --&gt; keel;

classDef default fill:#d8e8ec,stroke:#39546a;
linkStyle default stroke:#39546a,stroke-width:1px,fill:none;

classDef external fill:#c0d89d,stroke:#39546a;
class deck,api external;


&lt;/div&gt;

&lt;p&gt;In the table below, A filled cell indicates that the system listed in the
heading of that column has a dependency on the system listed in the heading of
that row. As all Spinnaker services can be run in their own server group, it is
typical for services to resolve their dependencies via load balancers or
discovery systems (for example 
&lt;a href=&#34;https://github.com/Netflix/eureka&#34; target=&#34;_blank&#34;&gt;Eureka&lt;/a&gt;
 or

&lt;a href=&#34;https://www.consul.io/&#34; target=&#34;_blank&#34;&gt;Consul&lt;/a&gt;
).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/graph.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;port-mappings&#34;&gt;Port mappings&lt;/h2&gt;
&lt;p&gt;By default Spinnaker binds ports according to the following table&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Service&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Clouddriver&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;7002&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Deck&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;9000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Echo&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8089&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Fiat&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;7003&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Front50&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Gate&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8084&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Igor&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8088&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Kayenta&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8090&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Orca&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Rosco&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;8087&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Keel&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;7010&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Authentication &amp; Authorization</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/authz_authn/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/authz_authn/</guid>
      <description>
        
        
        &lt;p&gt;This is a high-level explanation of how authentication and authorization work within Spinnaker itself.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redis stores computed roles, default permissions, and roles from external systems&lt;/li&gt;
&lt;li&gt;Clouddriver gets known accounts&lt;/li&gt;
&lt;li&gt;Front50 gets known apps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;setup--configuration&#34;&gt;Setup &amp;amp; Configuration&lt;/h2&gt;
&lt;p&gt;For more information on actual use of this see 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/security/&#34;&gt;Setup Authentication and Authorization&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Life of a Bake</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/loab/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/loab/</guid>
      <description>
        
        
        &lt;div class=&#34;mermaid&#34;&gt;
  
sequenceDiagram

Title: Life of a Bake

participant Igor
participant Jenkins
participant ArtifactRepo
participant Echo
participant Front50
participant Orca
participant Rosco
participant Packer
participant Redis
participant Cloud

Echo-&gt;&gt;Front50: Build cache of pipeline triggers

Jenkins-&gt;&gt;ArtifactRepo: Publish newly-produced deployable asset (e.g. .deb/.rpm/.jar)
Note right of Jenkins: Archive artifacts

Igor-&gt;&gt;Jenkins: Poll Jenkins for completed builds
Igor-&gt;&gt;Echo: Publish completed build info to eventing bus

Echo-&gt;&gt;+Orca: Initiate pipeline execution based on matched trigger
Orca-&gt;&gt;Redis: Persist new execution
Note right of Orca: Orca uses the artifact details from the trigger to decorate the package name with version information
Orca-&gt;&gt;-Rosco: Request bake, passing package with exact version to install

Rosco-&gt;&gt;Redis: Persist new bake
Rosco-&gt;&gt;Packer: Initiate bake job, passing repo address (from config) and package/version

Packer-&gt;&gt;ArtifactRepo: Pull deployable asset from repo
Packer-&gt;&gt;Cloud: Publish machine image

Loop In background thread
Rosco-&gt;&gt;Packer: Poll until job completion
Rosco-&gt;&gt;Redis: Mark bake completed
end

Loop In worker thread
Orca-&gt;&gt;Rosco: Poll until task completion
Rosco-&gt;&gt;Redis: Query bake status
Orca-&gt;&gt;Redis: Update execution state
end


&lt;/div&gt;


      </description>
    </item>
    
    <item>
      <title>Docs: Life of a Deployment</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/load/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/architecture/load/</guid>
      <description>
        
        
        &lt;div class=&#34;mermaid&#34;&gt;
  
sequenceDiagram

Title: Life of a deployment

participant Deck
participant Gate
participant Orca
participant Clouddriver
participant Redis
participant Cloud

Deck-&gt;&gt;+Gate: Initiate Deploy orchestration
Gate-&gt;&gt;+Orca: Initiate Deploy orchestration
Orca-&gt;&gt;Redis: Persist new execution
Orca--&gt;&gt;-Gate: Reply with orchestration id
Gate--&gt;&gt;-Deck: Reply with orchestration id

Note right of Orca: In worker thread
Orca-&gt;&gt;+Clouddriver: Initiate Deploy operation
Clouddriver-&gt;&gt;Redis: Persist new task
Clouddriver--&gt;&gt;-Orca: Reply with task id

Clouddriver-xCloud: Mutating calls
activate Clouddriver
Clouddriver-&gt;&gt;Redis: Mark task completed
deactivate Clouddriver

Loop In worker thread
Orca-&gt;&gt;Clouddriver: Poll until task completion
Clouddriver-&gt;&gt;Redis: Query task status
Orca-&gt;&gt;Redis: Update execution state
end

Loop In worker thread
Orca-&gt;&gt;Clouddriver: Poll until instances are up
Clouddriver-&gt;&gt;Redis: Query server group/instance state from cache
Orca-&gt;&gt;Redis: Mark execution completed
end

Loop In background thread
Deck-&gt;&gt;Gate: Poll until orchestration completion
Gate-&gt;&gt;Orca: Query orchestration status
Orca-&gt;&gt;Redis: Query execution status
end

&lt;/div&gt;


      </description>
    </item>
    
  </channel>
</rss>
