{"id":89258,"date":"2019-03-11T07:00:23","date_gmt":"2019-03-11T05:00:23","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=89258"},"modified":"2019-03-08T11:55:00","modified_gmt":"2019-03-08T09:55:00","slug":"control-plane-envoy-identify-components-2","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html","title":{"rendered":"Guidance for Building a Control Plane for Envoy Part 2 &#8211; Identify Components"},"content":{"rendered":"<p>This is part 2 of a <a href=\"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-manage-envoy-proxy-edge.html\">series<\/a> that explores building a control plane for Envoy Proxy.<\/p>\n<p>In this blog series, we\u2019ll take a look at the following areas:<\/p>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-manage-envoy-proxy-edge.html\">Adopting a mechanism to dynamically update Envoy\u2019s routing, service discovery, and other configuration<\/a><\/li>\n<li>Identifying what components make up your control plane, including backing stores, service discovery APIs, security components, et. al. <em>(this entry)<\/em><\/li>\n<li><a href=\"https:\/\/blog.christianposta.com\/envoy\/guidance-for-building-a-control-plane-for-envoy-domain-specific-configuration-api\/\">Establishing any domain-specific configuration objects and APIs that best fit your usecases and organization<\/a><\/li>\n<li>Thinking of how best to make your control plane pluggable where you need it<\/li>\n<li>Options for deploying your various control-plane components<\/li>\n<li>Thinking through a testing harness for your control plane<\/li>\n<\/ul>\n<p>In the <a href=\"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-manage-envoy-proxy-edge.html\">previous entry to this series<\/a> we explored dynamically configuring Envoy which is an important part of running Envoy in a cloud-native environment. In this entry, we take a look at the cooperating components you may need to support your control plane.<\/p>\n<h2 class=\"wp-block-heading\">Identify which components you need for your control plane<\/h2>\n<p>As the spectrum of operating environments varies wildly, so too could the components needed to implement a control plane for Envoy. For example, at one extreme, if you have Envoy files statically generated at build time and shipped to your Envoy, you may need components like:<\/p>\n<ul class=\"wp-block-list\">\n<li>Template engine<\/li>\n<li>Data store \/ VCS for the values that go into the templates<\/li>\n<li>Any service-specific configurations that may\/may not be stored with the services\/applications<\/li>\n<li>An orchestrator to put the pieces together<\/li>\n<li>A way to deliver these to Envoy<\/li>\n<li>A way to trigger a reload\/hot-restart of the configuration files<\/li>\n<\/ul>\n<p>On the other hand, if you opt to use the gRPC streaming xDS implementation, you\u2019ll need:<\/p>\n<ul class=\"wp-block-list\">\n<li>The core xDS service interface and an implementation<\/li>\n<li>A component to handle registering\/de-registering services into the service registry<\/li>\n<li>A service registry<\/li>\n<li>An abstract object model to describe your Envoy configuration (optional)<\/li>\n<li>A data store to hold the configuration<\/li>\n<\/ul>\n<p>Other ancillary components you\u2019d most likely need to support operations of Envoy:<\/p>\n<ul class=\"wp-block-list\">\n<li>Certificate\/CA store<\/li>\n<li>Statistics collection engine<\/li>\n<li>Distributed tracing backend\/engine<\/li>\n<li>External authentication<\/li>\n<li>Rate limiting services<\/li>\n<\/ul>\n<p>In general, you\u2019ll want to consider building your control plane so that the components run independently and can loosely collaborate to provide the needs of the control plane. The last thing you want to do is support a microservices deployment with Envoy by deploying a monolith control plane. For example, in the <a href=\"https:\/\/gloo.solo.io\">open-source Gloo project<\/a> we have the following components that drive the control plane:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"522\" height=\"373\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/gloo-control-plane.png\" alt=\"Identify Components\" class=\"wp-image-89288\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/gloo-control-plane.png 522w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/gloo-control-plane-300x214.png 300w\" sizes=\"(max-width: 522px) 100vw, 522px\" \/><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li><code>Gloo<\/code> \u2013 an event-driven component responsible for generating configuration for and serving the core xDS services and configuration of custom Envoy filters<\/li>\n<li><code>Discovery<\/code> \u2013 an optional component that knows how to work with service discovery services (Consul, Kubernetes, etc) to discover and advertise upstream clusters and endpoints. It can also discover REST endpoints (using swagger), gRPC functions (based on gRPC reflection), and AWS\/GCP\/Azure cloud functions. This component creates configuration (on Kubernetes, it\u2019s represented with <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/api-extension\/custom-resources\/\">CustomResourceDefinitions<\/a>) that the <code>Gloo<\/code> component can use to build the canonical Envoy configurations represented through xDS. We\u2019ll see more in later sections of this series of blogs.<\/li>\n<li><code>Gateway<\/code> \u2013 This component allows users to use a more comfortable object model to configure an Envoy Proxy based on its role (ie, edge gateway, shared proxy, knative cluster ingress, etc). This part of the control plane also generates configuration that the <code>Gloo<\/code> control plane can use to generate Envoy configuration through xDS<\/li>\n<\/ul>\n<p>As you can see these base components are deployed as services that work in concert to build the appropriate Envoy configuration served through xDS. Gloo implements a lot of its powerful discovery capabilities, semantic understanding of a function, etc by using these loosely coordinating control-plane components that work to serve Envoy configuration. When Gloo is deployed into Kubernetes, the storage and configuration representations take on a \u201ckube-native\u201d feel: everything is represented by <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/api-extension\/custom-resources\/\">Custom Resource Definitions<\/a>. Specifically, all of the user-facing configurations are CRDs as well as the core configuration that drive the xDS endpoints. You can just use the Kubernetes API and kubectl to interact with Gloo. However, we also provide a <code>glooctl<\/code> <a href=\"https:\/\/gloo.solo.io\/cli\/\">CLI tool to simplify interactions with the Gloo control plane<\/a> \u2013 specifically so you don\u2019t have to fuss around with all the YAML if you don\u2019t want to. In this way, Gloo is very focused on developer experience and hacking YAML for developers (or anyone?) can be quite tedious.<\/p>\n<p>Istio also takes a similar approach of using loosely coordinating control-plane components that are configured through Kubernetes CRDs. Istio\u2019s control plane is made up of:<\/p>\n<ul class=\"wp-block-list\">\n<li><code>Istio Pilot<\/code> \u2013 the core xDS service<\/li>\n<li><code>Istio Galley<\/code> \u2013 a configuration\/storage abstraction<\/li>\n<li><code>Istio Citadel<\/code> \u2013 a CA\/certificate engine<\/li>\n<li><code>Istio Telemetry<\/code> \u2013 a sink for telemetry signals<\/li>\n<li><code>Istio Policy<\/code> \u2013 a pluggable policy engine<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/istio-control-plane.png\" alt=\"Identify Components\" class=\"wp-image-89289\" width=\"653\" height=\"214\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/istio-control-plane.png 871w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/istio-control-plane-300x98.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/istio-control-plane-768x251.png 768w\" sizes=\"(max-width: 653px) 100vw, 653px\" \/><\/figure>\n<\/div>\n<p>Heptio Contour actually has only two components that makes up its control plane, however, since it\u2019s based solely on Kubernetes, it actually leverages a lot of built-in Kubernetes facilities like the Kubernetes API\/Storage, and CRDs for driving configuration.<\/p>\n<ul class=\"wp-block-list\">\n<li><code>contour<\/code> server<\/li>\n<li><code>init-container<\/code> bootstrap<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"774\" height=\"184\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/contour-control-plane.png\" alt=\"Identify Components\" class=\"wp-image-89290\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/contour-control-plane.png 774w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/contour-control-plane-300x71.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/03\/contour-control-plane-768x183.png 768w\" sizes=\"(max-width: 774px) 100vw, 774px\" \/><\/figure>\n<\/div>\n<p>Contour uses an <code>init-container<\/code> to generate a static bootstrap configuration file for Envoy that tells where to find the xDS services. The xDS server is the second component in the control plane and is by default deployed alongside the data plane with an option to deploy separately. We\u2019ll look at this architecture and its tradeoffs in part 5 of this series \u201cDeploying control-plane components\u201d.<\/p>\n<h3 class=\"wp-block-heading\">Takeaway<\/h3>\n<p>Identify the core components you\u2019ll need for your control plane. Don\u2019t try to build a single, monolithic control plane abstraction as that will become a nightmare to maintain and update. Build the components you want for your control plane in a loosely coupled architecture. If you can build on top of Kubernetes, then do so: <a href=\"https:\/\/medium.com\/@allingeek\/kubernetes-as-a-common-ops-data-plane-f8f2cf40cd59\">Kubernetes provides a very powerful integration data plane<\/a> for operating distributed systems, such as an Envoy control plane. If you do build a control plane on top of Kubernetes, you should leverage <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/api-extension\/custom-resources\/\">Custom Resource Definitions<\/a> to drive configuration of your control plane. Some folks have chosen to build their control plane using <a href=\"https:\/\/github.com\/kubernetes\/ingress-nginx\/blob\/master\/docs\/user-guide\/nginx-configuration\/annotations.md\">Ingress definitions<\/a>, <a href=\"https:\/\/www.getambassador.io\/reference\/configuration\/\">service annotations<\/a>, or <a href=\"https:\/\/www.youtube.com\/watch?v=a1tXFUrqt5M&amp;list=PLj6h78yzYM2PF_iYEBntfR0m4KAZET18Q&amp;index=14&amp;t=0s\">configuration maps<\/a>. These may have been appropriate work-arounds before Kubernetes CRDs were available but at this point you should avoid those paths and stick with CRDs. Like <a href=\"https:\/\/kubernetespodcast.com\/episode\/041-ingress\/\">Tim Hockin (founder of Kubernetes) said on a recent podcast<\/a>, annotations for driving an Ingress Gateway resource is a poor choice.<\/p>\n<p>The next entry in this series is actually already posted: <a href=\"https:\/\/blog.christianposta.com\/envoy\/guidance-for-building-a-control-plane-for-envoy-domain-specific-configuration-api\/\">Guidance for Building a Control Plane for Envoy Part 3 &#8211; Domain Specific Configuration API<\/a><\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Christian Posta, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/blog.christianposta.com\/envoy\/guidance-for-building-a-control-plane-for-envoy-identify-components\/\" target=\"_blank\" rel=\"noopener noreferrer\">Guidance for Building a Control Plane for Envoy Part 2 &#8211; Identify Components<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This is part 2 of a series that explores building a control plane for Envoy Proxy. In this blog series, we\u2019ll take a look at the following areas: Adopting a mechanism to dynamically update Envoy\u2019s routing, service discovery, and other configuration Identifying what components make up your control plane, including backing stores, service discovery APIs, &hellip;<\/p>\n","protected":false},"author":204,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-89258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Guidance for Building a Control Plane for Envoy Part 2 - Identify Components - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Identify Components? Check our article about Building a Control Plane for Envoy. Today we&#039;ll see how to identify components\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guidance for Building a Control Plane for Envoy Part 2 - Identify Components - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Identify Components? Check our article about Building a Control Plane for Envoy. Today we&#039;ll see how to identify components\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-11T05:00:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Christian Posta\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/christianposta\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Christian Posta\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html\"},\"author\":{\"name\":\"Christian Posta\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/95b83ea6815f602e6feade679134c6ed\"},\"headline\":\"Guidance for Building a Control Plane for Envoy Part 2 &#8211; Identify Components\",\"datePublished\":\"2019-03-11T05:00:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html\"},\"wordCount\":1110,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html\",\"name\":\"Guidance for Building a Control Plane for Envoy Part 2 - Identify Components - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2019-03-11T05:00:23+00:00\",\"description\":\"Interested to learn about Identify Components? Check our article about Building a Control Plane for Envoy. Today we'll see how to identify components\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/03\\\/control-plane-envoy-identify-components-2.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Guidance for Building a Control Plane for Envoy Part 2 &#8211; Identify Components\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/95b83ea6815f602e6feade679134c6ed\",\"name\":\"Christian Posta\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7faea4e159f6ef9865e5819a901aaa74d4dee9e254741d8685c097dd691bc04a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7faea4e159f6ef9865e5819a901aaa74d4dee9e254741d8685c097dd691bc04a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7faea4e159f6ef9865e5819a901aaa74d4dee9e254741d8685c097dd691bc04a?s=96&d=mm&r=g\",\"caption\":\"Christian Posta\"},\"description\":\"Christian is a Principal Consultant at FuseSource specializing in developing enterprise software applications with an emphasis on software integration and messaging. His strengths include helping clients build software using industry best practices, Test Driven Design, ActiveMQ, Apache Camel, ServiceMix, Spring Framework, and most importantly, modeling complex domains so that they can be realized in software. He works primarily using Java and its many frameworks, but his favorite programming language is Python. He's in the midst of learning Scala and hopes to contribute to the Apache Apollo project.\",\"sameAs\":[\"http:\\\/\\\/www.christianposta.com\\\/blog\\\/\",\"http:\\\/\\\/www.linkedin.com\\\/pub\\\/christian-posta\\\/15\\\/412\\\/199\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/christianposta\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Christian-Posta\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Guidance for Building a Control Plane for Envoy Part 2 - Identify Components - Java Code Geeks","description":"Interested to learn about Identify Components? Check our article about Building a Control Plane for Envoy. Today we'll see how to identify components","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html","og_locale":"en_US","og_type":"article","og_title":"Guidance for Building a Control Plane for Envoy Part 2 - Identify Components - Java Code Geeks","og_description":"Interested to learn about Identify Components? Check our article about Building a Control Plane for Envoy. Today we'll see how to identify components","og_url":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-03-11T05:00:23+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Christian Posta","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/christianposta","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Christian Posta","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html"},"author":{"name":"Christian Posta","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/95b83ea6815f602e6feade679134c6ed"},"headline":"Guidance for Building a Control Plane for Envoy Part 2 &#8211; Identify Components","datePublished":"2019-03-11T05:00:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html"},"wordCount":1110,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html","url":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html","name":"Guidance for Building a Control Plane for Envoy Part 2 - Identify Components - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2019-03-11T05:00:23+00:00","description":"Interested to learn about Identify Components? Check our article about Building a Control Plane for Envoy. Today we'll see how to identify components","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2019\/03\/control-plane-envoy-identify-components-2.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Guidance for Building a Control Plane for Envoy Part 2 &#8211; Identify Components"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/95b83ea6815f602e6feade679134c6ed","name":"Christian Posta","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7faea4e159f6ef9865e5819a901aaa74d4dee9e254741d8685c097dd691bc04a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7faea4e159f6ef9865e5819a901aaa74d4dee9e254741d8685c097dd691bc04a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7faea4e159f6ef9865e5819a901aaa74d4dee9e254741d8685c097dd691bc04a?s=96&d=mm&r=g","caption":"Christian Posta"},"description":"Christian is a Principal Consultant at FuseSource specializing in developing enterprise software applications with an emphasis on software integration and messaging. His strengths include helping clients build software using industry best practices, Test Driven Design, ActiveMQ, Apache Camel, ServiceMix, Spring Framework, and most importantly, modeling complex domains so that they can be realized in software. He works primarily using Java and its many frameworks, but his favorite programming language is Python. He's in the midst of learning Scala and hopes to contribute to the Apache Apollo project.","sameAs":["http:\/\/www.christianposta.com\/blog\/","http:\/\/www.linkedin.com\/pub\/christian-posta\/15\/412\/199","https:\/\/x.com\/http:\/\/twitter.com\/christianposta"],"url":"https:\/\/www.javacodegeeks.com\/author\/Christian-Posta"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/89258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/204"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=89258"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/89258\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=89258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=89258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=89258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}