{"id":7809,"date":"2021-09-21T17:34:22","date_gmt":"2021-09-21T12:04:22","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=7809"},"modified":"2026-01-08T12:39:13","modified_gmt":"2026-01-08T07:09:13","slug":"learn-how-to-control-consul-resources-using-acl","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2021\/09\/21\/learn-how-to-control-consul-resources-using-acl\/","title":{"rendered":"Learn How to Control Consul Resources Using ACL"},"content":{"rendered":"\r\n<p class=\"has-text-align-justify\">When we talk about service mesh, consul is one of the open-source tools which is widely used as a service discovery for multiple ephemeral or non-ephemeral resources. There are multiple consuls [service mesh] alternatives which are used as a service discovery but we won&#8217;t be discussing service discovery &amp; alternative comparisons here.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">If we talk about consul, it is not only used as a service mesh but also provides multiple options and features other than a service mesh. Yes, you heard it right, this lad can do lots of things that we didn&#8217;t know or haven&#8217;t explored yet.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/9Dt4ZDXY9RlaeaWrHf\/giphy.gif?cid=ecf05e47axvlxq3tjxvrxarx60hkw5s3gwvpntjx9b402z3s&amp;rid=giphy.gif&amp;ct=g\" alt=\"\" width=\"516\" height=\"290\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Let&#8217;s talk about some of the options or features provided by the consul and further, we will discuss some of the aspects and impact of things provided by the consul.<\/p>\r\n\r\n\r\n\r\n<p><!--more--><\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Consul hidden talent<\/h4>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">It is known that consul is not only being used for service discovery but for multiple purposes like<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>health checking<\/li>\r\n<li>load balancing<\/li>\r\n<li>Key-value store<\/li>\r\n<li>Web-UI [ for accessibility &amp; monitoring]<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">ACL &#8211; The good lad<\/h4>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Consul setup makes you feel like you can achieve everything in one go or seems pretty straightforward because we need to implement binary, few configurations, and boom! That&#8217;s it.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/ie76dJeem4xBDcf83e\/giphy.gif?cid=ecf05e47o4482k6bl8z49y2ctkibo0v5bhmgumhujc3dkil9&amp;rid=giphy.gif&amp;ct=g\" alt=\"\" width=\"533\" height=\"300\" \/>\r\n<figcaption>Am i god? :\\<\/figcaption>\r\n<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Yes, I lied! It is not what it looks like when we talk about production or real scenarios. We cannot consider or run our production servers on basic configuration or setup. For example, consider the security part of the consul which is not covered in the base consul setup or configuration. So, we need something which can help us to achieve this thing.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Consul ACL [Access Control List] is the option that was introduced or added in the consul version 1.4.0 as per the <a href=\"https:\/\/www.consul.io\/docs\/agent\/options\" target=\"_blank\" rel=\"noreferrer noopener\">official documentation<\/a>. This option is very important in terms of security because it provides multiple layers of security when we configure or access consul for the multiple options we mentioned. Let&#8217;s discuss how consul ACL works. Consul ACL divides its work in two parts-<\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>Consul token<\/li>\r\n<li>Policy<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" class=\"wp-image-8120\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Consul token is used as an authentication mechanism between client &amp; server means it provides access only if someone authenticates with valid consul ACL token. Each token behaves as a separate entity when we try to create in server. When we set up a consul token, the consul asks for few things like restricting token option, description &amp; policy but the thing is all options are not mandatory but optional while configuring.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">The policy is one of the important aspects of consul ACL after token generate because it provides the authorization part of consul ACL. In short, the policy provides access or permission type of any consul ACL token and also tells how specific consul ACL token will behave and its permission boundary.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8298\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image-22.png?w=1024\" alt=\"\" width=\"800\" height=\"495\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">There are multiple options provided by consul ACL like consul roles, service identities, node identifiers &amp; binding methods which are introduced in different consul versions but for now, we are only covering policy &amp; consul tokens for basic authentication &amp; authorization requirement.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Consul ACL &#8211; the scope<\/h4>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">All the option provided by the consul covers by consul ACL means the consul ACL policy provides permission boundaries for all the options like key-value, service discovery, health-check, etc.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">The consul ACL policy is written in HCL language [<strong>HashiCorp Configuration Language<\/strong>] which is the core language of most of the Hashicorp tools like terraform, vault &amp; Nomad. Consul policy uses HCL language to implement policies for tokens. Below is the format of creating a consul ACL policy:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-verse has-text-align-left has-white-color has-dark-gray-background-color has-text-color has-background\">&lt;resource&gt; \"&lt;segment&gt;\" { \r\npolicy = \"&lt;policy disposition&gt;\"\r\n}<\/pre>\r\n\r\n\r\n\r\n<p>Let&#8217;s break down this format and know about each and every part of this consul ACL policy format.<\/p>\r\n\r\n\r\n\r\n<p><strong>&lt;resource&gt;<\/strong> specify the type of option provided by consul like service, key-value<\/p>\r\n\r\n\r\n\r\n<p>Following rules can be configured for multiple consul resources like<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>acl<\/li>\r\n<li>agent<\/li>\r\n<li>event<\/li>\r\n<li>key<\/li>\r\n<li>keyring<\/li>\r\n<li>node<\/li>\r\n<li>operator<\/li>\r\n<li>query<\/li>\r\n<li>service<\/li>\r\n<li>session<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">There are even more and the list is too big and yes it supports almost every feature that the consul provides.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\"><strong>&lt;segment&gt;<\/strong> only applicable for a few of the consul resources like key-value otherwise for many services we can leave it blank using two double-quotes.<\/p>\r\n\r\n\r\n\r\n<p><strong>&lt;policy disposition&gt;<\/strong> means what kind of access it needs like<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>read<\/li>\r\n<li>write<\/li>\r\n<li>list<\/li>\r\n<li>deny.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">If we consider all the above points, check the example below for more clarifications:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted has-white-color has-dark-gray-background-color has-text-color has-background\">key_prefix \"redis\/\" {<br \/>    policy = \"read\"<br \/>}<\/pre>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Consul ACL: Bootstrapping<\/h4>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">The latest consul version supports ACL and all the consul versions greater than 1.4.0 supports ACL. So, to make sure use the latest consul. To cross-check if the current consul version in your system support ACL. Type consul &#8211;version and check if there is a sub command is present for ACL or not.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-verse has-white-color has-dark-gray-background-color has-text-color has-background\">ubuntu@ip-172-31-18-58:~$ consul --help<br \/>Usage: consul [--version] [--help] []<br \/>Available commands are:<br \/>acl Interact with Consul's ACLs<\/pre>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Or you can check web UI only if UI is enabled for consul. Under the ACCESS CONTROLS section, click Tokens,<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-verse\">http:\/\/&lt;IP-ADDRESS&gt;:8500\/<\/pre>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8271\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image-15.png?w=1024\" alt=\"\" width=\"800\" height=\"287\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p>To implement Consul ACL, it basically contains two steps:<\/p>\r\n\r\n\r\n\r\n<ol>\r\n<li>Enable ACL<\/li>\r\n<li>Creating Bootstrap token<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>If we try to create a bootstrap token [ global token], it will throw an error that ACL support is disabled.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-verse has-white-color has-dark-gray-background-color has-text-color has-background\">ubuntu@ip-172-31-18-58:~$ consul acl bootstrap<br \/>Failed ACL bootstrapping: Unexpected response code: 401 (ACL support disabled)<\/pre>\r\n\r\n\r\n\r\n<p>To enable ACL, add the following lines under <strong>agent.hcl<\/strong> or use any file name that ends with <strong>.hcl<\/strong><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-verse has-white-color has-dark-gray-background-color has-text-color has-background\">acl = { <br \/>    enabled = true<br \/>    default_policy = \"deny\"<br \/>    enable_token_persistence = true<br \/>}<\/pre>\r\n\r\n\r\n\r\n<p>Once added, save the file &amp; use the consul command to enable to consul ACL.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-verse has-white-color has-dark-gray-background-color has-text-color has-background\">root@ip-172-31-18-58:\/etc\/consul.d# consul acl bootstrap<br \/>AccessorID: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx<br \/>SecretID: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx<br \/>Description: Bootstrap Token (Global Management)<br \/>Local: false<br \/>Create Time: 2021-09-19 18:58:10.624843962 +0000 UTC<br \/>Policies:<br \/>00000000-0000-0000-0000-000000000001 - global-management<\/pre>\r\n\r\n\r\n\r\n<p>Once you get the bootstrap token which consists of the following IDs\/Token.<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>AccessorID<\/li>\r\n<li>SecretID<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">SecretID is responsible for authentication and this secretID is a bootstrap token which means this is an admin token that can do anything or has full privileges. Keep this bootstrap token in a safe place. Otherwise, anyone can access or change anything using this bootstrap token.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Once you create the bootstrap token, this enables the consul ACL which requires token-based authentication. So, use the above command wisely.<\/p>\r\n\r\n\r\n\r\n<p>Access UI using consul URL and it will ask for consul login because, by default, anonymous access is disabled means no read, no write.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8278\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image-17.png?w=1024\" alt=\"\" width=\"800\" height=\"376\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p>Click on <strong>Log in<\/strong>, and provide the consul token.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8279\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image-18.png?w=1024\" alt=\"\" width=\"428\" height=\"293\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p>Once you&#8217;ve logged in, it will provide you access according to the token you generated and permission attached to the ACL token.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8281\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image-19.png?w=671\" alt=\"\" width=\"272\" height=\"414\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<p>You can create multiple consul tokens and attached policies accordingly.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Note: The above UI steps can be done with CLI too which means when we enable the ACL, it basically adds an authentication mechanism for both CLI &amp; UI. So, to access or modify consul resources, we need to add consul tokens accordingly.<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-image\">\r\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8284\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2021\/09\/image-21.png?w=1024\" alt=\"\" width=\"745\" height=\"542\" \/><\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Conclusion<\/h4>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">This is a very short blog in terms of consul ACL because Consul ACL is a very vast topic &amp; has a variety of options but we&#8217;ve covered a few of the aspects only. We discussed why consul ACL is important for consul security. Consul ACL consists of two-part, which is token &amp; policy where token is used as an authentication mechanism &amp; policy is used as an authorization mechanism. We discussed bootstrapping of consul ACL from scratch which includes multiple steps &amp; validations. Consul ACL policy is not meant for providing access but also for disabling or denying the resource access.<\/p>\r\n\r\n\r\n\r\n<p class=\"has-text-align-justify\">Let us know in the comment section about your experience with the consul &amp; its components and &amp; also if you want more blogs regarding service discovery\/mesh or consul components &amp; its feature.<\/p>\r\n\r\n\r\n\r\n<p>References<\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/giphy.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">GIF<\/a>, <a href=\"https:\/\/learn.hashicorp.com\/tutorials\/consul\/access-control-setup\" target=\"_blank\" rel=\"noreferrer noopener\">Image<\/a><\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p><strong> <strong>Blog Pundit:<\/strong><\/strong> <strong><a href=\"https:\/\/opstree.com\/blog\/\/author\/adeel109\/\" target=\"_blank\" rel=\"noreferrer noopener\">Adeel Ahmad<\/a><\/strong><\/p>\r\n\r\n\r\n\r\n<p>Opstree is an End to End DevOps solution provider<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\r\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link\" href=\"https:\/\/www.opstree.com\/contact-us\" target=\"_blank\" rel=\"noreferrer noopener\">CONTACT US<\/a><\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<p class=\"has-text-align-center\"><strong>Connect Us <\/strong><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter items-justified-right is-layout-flex wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>When we talk about service mesh, consul is one of the open-source tools which is widely used as a service discovery for multiple ephemeral or non-ephemeral resources. There are multiple consuls [service mesh] alternatives which are used as a service discovery but we won&#8217;t be discussing service discovery &amp; alternative comparisons here. If we talk &hellip; <a href=\"https:\/\/opstree.com\/blog\/2021\/09\/21\/learn-how-to-control-consul-resources-using-acl\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Learn How to Control Consul Resources Using ACL&#8221;<\/span><\/a><\/p>\n","protected":false},"author":192321000,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[1804072,768739308,127455857,44,768739286,198219322],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-21X","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/7809"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/192321000"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=7809"}],"version-history":[{"count":25,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/7809\/revisions"}],"predecessor-version":[{"id":30311,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/7809\/revisions\/30311"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=7809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=7809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=7809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}