{"id":3304,"date":"2024-07-15T08:27:55","date_gmt":"2024-07-15T12:27:55","guid":{"rendered":"https:\/\/arielantigua.com\/weblog\/?p=3304"},"modified":"2024-12-20T17:38:54","modified_gmt":"2024-12-20T21:38:54","slug":"cilium-bgp-lab-with-loadbalancing-and-more","status":"publish","type":"post","link":"https:\/\/arielantigua.com\/weblog\/2024\/07\/cilium-bgp-lab-with-loadbalancing-and-more\/","title":{"rendered":"Cilium BGP Lab with LoadBalancing and more!"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>At this point, we know how to install Cilium and create a BGP peering with our routers. Now we need to let the outside world reach our Kubernetes apps.<\/p>\n<p>If you don\u2019t have the KinD cluster with Cilium go to <a href=\"https:\/\/arielantigua.com\/weblog\/2024\/07\/cilium-bgp-lab-locally\/\">https:\/\/arielantigua.com\/weblog\/2024\/07\/cilium-bgp-lab-locally\/<\/a><\/p>\n<p>When using Cilium you can reach an application using the Pod IP address or using a LoadBalance IP assigned to a Service. In the previous article we only advertised the Pod Address to our BGP neighbors, lets add more stuff so we can be close to a real deployment.<\/p>\n<p>If you already have cloned the repo, go and do a pull so you can get the new config files and other stuff in the Makefile, or better yet, go and do a new clone of the repo and start from scratch, that\u2019s the idea of the repo!<\/p>\n<p><!--more--><\/p>\n<p>New stuff in this LAB.<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"text-align: left;\">serviceSubnet in <strong>cluster.yaml<\/strong> (10.2.0.0\/16)<\/li>\n<li style=\"text-align: left;\">serviceSelector in the <strong>CiliumBGPPeeringPolicy<\/strong> (service = public), this useful to identify what LoadBalancer will be announced by this peering policy.<\/li>\n<li style=\"text-align: left;\">public-pool.yaml with the configuration for the LoadBalancer IP Pool.<\/li>\n<li style=\"text-align: left;\">If you look at the <strong>topo.yaml<\/strong> file, will find a new Linux node (client0) for testing, this is based on alpine:latest, will test reachability to our LoadBalancer IP from this container that is connected to tor1 with IP address 10.0.100.2\/24<\/li>\n<li style=\"text-align: left;\">Bookinfo application so we can have something to reach from client0.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Now let&#8217;s build the environment, just like before, running <em><strong>make<\/strong><\/em> will create a <strong>KinD<\/strong> cluster with 4 nodes (1 control-plane and 3 workers), a <strong>containerlab<\/strong> topology with 3 routers (FRR), and 1 client (Alpine). decide to let alone the Cilium install manually or with <strong><em>make cilium<\/em>,<\/strong>\u00a0in case there is a need to do something different with the same KinD cluster or add another option to Cilium at install time.<\/p>\n<p><a href=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3305\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa.png\" alt=\"A black screen with white text Description automatically generated\" width=\"1664\" height=\"392\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa.png 1664w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-300x71.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1024x241.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-768x181.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1536x362.png 1536w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1200x283.png 1200w\" sizes=\"auto, (max-width: 1664px) 100vw, 1664px\" \/><\/a><\/p>\n<p>This is the result of running make, as you can see in the image, now you can go and install Cilium in whatever way you like the most, in this case, I will use these options:<\/p>\n<pre>cilium install --version=1.15 \\\r\n--helm-set ipam.mode=kubernetes \\\r\n--helm-set tunnel-protocol=vxlan \\\r\n--helm-set ipv4NativeRoutingCIDR=\"10.0.0.0\/8\" \\\r\n--helm-set bgpControlPlane.enabled=true \\\r\n--helm-set k8s.requireIPv4PodCIDR=true<\/pre>\n<p>The fastest way is to do this: <em><strong>make cilium<\/strong><\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"288\" class=\"wp-image-3306\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-1.png\" alt=\"A screen shot of a computer Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-1.png 524w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-1-300x165.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"667\" height=\"142\" class=\"wp-image-3307\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au.png\" alt=\"A screen shot of a computer screen Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au.png 667w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au-300x64.png 300w\" sizes=\"auto, (max-width: 667px) 100vw, 667px\" \/><\/p>\n<p>The nodes are ready for workloads.<\/p>\n<p>Now is the time to apply both, the CiliumBGPPeeringPolicy and the CiliumLoadBalancerIPPool.<\/p>\n<p>You can do it with <em><strong>make<\/strong><\/em> or the official way with <em><strong>kubectl<\/strong><\/em>.<\/p>\n<pre>kubectl apply -f cilium-bgp-peering-policies.yaml \r\n\r\nkubectl apply -f public-pool.yaml<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"824\" height=\"138\" class=\"wp-image-3308\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au-1.png\" alt=\"A screen shot of a computer screen Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au-1.png 824w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au-1-300x50.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-screen-description-au-1-768x129.png 768w\" sizes=\"auto, (max-width: 824px) 100vw, 824px\" \/><\/p>\n<p>You can validate the configurations with the following commands.<\/p>\n<pre>kubectl get -f cilium-bgp-peering-policies.yaml -oyaml\r\n\r\nkubectl get -f public-pool.yaml -oyaml<\/pre>\n<p>Our lab environment is ready to assign IP to LoadBalancer services, lest check the existing ones first.<\/p>\n<p><a href=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/word-image-3304-5.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3309\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/word-image-3304-5.png\" alt=\"\" width=\"1014\" height=\"118\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/word-image-3304-5.png 1014w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/word-image-3304-5-300x35.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/word-image-3304-5-768x89.png 768w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/a><\/p>\n<p><strong>Is time to deploy our test application.<\/strong><\/p>\n<p>Now there is an app in the repo, you can deploy the bookinfo application, which is used by Istio to do some demos, I just cloned it and added a Service to pick up an Address from our IP Pool and advertised it to the Tor(0,1) routers.<\/p>\n<p><a href=\"https:\/\/github.com\/aredan\/ciliumlabs\/tree\/main\/bookinfo\/kustomize\">https:\/\/github.com\/aredan\/ciliumlabs\/tree\/main\/bookinfo\/kustomize<\/a><\/p>\n<pre>kubectl apply -k kustomize<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"756\" height=\"430\" class=\"wp-image-3310\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au.png\" alt=\"A screenshot of a computer program Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au.png 756w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-300x171.png 300w\" sizes=\"auto, (max-width: 756px) 100vw, 756px\" \/><\/p>\n<p>Let&#8217;s check the Services that we have now.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1153\" height=\"254\" class=\"wp-image-3311\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-2.png\" alt=\"A screen shot of a computer Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-2.png 1153w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-2-300x66.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-2-1024x226.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-2-768x169.png 768w\" sizes=\"auto, (max-width: 1153px) 100vw, 1153px\" \/><\/p>\n<p>There is our LoadBalancer IP address (10.0.10.1) and others ClusterIP, the LoadBalancer is the one that we will be testing from client0.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"954\" height=\"449\" class=\"wp-image-3312\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-1.png\" alt=\"A screenshot of a computer program Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-1.png 954w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-1-300x141.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-1-768x361.png 768w\" sizes=\"auto, (max-width: 954px) 100vw, 954px\" \/><\/p>\n<p>We can see there is an IP assigned to the Service, but is better if we can validate that this address is being announced to the Tor routers.<\/p>\n<pre>docker exec -it clab-bgp-cplane-router0 vtysh -c 'show bgp ipv4'<\/pre>\n<p><a href=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-computer-description.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3313\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-computer-description.png\" alt=\"A computer screen shot of a computer Description automatically generated\" width=\"965\" height=\"577\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-computer-description.png 965w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-computer-description-300x179.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-computer-description-768x459.png 768w\" sizes=\"auto, (max-width: 965px) 100vw, 965px\" \/><\/a><\/p>\n<p>Also, from Cilium itself we can validate that his address is being announced from the <em><strong>virtualRouters<\/strong><\/em>.<\/p>\n<p>Within the Cilium CLI exists a subcommand called bgp (hard to pass!!) and with this, we can validate a few things.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"904\" height=\"416\" class=\"wp-image-3314\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-1.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-1.png 904w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-1-300x138.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-1-768x353.png 768w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1249\" height=\"235\" class=\"wp-image-3315\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-3.png\" alt=\"A screen shot of a computer Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-3.png 1249w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-3-300x56.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-3-1024x193.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-3-768x144.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screen-shot-of-a-computer-description-automatic-3-1200x226.png 1200w\" sizes=\"auto, (max-width: 1249px) 100vw, 1249px\" \/><\/p>\n<pre>cilium bgp routes advertised ipv4 unicast<\/pre>\n<p><a href=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3316\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1.png\" alt=\"A black screen with white text Description automatically generated\" width=\"1431\" height=\"224\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1.png 1431w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1-300x47.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1-1024x160.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1-768x120.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-1-1200x188.png 1200w\" sizes=\"auto, (max-width: 1431px) 100vw, 1431px\" \/><\/a><\/p>\n<p>Our four nodes are announcing the same address to upstream routers, this is because of the trafficPolicy assigned to the service.<\/p>\n<p><strong>Is time to reach our App.<\/strong><\/p>\n<p>We need to get into <strong>client0 container<\/strong>, this is an alpine container so <strong>ash<\/strong> is the shell.<\/p>\n<p>Installing <strong>curl<\/strong> and <strong>Lynx<\/strong>. In case you don&#8217;t know what Lynx is, is a console browser, this feels like traveling to the past when the one that stayed more in the console was the strongest.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"937\" height=\"145\" class=\"wp-image-3317\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-2.png\" alt=\"A black screen with white text Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-2.png 937w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-2-300x46.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-black-screen-with-white-text-description-automa-2-768x119.png 768w\" sizes=\"auto, (max-width: 937px) 100vw, 937px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"481\" class=\"wp-image-3318\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-2.png\" alt=\"A screenshot of a computer program Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-2.png 865w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-2-300x167.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-program-description-au-2-768x427.png 768w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"593\" height=\"402\" class=\"wp-image-3319\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-black-screen-descript.png\" alt=\"A computer screen shot of a black screen Description automatically generated\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-black-screen-descript.png 593w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-computer-screen-shot-of-a-black-screen-descript-300x203.png 300w\" sizes=\"auto, (max-width: 593px) 100vw, 593px\" \/><\/p>\n<p>We can see that curl is reaching the app, this way is hard to interact we the application, now with Lynx!<\/p>\n<p>lynx <a href=\"http:\/\/10.0.10.1\">http:\/\/10.0.10.1<\/a><\/p>\n<p><a href=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-2.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3320\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-2.png\" alt=\"A screenshot of a computer Description automatically generated\" width=\"1056\" height=\"364\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-2.png 1056w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-2-300x103.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-2-1024x353.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2024\/07\/a-screenshot-of-a-computer-description-automatica-2-768x265.png 768w\" sizes=\"auto, (max-width: 1056px) 100vw, 1056px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Isovalent (Cilium creators) announced new support for ClusterIP in BGP !!<\/p>\n<p>https:\/\/www.youtube.com\/watch?v=CmCBe1Fass4<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; At this point, we know how to install Cilium and create a BGP peering with our routers. Now we need to let the outside world reach our Kubernetes apps. If you don\u2019t have the KinD cluster with Cilium go to https:\/\/arielantigua.com\/weblog\/2024\/07\/cilium-bgp-lab-locally\/ When using Cilium you can reach an application using the Pod IP address [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[123,7,128,34],"tags":[158,159,129],"class_list":["post-3304","post","type-post","status-publish","format-standard","hentry","category-bgp","category-general","category-kubernetes","category-networking","tag-cilium","tag-ebpf","tag-k8s"],"_links":{"self":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/comments?post=3304"}],"version-history":[{"count":10,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3304\/revisions"}],"predecessor-version":[{"id":3345,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3304\/revisions\/3345"}],"wp:attachment":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/media?parent=3304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/categories?post=3304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/tags?post=3304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}