{"id":1458,"date":"2024-05-09T09:13:19","date_gmt":"2024-05-09T09:13:19","guid":{"rendered":"http:\/\/patriciocerda.com\/?p=1458"},"modified":"2024-12-12T15:53:17","modified_gmt":"2024-12-12T15:53:17","slug":"kubernetes-utilizar-metallb-como-load-balancer-homelab","status":"publish","type":"post","link":"https:\/\/patriciocerda.com\/?p=1458","title":{"rendered":"Kubernetes &#8211; Utilizar MetalLB como Load Balancer (Homelab)"},"content":{"rendered":"<p>Hola y bienvenidos nuevamente a este blog.\u00a0 Cuando trabajamos con implementaciones de Kubernetes en AWS EKS, Azure AKS o Google GKE, pues de manera nativa podremos crear Services de tipo LoadBalancer, los cuales ser\u00e1n provistos de manera autom\u00e1tica gracias a la integraci\u00f3n con el Cloud Provider quienes desplegaran el correspondiente Load Balancer en la Cloud y que permitir\u00e1n exponer la aplicaci\u00f3n de Kubernetes para acceso externo de manera rapida y sencilla.\u00a0\u00a0 Otras distribuciones como RedHat OpenShift utilizan Routes para proveer acceso a las aplicaciones de la manera sencilla sin el uso de LoadBalancer, y otras como VMware Tanzu pueden utilizar NSX o Kube-VIP para ofrecer un Services de tipo LoadBalancer de manera automatica.<\/p>\n<p>En muchas de las otras distribuciones de Kubernetes no se ofrece de manera nativa una implementaci\u00f3n de Load Balancers (Service de tipo LoadBalancer), y m\u00e1s a\u00fan cuando intentamos desplegar Kubernetes en un entorno de HomeLab.\u00a0 En estos casos, si intentamos crear un Service de tipo LoadBalancer, este permanecer\u00e1 en estado &#8220;pending&#8221; indefinidamente luego de ser creado.\u00a0\u00a0 Para este caso podemos desplegar MetalLB de manera rapida y sencilla para ofrecer una implementaci\u00f3n de Load Balancer en practicamente cualquier cluster de Kubernetes.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/patriciocerda.com\/?p=1458\/#Requerimientos\" >Requerimientos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/patriciocerda.com\/?p=1458\/#Instalacion\" >Instalaci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/patriciocerda.com\/?p=1458\/#Configuracion_inicial\" >Configuraci\u00f3n inicial<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/patriciocerda.com\/?p=1458\/#Uso\" >Uso<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Requerimientos\"><\/span>Requerimientos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Un cluster de Kubernetes versi\u00f3n 1.13.0 o posterior, que no tenga otro tipo de funcionalidad de Load Balancer.<\/li>\n<li>Un cluster con un CNI que pueda coexistir con MetalLB como Antrea, Calico o Flannel.\u00a0 M\u00e1s informaci\u00f3n en https:\/\/metallb.universe.tf\/installation\/network-addons\/<\/li>\n<li>Un rango de direcciones IPv4 que pueda ser utilizado por MetalLB<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Instalacion\"><\/span>Instalaci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>De acuerdo a la documentaci\u00f3n oficial, MetalLB puede ser desplegado utilizando Manifiestos, Kustomize o Helm.\u00a0 En este caso veremos como desplegar via Helm.<\/p>\n<p>En primer lugar a\u00f1adimos el repositorio Helm e instalamos MetalLB<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-1 > .CodeMirror, .fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-1 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_1\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_1\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_1\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">helm repo add metallb https:\/\/metallb.github.io\/metallb\nhelm --namespace metallb-system \\\n    install --create-namespace \\\n    metallb metallb\/metallb\n<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Configuracion_inicial\"><\/span>Configuraci\u00f3n inicial<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>MetalLB permencer\u00e1 inactivo hasta que sea configurado apropiadamente, principalmente definiendo un IP Pool que pueda ser utilizado por MetalLB para los services de tipo LoadBalancer.\u00a0\u00a0 Para esto creamos un fichero YAML como el que vemos a continuaci\u00f3n, y luego lo aplicamos en el cluster con kubectl.<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-2 > .CodeMirror, .fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-2 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_2\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_2\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_2\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">apiVersion: metallb.io\/v1beta1\nkind: IPAddressPool\nmetadata:\n  name: prod-pool\n  namespace: metallb-system\nspec:\n  addresses:\n  - 192.168.10.0\/24\n  - 192.168.9.1-192.168.9.5\n  - fc00:f853:0ccd:e799::\/124\n  - 172.20.50.200-172.20.50.220<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<p>Una vez que hemos asignado un IP Pool para que MetalLB pueda utilizarlo, debemos anunciar este IP Pool.\u00a0 MetalLB tiene configuraciones especificas para BGP asi como tambi\u00e9n para configuraciones simples en modo Layer 2.\u00a0 En este ejemplo utilizaremos el modo Layer 2, si desean ver otras configuraciones avanzadas pueden ver el siguiente link: https:\/\/metallb.universe.tf\/configuration\/#announce-the-service-ips<\/p>\n<p>El modo Layer 2 es el m\u00e1s sencillo y en muchos casos no se necesita ninguna configuracion especial m\u00e1s all\u00e1 de definir el IP Pool.\u00a0 Del mismo modo, el modo Layer 2 no require que las IPs esten asociadas a las interfaces de red de los nodos workers.<\/p>\n<p>Para anunciar el IP Pool debemos crear un recurso de tipo L2Advertisement como vemos a continuaci\u00f3n, asociado con el IP pool creado previamente. Para esto creamos un fichero YAML como el que vemos a continuaci\u00f3n, y luego lo aplicamos en el cluster con kubectl.<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-3 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_3\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_3\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_3\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">apiVersion: metallb.io\/v1beta1\nkind: L2Advertisement\nmetadata:\n  name: simplel2\n  namespace: metallb-system\n<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Uso\"><\/span>Uso<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Una vez teniendo MetalLB ya instalado y configurado, podemos comenzar a utilizarlo en nuestras aplicaciones.\u00a0 Para eso podemos crear un Service como el que vemos a continuaci\u00f3n de tipo LoadBalancer para una app utilizando WordPress.<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-4 > .CodeMirror, .fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-4 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_4\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_4\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_4\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">apiVersion: v1\nkind: Service\nmetadata:\n  name: wordpress\n  namespace: wordpresslb\n  labels:\n    app: wordpress\nspec:\n  ports:\n    - port: 80\n  selector:\n    app: wordpress\n    tier: frontend\n  type: LoadBalancer<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1459\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04-300x161.jpg\" alt=\"\" width=\"401\" height=\"215\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04-200x107.jpg 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04-300x161.jpg 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04-400x214.jpg 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04-600x321.jpg 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB04.jpg 685w\" sizes=\"(max-width: 401px) 100vw, 401px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Una vez creado el servicio, podemos ver que se le ha asignado una direcci\u00f3n IP del IP Pool que hemos definido previamente:<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1460\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-300x117.jpg\" alt=\"\" width=\"451\" height=\"176\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-200x78.jpg 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-300x117.jpg 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-400x156.jpg 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-600x234.jpg 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-768x300.jpg 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-800x312.jpg 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-1024x400.jpg 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-1200x469.jpg 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05-1536x600.jpg 1536w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB05.jpg 1885w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Si nos conectamos mediante un navegador, podemos acceder al sitio WordPress publicado a traves del Service y MetalLB<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1461\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-300x248.jpg\" alt=\"\" width=\"471\" height=\"389\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-200x165.jpg 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-300x248.jpg 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-400x330.jpg 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-600x495.jpg 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-768x634.jpg 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-800x661.jpg 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-1024x846.jpg 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-1200x991.jpg 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08-1536x1268.jpg 1536w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/K8sLB08.jpg 1636w\" sizes=\"(max-width: 471px) 100vw, 471px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Como vemos, es una manera bastante sencilla de poder contar con Services de tipo LoadBalancer en casi cualquier cluster de Kubernetes, sin dependencias adicionales.\u00a0 Para configuraciones avanzadas pueden recisar la documentaci\u00f3n oficial de MetalLB: <a href=\"https:\/\/metallb.universe.tf\/configuration\/\" target=\"_blank\" rel=\"noopener\">https:\/\/metallb.universe.tf\/configuration\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hola y bienvenidos nuevamente a este blog.\u00a0 Cuando trabajamos con<\/p>\n","protected":false},"author":1,"featured_media":1463,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[27],"tags":[32,31,79,78],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes - Utilizar MetalLB como Load Balancer (Homelab) - vLatam<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/patriciocerda.com\/?p=1458\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes - Utilizar MetalLB como Load Balancer (Homelab) - vLatam\" \/>\n<meta property=\"og:description\" content=\"Hola y bienvenidos nuevamente a este blog.\u00a0 Cuando trabajamos con\" \/>\n<meta property=\"og:url\" content=\"https:\/\/patriciocerda.com\/?p=1458\" \/>\n<meta property=\"og:site_name\" content=\"vLatam\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-09T09:13:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-12T15:53:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"pcerda\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pcerda\" \/>\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\":\"WebPage\",\"@id\":\"https:\/\/patriciocerda.com\/?p=1458\",\"url\":\"https:\/\/patriciocerda.com\/?p=1458\",\"name\":\"Kubernetes - Utilizar MetalLB como Load Balancer (Homelab) - vLatam\",\"isPartOf\":{\"@id\":\"https:\/\/patriciocerda.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/patriciocerda.com\/?p=1458#primaryimage\"},\"image\":{\"@id\":\"https:\/\/patriciocerda.com\/?p=1458#primaryimage\"},\"thumbnailUrl\":\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png\",\"datePublished\":\"2024-05-09T09:13:19+00:00\",\"dateModified\":\"2024-12-12T15:53:17+00:00\",\"author\":{\"@id\":\"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a\"},\"breadcrumb\":{\"@id\":\"https:\/\/patriciocerda.com\/?p=1458#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/patriciocerda.com\/?p=1458\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/patriciocerda.com\/?p=1458#primaryimage\",\"url\":\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png\",\"contentUrl\":\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/patriciocerda.com\/?p=1458#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/patriciocerda.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes &#8211; Utilizar MetalLB como Load Balancer (Homelab)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/patriciocerda.com\/#website\",\"url\":\"https:\/\/patriciocerda.com\/\",\"name\":\"vLatam\",\"description\":\"El Blog de Patricio Cerda\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/patriciocerda.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a\",\"name\":\"pcerda\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/patriciocerda.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1779195224\",\"contentUrl\":\"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1779195224\",\"caption\":\"pcerda\"},\"url\":\"https:\/\/patriciocerda.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kubernetes - Utilizar MetalLB como Load Balancer (Homelab) - vLatam","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:\/\/patriciocerda.com\/?p=1458","og_locale":"en_US","og_type":"article","og_title":"Kubernetes - Utilizar MetalLB como Load Balancer (Homelab) - vLatam","og_description":"Hola y bienvenidos nuevamente a este blog.\u00a0 Cuando trabajamos con","og_url":"https:\/\/patriciocerda.com\/?p=1458","og_site_name":"vLatam","article_published_time":"2024-05-09T09:13:19+00:00","article_modified_time":"2024-12-12T15:53:17+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png","type":"image\/png"}],"author":"pcerda","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pcerda","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/patriciocerda.com\/?p=1458","url":"https:\/\/patriciocerda.com\/?p=1458","name":"Kubernetes - Utilizar MetalLB como Load Balancer (Homelab) - vLatam","isPartOf":{"@id":"https:\/\/patriciocerda.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/patriciocerda.com\/?p=1458#primaryimage"},"image":{"@id":"https:\/\/patriciocerda.com\/?p=1458#primaryimage"},"thumbnailUrl":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png","datePublished":"2024-05-09T09:13:19+00:00","dateModified":"2024-12-12T15:53:17+00:00","author":{"@id":"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a"},"breadcrumb":{"@id":"https:\/\/patriciocerda.com\/?p=1458#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/patriciocerda.com\/?p=1458"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/patriciocerda.com\/?p=1458#primaryimage","url":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png","contentUrl":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/patriciocerda.com\/?p=1458#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/patriciocerda.com\/"},{"@type":"ListItem","position":2,"name":"Kubernetes &#8211; Utilizar MetalLB como Load Balancer (Homelab)"}]},{"@type":"WebSite","@id":"https:\/\/patriciocerda.com\/#website","url":"https:\/\/patriciocerda.com\/","name":"vLatam","description":"El Blog de Patricio Cerda","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/patriciocerda.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a","name":"pcerda","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/patriciocerda.com\/#\/schema\/person\/image\/","url":"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1779195224","contentUrl":"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1779195224","caption":"pcerda"},"url":"https:\/\/patriciocerda.com\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2023\/05\/IntroBlog1458.png","_links":{"self":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts\/1458"}],"collection":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1458"}],"version-history":[{"count":2,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts\/1458\/revisions"}],"predecessor-version":[{"id":1464,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts\/1458\/revisions\/1464"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/media\/1463"}],"wp:attachment":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}