{"id":88735,"date":"2019-02-22T16:00:55","date_gmt":"2019-02-22T14:00:55","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=88735"},"modified":"2019-02-23T16:58:40","modified_gmt":"2019-02-23T14:58:40","slug":"control-plane-envoy-deployment-tradeoffs","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html","title":{"rendered":"Guidance for Building a Control Plane for Envoy &#8211; Deployment Tradeoffs"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Deploying control plane components<\/h2>\n<p>Once you\u2019ve built and designed your control plane, you\u2019ll want to decide exactly how its components get deployed. You have some choices here from co-locate control plane with the data plane all the way to centralize your control plane. There is a middle ground here as well: deploy some components co-located with the control plane and keep some centralized. Let\u2019s take a look.<\/p>\n<p>In the Istio service-mesh project, the control plane components are deployed and run centralized and managed separately from the data plane. That is, the data plane runs with the applications and handles all of the application traffic and communicates with the control plane via xDS APIs over gRPC streaming. The control-plane components generally run in their own namespace and are ideally locked down from unexpected usage.<\/p>\n<p>The Gloo project follows a similar deployment model. The control-plane components are decoupled from the data plane and the Envoy data plane uses xDS gRPC streaming to collect configuration about listeners, routes, and clusters, etc. You could deploy the components co-located with the dataplane proxies with Gloo, but that\u2019s discouraged. We\u2019ll take a look at some of the tradeoffs in a bit.<\/p>\n<p>Lastly, we take a look at co-deploying control plane components with the data plane. In the Contour project, by default, control plane components are deployed with the data plane though <a href=\"https:\/\/github.com\/heptio\/contour\/blob\/master\/docs\/deploy-seperate-pods.md\">there is an option to split up the deployment<\/a>. Contour actually uses leverages CRDs or Ingress resources for its configuration, so all of the config-file handling and watching happens in Kubernetes. The xDS service, however, is co-deployed with the dataplane (again, that\u2019s by default \u2013 you can split them).<\/p>\n<p>When <a href=\"https:\/\/www.youtube.com\/watch?v=a1tXFUrqt5M&amp;list=PLj6h78yzYM2PF_iYEBntfR0m4KAZET18Q&amp;index=14&amp;t=0s\">eBay built their control plane for their deployment of Envoy<\/a>, they also co-deployed parts of their control plane (the discovery pieces) with their data plane. They basically wrote a controller to watch CRDs, Ingress, and Service resources and then generate config maps. These config maps would then be consumed by the <code>discovery<\/code> container running with the Pod and served to Envoy.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/ebay-control-plane-1024x296.png\" alt=\"Deployment Tradeoffs\" class=\"wp-image-88759\" width=\"768\" height=\"222\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/ebay-control-plane-1024x296.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/ebay-control-plane-300x87.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/ebay-control-plane-768x222.png 768w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/ebay-control-plane.png 2008w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/figure>\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/double-click-ebay-control-plane-1024x322.png\" alt=\"Deployment Tradeoffs\" class=\"wp-image-88760\" width=\"768\" height=\"242\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/double-click-ebay-control-plane-1024x322.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/double-click-ebay-control-plane-300x94.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/double-click-ebay-control-plane-768x241.png 768w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2019\/02\/double-click-ebay-control-plane.png 1688w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/figure>\n<h2 class=\"wp-block-heading\">Should I keep control planes separated out?<\/h2>\n<p>There are pros and cons to the various approaches. <a href=\"https:\/\/github.com\/solo-io\/gloo\/graphs\/contributors\">The Gloo team<\/a> believes keeping the control plane separate is the right choice for most use cases, but that there could be optimization or extenuating reasons why you may co-locate some of the components.<\/p>\n<p>If Envoy is the heart and soul of your L7 networking, the control plane is the brains. The control plane necessarily will have different characteristics when it comes to:<\/p>\n<ul class=\"wp-block-list\">\n<li>Security \u2013 If somehow your dataplane gets compromised, you\u2019re in a world of hurt; you definitely do NOT want to exacerbate your situation by giving up control to the rest of your applications and network by allowing your control plane to become compromised. Additionally, a control plane could be dealing with distribution of keys, certificates, or other secrets that should be kept separate from the data plane.<\/li>\n<li>Scaling \u2013 You probably will end up scaling your data plane and control plane differently.<\/li>\n<li>Grouping \u2013 You may have different roles and responsibilities of the data plane; for example, you may have data plane Envoys at the edge which would need a different security and networking posture than a pool of shared proxies for your microservices vs any sidecar proxies you may deploy. Having the control plane co-located with the data plane makes it more difficult to keep data and configuration separate<\/li>\n<li>Resource usage \u2013 You may wish to assign or throttle certain resource usage depending on your components. For example, your data plane may be more compute intensive vs the control plane (which may be more memory intensive) and you\u2019d use different resource limits to fulfill those roles. Keeping them separate allows you more fine-grained resource pool options than just lumping them together. Additionally, if the control plane and data plane are collocated and competing for the same resources, you can get odd tail latencies which are hard to diagnose<\/li>\n<li>Deployment\/lifecycle \u2013 You may wish to patch, upgrade, or otherwise service your control plane independently of your data plane<\/li>\n<li>Storage \u2013 If your control plane requires any kind of storage, you can configure this separately and without the data plane involved if you separate out your components<\/li>\n<li>status \u2013 understanding the state of your control plane<\/li>\n<\/ul>\n<p>For these reasons, it makes sense to keep the control plane at arms length and decoupled from the data plane.<\/p>\n<h3 class=\"wp-block-heading\">Takeaway<\/h3>\n<p>Consider the runtime components that make up your control plane and prefer to leave them deployed in a decoupled architecture. Co-locating may make sense, but don\u2019t prematurely optimize for this.<\/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\/guidance-for-building-a-control-plane-for-envoy-deployment-tradeoffs\/\" target=\"_blank\" rel=\"noopener noreferrer\">Guidance for Building a Control Plane for Envoy &#8211; Deployment Tradeoffs<\/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>Deploying control plane components Once you\u2019ve built and designed your control plane, you\u2019ll want to decide exactly how its components get deployed. You have some choices here from co-locate control plane with the data plane all the way to centralize your control plane. There is a middle ground here as well: deploy some components co-located &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-88735","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 - Deployment Tradeoffs - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Deployment Tradeoffs? Check our article explaining how to deploy control plane components for envoy.\" \/>\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-deployment-tradeoffs.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 - Deployment Tradeoffs - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Deployment Tradeoffs? Check our article explaining how to deploy control plane components for envoy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.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-22T14:00:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-02-23T14:58:40+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-deployment-tradeoffs.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html\"},\"author\":{\"name\":\"Christian Posta\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/95b83ea6815f602e6feade679134c6ed\"},\"headline\":\"Guidance for Building a Control Plane for Envoy &#8211; Deployment Tradeoffs\",\"datePublished\":\"2019-02-22T14:00:55+00:00\",\"dateModified\":\"2019-02-23T14:58:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html\"},\"wordCount\":814,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.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-deployment-tradeoffs.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html\",\"name\":\"Guidance for Building a Control Plane for Envoy - Deployment Tradeoffs - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2019-02-22T14:00:55+00:00\",\"dateModified\":\"2019-02-23T14:58:40+00:00\",\"description\":\"Interested to learn about Deployment Tradeoffs? Check our article explaining how to deploy control plane components for envoy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/02\\\/control-plane-envoy-deployment-tradeoffs.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-deployment-tradeoffs.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; Deployment Tradeoffs\"}]},{\"@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 - Deployment Tradeoffs - Java Code Geeks","description":"Interested to learn about Deployment Tradeoffs? Check our article explaining how to deploy control plane components for envoy.","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-deployment-tradeoffs.html","og_locale":"en_US","og_type":"article","og_title":"Guidance for Building a Control Plane for Envoy - Deployment Tradeoffs - Java Code Geeks","og_description":"Interested to learn about Deployment Tradeoffs? Check our article explaining how to deploy control plane components for envoy.","og_url":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-02-22T14:00:55+00:00","article_modified_time":"2019-02-23T14:58:40+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-deployment-tradeoffs.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html"},"author":{"name":"Christian Posta","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/95b83ea6815f602e6feade679134c6ed"},"headline":"Guidance for Building a Control Plane for Envoy &#8211; Deployment Tradeoffs","datePublished":"2019-02-22T14:00:55+00:00","dateModified":"2019-02-23T14:58:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html"},"wordCount":814,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.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-deployment-tradeoffs.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html","url":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html","name":"Guidance for Building a Control Plane for Envoy - Deployment Tradeoffs - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2019-02-22T14:00:55+00:00","dateModified":"2019-02-23T14:58:40+00:00","description":"Interested to learn about Deployment Tradeoffs? Check our article explaining how to deploy control plane components for envoy.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/02\/control-plane-envoy-deployment-tradeoffs.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-deployment-tradeoffs.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; Deployment Tradeoffs"}]},{"@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\/88735","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=88735"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/88735\/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=88735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=88735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=88735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}