{"id":88636,"date":"2019-02-20T10:00:45","date_gmt":"2019-02-20T08:00:45","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=88636"},"modified":"2019-02-19T13:08:20","modified_gmt":"2019-02-19T11:08:20","slug":"control-plane-envoy-identify-components","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html","title":{"rendered":"Guidance for Building a Control Plane for Envoy &#8211; Identify Components"},"content":{"rendered":"<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 will need components like:<\/p>\n<ul class=\"wp-block-list\">\n<li>Template engine<\/li>\n<li>Data store \/ VCS<\/li>\n<li>Per-service configurations<\/li>\n<li>An orchestrator to put the pieces together<\/li>\n<li>A way to deliver these to Envoy and hot restart<\/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<\/li>\n<li>A discovery registry + whatever integrations you need<\/li>\n<li>An abstract object model to describe your Envoy 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. For example, in Gloo we have the following components that drive the basic control plane:<\/p>\n<ul class=\"wp-block-list\">\n<li><code>Gloo<\/code> \u2013 an event-driven component responsible for 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 work in concert to build the appropriate Envoy configuration served through xDS. Gloo implements a lot of its power (discovery capabilities, semantic understanding of a function, etc) by using these losely 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.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/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<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.<\/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\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/blog.christianposta.com\/guidance-for-building-a-control-plane-for-envoy-identify-components\/\" target=\"_blank\" rel=\"noopener\">Guidance for Building a Control Plane for Envoy &#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>Identify which components you need for your control plane 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 will need components like: &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-88636","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 - Identify Components - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Control Plane? Check our article explaining how to Build a Control Plane for Envoy in order 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\/02\/control-plane-envoy-identify-components.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 - Identify Components - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Control Plane? Check our article explaining how to Build a Control Plane for Envoy in order to identify components\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.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-02-20T08:00:45+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=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html\"},\"author\":{\"name\":\"Christian Posta\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/95b83ea6815f602e6feade679134c6ed\"},\"headline\":\"Guidance for Building a Control Plane for Envoy &#8211; Identify Components\",\"datePublished\":\"2019-02-20T08:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html\"},\"wordCount\":730,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.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\\\/02\\\/control-plane-envoy-identify-components.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html\",\"name\":\"Guidance for Building a Control Plane for Envoy - Identify Components - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2019-02-20T08:00:45+00:00\",\"description\":\"Interested to learn about Control Plane? Check our article explaining how to Build a Control Plane for Envoy in order to identify components\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-identify-components.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\\\/02\\\/control-plane-envoy-identify-components.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 &#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 - Identify Components - Java Code Geeks","description":"Interested to learn about Control Plane? Check our article explaining how to Build a Control Plane for Envoy in order 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\/02\/control-plane-envoy-identify-components.html","og_locale":"en_US","og_type":"article","og_title":"Guidance for Building a Control Plane for Envoy - Identify Components - Java Code Geeks","og_description":"Interested to learn about Control Plane? Check our article explaining how to Build a Control Plane for Envoy in order to identify components","og_url":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-02-20T08:00:45+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":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html"},"author":{"name":"Christian Posta","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/95b83ea6815f602e6feade679134c6ed"},"headline":"Guidance for Building a Control Plane for Envoy &#8211; Identify Components","datePublished":"2019-02-20T08:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html"},"wordCount":730,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.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\/02\/control-plane-envoy-identify-components.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html","url":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html","name":"Guidance for Building a Control Plane for Envoy - Identify Components - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2019-02-20T08:00:45+00:00","description":"Interested to learn about Control Plane? Check our article explaining how to Build a Control Plane for Envoy in order to identify components","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-identify-components.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\/02\/control-plane-envoy-identify-components.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 &#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\/88636","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=88636"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/88636\/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=88636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=88636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=88636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}