{"id":34825,"date":"2019-10-31T22:00:35","date_gmt":"2019-10-31T19:00:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah\/"},"modified":"2019-10-31T22:00:35","modified_gmt":"2019-10-31T19:00:35","slug":"kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah","title":{"rendered":"C\u00f3mo conectar cl\u00fasteres de Kubernetes en diferentes centros de datos","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"C\u00f3mo conectar cl\u00fasteres de Kubernetes en diferentes centros de datos\" src=\"\/wp-content\/uploads\/2019\/06\/fa408b406e31840857bbbe13e1d7ee5a.JPG\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<strong>Bienvenido a la serie de gu\u00edas r\u00e1pidas sobre Kubernetes.<\/strong> Esta es una columna regular con las preguntas m\u00e1s interesantes que recibimos en l\u00ednea y en nuestras capacitaciones. Responde un experto en Kubernetes.<\/p>\n<p><\/p>\n<blockquote><p>El experto de hoy es Daniel Polencic (<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/danielepolencic\">Daniele Polencic<\/a><\/noindex>). Daniel trabaja como instructor y desarrollador de software en <noindex><a rel=\"nofollow\" href=\"https:\/\/learnk8s.io\/\">Learnk8s<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Si deseas obtener respuesta a tu pregunta en la siguiente publicaci\u00f3n, <noindex><a rel=\"nofollow\" href=\"http:\/\/hello@learnk8s.io\">cont\u00e1ctanos por correo electr\u00f3nico<\/a><\/noindex> o en <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/learnk8s\">Twitter: @learnk8s<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u00bfTe perdiste las publicaciones anteriores? <noindex><a rel=\"nofollow\" href=\"https:\/\/learnk8s.io\/visualise-dependencies-kubernetes\">B\u00fascalas aqu\u00ed<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"kak-soedinit-klastery-kubernetes-v-raznyh-data-centrah\">\u00bfC\u00f3mo conectar cl\u00fasteres de Kubernetes en diferentes centros de datos?<\/h3>\n<p><\/p>\n<blockquote><p><strong>Resumen<\/strong>: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/federation-v2\">pronto se lanzar\u00e1 Kubefed v2<\/a><\/noindex>, y tambi\u00e9n te recomiendo leer sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bookingcom\/shipper\">Shipper<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/admiraltyio\/multicluster-scheduler\">el proyecto multi-cluster-scheduler<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Con frecuencia, la infraestructura se replica y distribuye en diferentes regiones, especialmente en entornos controlados.<\/p><\/blockquote>\n<p><strong>Si una regi\u00f3n no est\u00e1 disponible, el tr\u00e1fico se redirige a otra para evitar interrupciones.<\/strong><\/p>\n<p><\/p>\n<p>Con Kubernetes se puede utilizar una estrategia similar y distribuir cargas de trabajo en diferentes regiones.<\/p>\n<p><\/p>\n<p>Puedes tener uno o varios cl\u00fasteres por equipo, regi\u00f3n, entorno o una combinaci\u00f3n de estos elementos.<\/p>\n<p><\/p>\n<p>Tus cl\u00fasteres pueden estar alojados en diversas nubes y en un entorno local.<\/p>\n<p><\/p>\n<p><em>Pero, \u00bfc\u00f3mo planificar la infraestructura para tal dispersi\u00f3n geogr\u00e1fica?<br \/>\n\u00bfEs necesario crear un gran cl\u00faster en varias nubes a trav\u00e9s de una red unificada?<br \/>\n\u00bfO establecer muchos cl\u00fasteres peque\u00f1os y encontrar una forma de controlarlos y sincronizarlos?<\/em><\/p>\n<p><\/p>\n<h3 id=\"odin-rukovodyaschiy-klaster\">Un cl\u00faster de control<\/h3>\n<p><\/p>\n<p><em>Crear un cl\u00faster en una red unificada no es tan sencillo.<\/em><\/p>\n<p><\/p>\n<p>Imagina que tienes una falla, se pierde la conectividad entre los segmentos del cl\u00faster.<\/p>\n<p><\/p>\n<p>Si tienes un servidor maestro, la mitad de los recursos no podr\u00e1n recibir nuevos comandos porque no podr\u00e1n comunicarse con el maestro.<\/p>\n<p><\/p>\n<p>Y mientras tanto tienes tus antiguas tablas de enrutamiento (<code>kube-proxy<\/code> no puede cargar nuevas) y no hay pods adicionales (kubelet no puede solicitar actualizaciones).<\/p>\n<p><\/p>\n<p>Lo que es a\u00fan peor, si Kubernetes no ve un nodo, lo marca como perdido y redistribuye los pods faltantes entre los nodos existentes.<\/p>\n<p><\/p>\n<p><strong>Como resultado, tienes el doble de pods.<\/strong><\/p>\n<p><\/p>\n<p>Si haces un servidor maestro por cada regi\u00f3n, habr\u00e1 problemas con el algoritmo de consenso en la base de datos etcd. (<em>Nota del editor: en realidad, la base de datos etcd no necesariamente tiene que estar en los servidores maestros. Se puede ejecutar en un grupo separado de servidores en una misma regi\u00f3n. Sin embargo, de esta forma se obtiene un punto de falla del cl\u00faster. Pero es r\u00e1pido.<\/em>)<\/p>\n<p><\/p>\n<p>etcd utiliza <noindex><a rel=\"nofollow\" href=\"http:\/\/thesecretlivesofdata.com\/raft\/\">el algoritmo raft<\/a><\/noindex>, para consensuar el valor antes de escribirlo en el disco.<br \/>\nEs decir, la mayor\u00eda de las instancias deben alcanzar un consenso antes de que el estado pueda ser escrito en etcd.<\/p>\n<p><\/p>\n<p>Si la latencia entre las instancias de etcd aumenta dr\u00e1sticamente, como en el caso de tres instancias de etcd en diferentes regiones, se necesitar\u00e1 mucho tiempo para consensuar el valor y escribirlo en el disco.<br \/>\nEsto tambi\u00e9n afecta a los controladores de Kubernetes.<\/p>\n<p><\/p>\n<p>El controlador necesita m\u00e1s tiempo para enterarse del cambio y registrar la respuesta en la base de datos.<\/p>\n<p><\/p>\n<p>Y dado que no hay un solo controlador, sino varios, <strong>se genera una reacci\u00f3n en cadena, y todo el cl\u00faster comienza a funcionar muy lentamente.<\/strong>.<\/p>\n<p><\/p>\n<p>etcd es tan sensible a la latencia que <noindex><a rel=\"nofollow\" href=\"https:\/\/coreos.com\/etcd\/docs\/latest\/faq.html#deployment\">en la documentaci\u00f3n oficial se recomienda utilizar SSD en lugar de discos duros convencionales.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><strong>Actualmente no existen buenos ejemplos de una gran red para un solo cl\u00faster.<\/strong><\/p>\n<p><\/p>\n<p>Principalmente, la comunidad de desarrolladores y el grupo SIG-cluster est\u00e1n tratando de entender c\u00f3mo orquestar cl\u00fasteres de la misma manera que Kubernetes orquesta contenedores.<\/p>\n<p><\/p>\n<h3 id=\"variant-1-federaciya-klasterov-s-kubefed\">Opci\u00f3n 1: federaci\u00f3n de cl\u00fasteres con kubefed<\/h3>\n<p><\/p>\n<p>La respuesta oficial del SIG-cluster es <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/federation-v2\">kubefed2, una nueva versi\u00f3n del cliente y operador de kube federation.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Por primera vez, se intent\u00f3 gestionar una colecci\u00f3n de cl\u00fasteres como un \u00fanico objeto mediante la herramienta kube federation.<\/p>\n<p><\/p>\n<p>El comienzo fue prometedor, pero al final kube federation no se volvi\u00f3 popular porque no soportaba todos los recursos.<\/p>\n<p><\/p>\n<p>Soportaba implementaciones conjuntas y servicios, pero, por ejemplo, no StatefulSets.<br \/>\nAdem\u00e1s, la configuraci\u00f3n de la federaci\u00f3n se transmit\u00eda en forma de anotaciones y carec\u00eda de flexibilidad.<\/p>\n<p><\/p>\n<p><em>Imaginen c\u00f3mo se podr\u00eda describir la segmentaci\u00f3n de r\u00e9plicas para cada cl\u00faster en la federaci\u00f3n utilizando solo anotaciones.<\/em><\/p>\n<p><\/p>\n<p><strong>Result\u00f3 un completo desorden.<\/strong><\/p>\n<p><\/p>\n<p>El SIG-cluster realiz\u00f3 un gran trabajo despu\u00e9s de kubefed v1 y decidieron abordar el problema desde un \u00e1ngulo diferente.<\/p>\n<p><\/p>\n<p><strong>En lugar de anotaciones, decidieron lanzar un controlador que se instala en los cl\u00fasteres. Este se puede configurar mediante definiciones de recursos personalizadas (Custom Resource Definition, CRD).<\/strong><\/p>\n<p><\/p>\n<p>Para cada recurso que formar\u00e1 parte de la federaci\u00f3n, tienes una definici\u00f3n CRD personalizada compuesta por tres secciones:<\/p>\n<p><\/p>\n<ul>\n<li>una definici\u00f3n de recurso est\u00e1ndar, como un despliegue;<\/li>\n<li>secci\u00f3n <code>placement<\/code>, donde defines c\u00f3mo se distribuir\u00e1 el recurso en la federaci\u00f3n;<\/li>\n<li>secci\u00f3n <code>override<\/code>, donde se pueden sobrescribir el peso y los par\u00e1metros del placement para un recurso espec\u00edfico.<\/li>\n<\/ul>\n<p><\/p>\n<p>Aqu\u00ed tienes un ejemplo de una entrega combinada con las secciones placement y override.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: types.federation.k8s.io\/v1alpha1\nkind: FederatedDeployment\nmetadata:\n  name: test-deployment\n  namespace: test-namespace\nspec:\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      replicas: 3\n      selector:\n        matchLabels:\n          app: nginx\n      template:\n        metadata:\n          labels:\n            app: nginx\n        spec:\n          containers:\n            - image: nginx\n              name: nginx\n  placement:\n    clusterNames:\n      - cluster2\n      - cluster1\n  overrides:\n    - clusterName: cluster2\n      clusterOverrides:\n        - path: spec.replicas\n          value: 5<\/code><\/pre>\n<p><\/p>\n<p>Como ves, la entrega se distribuye entre dos cl\u00fasteres: <code>cluster1<\/code> y <code>cluster2<\/code>.<\/p>\n<p><\/p>\n<p>El primer cl\u00faster aporta tres r\u00e9plicas, mientras que al segundo se le ha asignado un valor de 5.<\/p>\n<p><\/p>\n<p>Si necesitas m\u00e1s control sobre la cantidad de r\u00e9plicas, kubefed2 proporciona un nuevo objeto ReplicaSchedulingPreference, donde las r\u00e9plicas se pueden distribuir por peso:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: scheduling.federation.k8s.io\/v1alpha1\nkind: ReplicaSchedulingPreference\nmetadata:\n  name: test-deployment\n  namespace: test-ns\nspec:\n  targetKind: FederatedDeployment\n  totalReplicas: 9\n  clusters:\n    A:\n      weight: 1\n    B:\n      weight: 2<\/code><\/pre>\n<p><\/p>\n<p>La estructura del CRD y la API a\u00fan no est\u00e1n completamente listas, y se est\u00e1 trabajando activamente en el repositorio oficial del proyecto.<\/p>\n<p><\/p>\n<p><strong>Sigue el desarrollo de kubefed2, pero ten en cuenta que a\u00fan no es adecuado para entornos de producci\u00f3n.<\/strong><\/p>\n<p><\/p>\n<p>Obt\u00e9n m\u00e1s informaci\u00f3n sobre kubefed2 en <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/blog\/2018\/12\/12\/kubernetes-federation-evolution\/\">el art\u00edculo oficial sobre kubefed2<\/a><\/noindex> en el blog de Kubernetes y en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/federation-v2\">el repositorio oficial del proyecto kubefed<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"variant-2-obedinenie-klasterov-v-stile-bookingcom\">Opci\u00f3n 2: integraci\u00f3n de cl\u00fasteres al estilo Booking.com<\/h3>\n<p><\/p>\n<p>Los desarrolladores de Booking.com no trabajaron en kubefed v2, pero crearon Shipper, un operador para la entrega en m\u00faltiples cl\u00fasteres, en varias regiones y en varias nubes.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bookingcom\/shipper\">Shipper<\/a><\/noindex> es algo similar a kubefed2.<\/p>\n<p><\/p>\n<p>Ambas herramientas permiten configurar la estrategia de despliegue en m\u00faltiples cl\u00fasteres (qu\u00e9 cl\u00fasteres se utilizan y cu\u00e1ntas r\u00e9plicas tienen).<\/p>\n<p><\/p>\n<p>Pero <strong>la misi\u00f3n de Shipper es reducir el riesgo de errores en la entrega.<\/strong><\/p>\n<p><\/p>\n<p>En Shipper, se puede definir una serie de pasos que describen la divisi\u00f3n de r\u00e9plicas entre el despliegue anterior y el actual y el volumen de tr\u00e1fico entrante.<\/p>\n<p><\/p>\n<p>Cuando env\u00edas un recurso a un cl\u00faster, el controlador de Shipper despliega este cambio paso a paso en todos los cl\u00fasteres combinados.<\/p>\n<p><\/p>\n<p><em>Adem\u00e1s, Shipper es muy limitado.<\/em><\/p>\n<p><\/p>\n<p>Por ejemplo, <strong>acepta gr\u00e1ficos de Helm como entrada<\/strong> y no soporta recursos vanilla.<br \/>\nEn t\u00e9rminos generales, Shipper funciona de la siguiente manera.<\/p>\n<p><\/p>\n<p>En lugar de la entrega est\u00e1ndar, debes crear un recurso de aplicaci\u00f3n que incluya un gr\u00e1fico de Helm:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: shipper.booking.com\/v1alpha1\nkind: Application\nmetadata:\n  name: super-server\nspec:\n  revisionHistoryLimit: 3\n  template:\n    chart:\n      name: nginx\n      repoUrl: https:\/\/storage.googleapis.com\/shipper-demo\n      version: 0.0.1\n    clusterRequirements:\n      regions:\n        - name: local\n    strategy:\n      steps:\n        - capacity:\n            contender: 1\n            incumbent: 100\n          name: staging\n          traffic:\n            contender: 0\n            incumbent: 100\n        - capacity:\n            contender: 100\n            incumbent: 0\n          name: full on\n          traffic:\n            contender: 100\n            incumbent: 0\n    values:\n      replicaCount: 3<\/code><\/pre>\n<p><\/p>\n<p><strong>Shipper es una buena opci\u00f3n para gestionar m\u00faltiples cl\u00fasteres, pero su estrecha relaci\u00f3n con Helm solo entorpece.<\/strong><\/p>\n<p><\/p>\n<p><em>\u00bfY si todos cambiamos de Helm a <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/blog\/2018\/05\/29\/introducing-kustomize-template-free-configuration-customization-for-kubernetes\/\">kustomize<\/a><\/noindex> o <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/deepmind\/kapitan\">kapitan?<\/a><\/noindex>?<\/em><\/p>\n<p><\/p>\n<p>Descubre m\u00e1s sobre Shipper y su filosof\u00eda en <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/booking-com-infrastructure\/introducing-shipper-daf9244e3882\">este comunicado de prensa oficial.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Si quieres profundizar en el c\u00f3digo, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bookingcom\/shipper\">dir\u00edgete al repositorio oficial del proyecto.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"variant-3-magicheskoe-obedinenie-klasterov\">Opci\u00f3n 3: &#171;magia&#187; de la fusi\u00f3n de cl\u00fasteres<\/h3>\n<p><\/p>\n<p>Kubefed v2 y Shipper trabajan con la federaci\u00f3n de cl\u00fasteres, proporcionando nuevos recursos a los cl\u00fasteres a trav\u00e9s de una definici\u00f3n de recursos personalizada.<\/p>\n<p><\/p>\n<p><em>Pero supongamos que no quieres reescribir todas las entregas, StatefulSets, DaemonSets, etc. para la fusi\u00f3n.<\/em><\/p>\n<p><\/p>\n<p><em>\u00bfC\u00f3mo incluir un cl\u00faster existente en la federaci\u00f3n sin cambiar el YAML?<\/em><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/admiraltyio\/multicluster-scheduler\">multi-cluster-scheduler es un proyecto de Admirality<\/a><\/noindex>, que se ocupa de las cargas de trabajo de programaci\u00f3n en los cl\u00fasteres.<\/p>\n<p><\/p>\n<p>Pero en lugar de idear una nueva forma de interactuar con el cl\u00faster y envolver los recursos en definiciones personalizadas, multi-cluster-scheduler se integra en el ciclo de vida est\u00e1ndar de Kubernetes y captura todas las llamadas que crean pods.<\/p>\n<p><\/p>\n<p><strong>Cada pod creado se reemplaza inmediatamente por un marcador.<\/strong><\/p>\n<p><\/p>\n<blockquote><p>multi-cluster-scheduler utiliza <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/extensible-admission-controllers\/\">web-hooks para modificar el acceso<\/a><\/noindex>, para interceptar la llamada y crear un pod vac\u00edo inactivo.<\/p><\/blockquote>\n<p>El pod original pasa por otro ciclo de programaci\u00f3n, donde despu\u00e9s de consultar toda la federaci\u00f3n, se toma la decisi\u00f3n sobre su ubicaci\u00f3n.<\/p>\n<p><\/p>\n<p>Finalmente, el pod se entrega al cl\u00faster de destino.<\/p>\n<p><\/p>\n<p>Al final, tienes un pod adicional que no hace nada, simplemente ocupa espacio.<\/p>\n<p><\/p>\n<p>La ventaja es que no tuviste que escribir nuevos recursos para fusionar las entregas.<\/p>\n<p><\/p>\n<p><strong>Cada recurso que crea un pod est\u00e1 autom\u00e1ticamente listo para la fusi\u00f3n.<\/strong><\/p>\n<p><\/p>\n<p>Es interesante, ya que de repente tienes entregas distribuidas en varias regiones y ni siquiera te has dado cuenta. Sin embargo, esto es bastante arriesgado, ya que aqu\u00ed todo se basa en la magia.<\/p>\n<p><\/p>\n<p>Pero si Shipper intenta, principalmente, mitigar las consecuencias de las entregas, el multi-cluster-scheduler realiza tareas m\u00e1s generales y, posiblemente, es m\u00e1s adecuado para trabajos por lotes.<\/p>\n<p><\/p>\n<p>No tiene un mecanismo avanzado de entregas graduales.<\/p>\n<p><\/p>\n<p>Puedes aprender m\u00e1s sobre el multi-cluster-scheduler en <noindex>la p\u00e1gina del repositorio oficial<\/noindex>.<\/p>\n<p><\/p>\n<p>Si deseas leer sobre el multi-cluster-scheduler en acci\u00f3n, Admiralty tiene un <noindex><a rel=\"nofollow\" href=\"https:\/\/admiralty.io\/blog\/running-argo-workflows-across-multiple-kubernetes-clusters\/\">interesante caso de uso con Argo<\/a><\/noindex> \u2014 flujos de trabajo, eventos, CI y CD de Kubernetes.<\/p>\n<p><\/p>\n<h3 id=\"drugie-instrumenty-i-resheniya\">Otros herramientas y soluciones<\/h3>\n<p><\/p>\n<p>Conectar varios cl\u00fasteres y gestionarlos es una tarea compleja, no existe una soluci\u00f3n universal.<\/p>\n<p><\/p>\n<p>Si deseas explorar este tema con m\u00e1s detalle, aqu\u00ed tienes algunos recursos:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/submariner.io\/\">Submariner de Rancher<\/a><\/noindex> \u2014 una herramienta que conecta redes overlay de diferentes cl\u00fasteres de Kubernetes.<\/li>\n<li>La red minorista Target utiliza <noindex><a rel=\"nofollow\" href=\"https:\/\/tech.target.com\/infrastructure\/2018\/06\/20\/enter-unimatrix.html\">Unimatrix junto con Spinnaker para orquestar despliegues en m\u00faltiples cl\u00fasteres.<\/a><\/noindex>.<\/li>\n<li>Intenta usar IPV6 y <noindex><a rel=\"nofollow\" href=\"https:\/\/itnext.io\/kubernetes-multi-cluster-networking-made-simple-c8f26827813\">una \u00fanica red en varias regiones.<\/a><\/noindex>.<\/li>\n<li>Puedes usar service mesh, como <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/setup\/kubernetes\/install\/multicluster\/\">Istio para conectar varios cl\u00fasteres.<\/a><\/noindex>.<\/li>\n<li>Cilium, un complemento de red de contenedores, ofrece <noindex><a rel=\"nofollow\" href=\"https:\/\/cilium.io\/blog\/2019\/03\/12\/clustermesh\/\">la funci\u00f3n de mesh de cl\u00fasteres<\/a><\/noindex>, que permite combinar varios cl\u00fasteres.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"vot-i-vse-na-segodnya\">Eso es todo por hoy.<\/h3>\n<p><\/p>\n<p><em>\u00a1Gracias por leer hasta el final!<\/em><\/p>\n<p><\/p>\n<p>Si conoces una forma m\u00e1s efectiva de conectar varios cl\u00fasteres, <noindex><a rel=\"nofollow\" href=\"http:\/\/hello@learnk8s.io\">cu\u00e9ntanos.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Agregaremos tu m\u00e9todo a los enlaces.<\/p>\n<p><\/p>\n<p>Un agradecimiento especial a Chris Nesbitt-Smith (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/chrisns\">Chris Nesbitt-Smith<\/a><\/noindex>) y Vincent De Smet (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/so0k\">Vincent De Smet<\/a><\/noindex>) (ingeniero de fiabilidad en <noindex><a rel=\"nofollow\" href=\"https:\/\/swatmobile.io\/\">swatmobile.io<\/a><\/noindex>) por leer el art\u00edculo y compartir informaci\u00f3n \u00fatil sobre c\u00f3mo funciona la federaci\u00f3n.<\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454056\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0440\u0438\u044e \u043a\u0440\u0430\u0442\u043a\u0438\u0445 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432 \u043f\u043e Kubernetes. \u042d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0441 \u0441\u0430\u043c\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u043d\u043b\u0430\u0439\u043d \u0438 \u043d\u0430 \u043d\u0430\u0448\u0438\u0445 \u0442\u0440\u0435\u043d\u0438\u043d\u0433\u0430\u0445. \u041e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u043e Kubernetes. \u0421\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u2014 \u0414\u0430\u043d\u0438\u044d\u043b\u044c \u041f\u043e\u043b\u0435\u043d\u0447\u0438\u043a (Daniele Polencic). \u0414\u0430\u043d\u0438\u044d\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u041f\u041e \u0432 Learnk8s. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435, \u0441\u0432\u044f\u0436\u0438\u0442\u0435\u0441\u044c \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26226,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34825","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0440\u0438\u044e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b Kubernetes \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0440\u0438\u044e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:00:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47C\u00f3mo conectar cl\u00fasteres de Kubernetes en diferentes centros de datos | ProHoster","description":"Bienvenido a la serie.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b Kubernetes \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430\u0445 | ProHoster","og:description":"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u0440\u0438\u044e.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-soedinit-klastery-kubernetes-v-raznyh-data-tsentrah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:00:35+00:00","article:modified_time":"2019-10-31T19:00:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34825","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 20:45:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:14:06","updated":"2026-01-21 20:45:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/34825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=34825"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/34825\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/26226"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=34825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=34825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=34825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}