User Tools

Site Tools


informatica:linux:kubernetes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatica:linux:kubernetes [2022/09/24 07:46] – [Nodo (común para control plane y worker)] javiinformatica:linux:kubernetes [2023/09/25 07:05] (current) – [Nodo (común para control plane y worker)] javi
Line 23: Line 23:
 **IMPORTANTE**: leer la siguientes consideraciones **IMPORTANTE**: leer la siguientes consideraciones
  
-  * Kubernetes usa CRI, que NO es compatible con Docker Engine, por eso mejor NO usarlo (Docker Engine)+  * Kubernetes requiere container runtime que siga especificación CRI (CRI-Ocontainerd, etc.) 
 + 
 +  * Docker Engine requiere dockershim, que ha sido eliminado, por lo que mejor NO usar Docker Engine como container runtime. Ver [[https://kubernetes.io/docs/setup/production-environment/container-runtimes/|Container runtimes]]. Por curiosidad, el reemplazo (de dockershimse llama "cri-dockerd"
  
   * Para instalar containerd usaremos los paquetes, que los distribuye Docker Inc.   * Para instalar containerd usaremos los paquetes, que los distribuye Docker Inc.
Line 165: Line 167:
 5.1. Configurar container runtime cgroup driver 5.1. Configurar container runtime cgroup driver
  
-Ya hecho en pasos anteriores, eb este caso containerd+Ya hecho en pasos anteriores, en este caso containerd
  
 5.2. Configurar kubelet cgroup driver 5.2. Configurar kubelet cgroup driver
Line 271: Line 273:
 | k8s3.local | 192.168.95.73 | 6443 | Control plane adicional | | k8s3.local | 192.168.95.73 | 6443 | Control plane adicional |
  
-Antes de empezar para cada uno de los tres control plane [[informatica:linux:docker:kubernetes#balanceador_capa_4_kube-apiserver|confifurar balanceador capa 4 kube-apiserver]]+Antes de empezar para cada uno de los tres control plane [[informatica:linux:kubernetes#balanceador_capa_4_kube-apiserver|confifurar balanceador capa 4 kube-apiserver]]
  
 1. Conectarse al servidor 1. Conectarse al servidor
Line 370: Line 372:
   ssh k8s3   ssh k8s3
      
-2. Ejecutar el comando obtenido en el paso 3.1. de [[informatica:linux:docker:kubernetes#con_alta_disponibilidad|primer control plane con alta disponibilidad]] con las siguientes modificaciones:+2. Ejecutar el comando obtenido en el paso 3.1. de [[informatica:linux:kubernetes#con_alta_disponibilidad|primer control plane con alta disponibilidad]] con las siguientes modificaciones:
  
   * Si hemos configurado alta disponibilidad con [[https://github.com/kubernetes/kubeadm/blob/master/docs/ha-considerations.md#kube-vip|kube-vip]] el directorio '/etc/kubernetes/manifests' no estará vacío, y el comando 'sudo kubeadm join' fallará. Por ese motivo, y solo en este caso, debemos añadir al comando 'sudo kubeadm join' el parámetro '--ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests'   * Si hemos configurado alta disponibilidad con [[https://github.com/kubernetes/kubeadm/blob/master/docs/ha-considerations.md#kube-vip|kube-vip]] el directorio '/etc/kubernetes/manifests' no estará vacío, y el comando 'sudo kubeadm join' fallará. Por ese motivo, y solo en este caso, debemos añadir al comando 'sudo kubeadm join' el parámetro '--ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests'
Line 426: Line 428:
   ssh k8s3   ssh k8s3
      
-2. Ejecutar el comando obtenido en el paso 3.2. de [[http://wiki.legido.com/doku.php?id=informatica:linux:docker:kubernetes#sin_alta_disponibilidad|primer control plane sin alta disponibilidad]] con las siguientes modificaciones:+2. Ejecutar el comando obtenido en el paso 3.2. de [[http://wiki.legido.com/doku.php?id=informatica:linux:kubernetes#sin_alta_disponibilidad|primer control plane sin alta disponibilidad]] con las siguientes modificaciones:
  
   * Añadir 'sudo'   * Añadir 'sudo'
Line 465: Line 467:
   ssh k8s5   ssh k8s5
      
-2. Ejecutar el comando obtenido en el paso 3.2. de [[informatica:linux:docker:kubernetes#con_alta_disponibilidad|primer control plane con alta disponibilidad]] con las siguientes modificaciones:+2. Ejecutar el comando obtenido en el paso 3.2. de [[informatica:linux:kubernetes#con_alta_disponibilidad|primer control plane con alta disponibilidad]] con las siguientes modificaciones:
  
   * Añadir 'sudo'   * Añadir 'sudo'
Line 511: Line 513:
 Las peticiones TCP que lleguen a ese nombre ('k8s.local') y ese puerto ('8443' en este ejemplo) serán dirigidas al puerto TCP 6443 del control plane que en ese momento tenga la IP virtual. En ese puerto, TCP 6443, es en el que escucha el servicio 'kube-apiserver'. Las peticiones TCP que lleguen a ese nombre ('k8s.local') y ese puerto ('8443' en este ejemplo) serán dirigidas al puerto TCP 6443 del control plane que en ese momento tenga la IP virtual. En ese puerto, TCP 6443, es en el que escucha el servicio 'kube-apiserver'.
  
-Todos los nodos (control plane o workers) deben resolver el nombre que elijamos para el balanceador de carga, en este ejemplo 'k8s'.+Todos los nodos (control plane o workers) deben resolver el nombre que elijamos para el balanceador de carga, en este ejemplo 'k8s.local'.
  
 Todos los miembros de ese balanceador de carga, los 3 control plane en este ejemplo, deben ser capaces de resolver el nombre DNS de todos y cada uno de sus miembros, ya que usaremos nombres DNS. Todos los miembros de ese balanceador de carga, los 3 control plane en este ejemplo, deben ser capaces de resolver el nombre DNS de todos y cada uno de sus miembros, ya que usaremos nombres DNS.
Line 524: Line 526:
  
 ===== Oracle cloud ===== ===== Oracle cloud =====
 +
 +**OJO**: una vez pasa el período de prueba gratix NO se pueden modificar, por lo que es MUY arriesgado confiar en este servicio. Por ejemplo si el puerto del ingress controller cambia del 32386 no se pueden añadir/eliminar backends al backend set
  
 Oracle cloud ofrece por la patilla y para siempre un balanceador de capa 4 con IP pública y estática. Oracle cloud ofrece por la patilla y para siempre un balanceador de capa 4 con IP pública y estática.
Line 535: Line 539:
 | k8s3 | 1.2.3.7 | 10.0.0.4 | Tercer control plane | | k8s3 | 1.2.3.7 | 10.0.0.4 | Tercer control plane |
  
-==== Load balancer ==== +Creamos:
- +
-Listener +
- +
-^ Protocol ^ Ingress Traffic Port ^ Backend Set ^ +
-| TCP  | Specify the port, 6443 | listener-kube-apiserver | +
- +
-Backend set +
- +
-^ Load Balancing Policy ^ Preserve Source IP ^ Backend Set ^ +
-| 5-tuple hash  | Checked | listener-kube-apiserver | +
- +
-Backends +
- +
-^ Name ^ IP address ^ Port ^ Weight ^ +
-| k8s1  | 10.0.0.3 | 6443 | 100 | +
-| k8s2  | 10.0.0.4 | 6443 | 99 | +
-| k8s3  | 10.0.0.5 | 6443 | 99 | +
- +
- +
- +
- +
- +
- +
- +
-==== Security list ==== +
- +
-Se creó una VNC siguiendo el asistente. +
- +
-El load balancer usa la subnet pública, "Public Subnet-vnc"+
- +
-Esta tiene una security list, que hay que retocar para que: +
- +
-  * No permita conexiones desde la DMZ al listener kube-apiserver +
-  * Permita que lleguen los health check del load balancer a los nodos +
- +
-Las IPs púbicas son inventadas +
- +
-^ Stateless ^ Source ^ IP Protocol ^ Source Port Range ^ Destination Port Range ^ Description ^ +
-| No | 0.0.0.0/0 | TCP | All | 31342 | nginx-ingress-controller-https | +
-| No | 0.0.0.0/0 | TCP | All | 32386 | nginx-ingress-controller-http | +
-| No | 0.0.0.0/0 | TCP | All | 443 | listener-https | +
-| No | 0.0.0.0/0 | TCP | All | 80 | listener-http | +
-| No | 1.2.3.5/32 | All | All | All | k8s1 | +
-| No | 1.2.3.6/32 | All | All | All | k8s2 | +
-| No | 1.2.3.7/32 | All | All | All | k8s3 | +
- +
-Seguramente se puede restringir una miaja, pero así funciona. +
- +
-Como se juega también con los listeners no es tab abierta como parece. Por ejemplo desde la DMZ NO se llega al puerto 31342 (porque no hay listener publicado). +
- +
- +
- +
  
 +  - Un [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#load_balancer|load balancer]] con su correspondiente [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#security_list|security list]]
 +  - Un [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#listener-kube-apiserver|listener]] que escuche en el puerto 6443 oara el servicio 'kube-apiserver' 
  
 ===== Haproxy y keepalived como servicios ===== ===== Haproxy y keepalived como servicios =====
Line 912: Line 865:
 Requisitos: Requisitos:
  
-  * Un [[informatica:linux:docker:kubernetes#deployment|Deployment]] con 'metadata.name' igual a 'deployment-whoami'+  * Un [[informatica:linux:kubernetes#deployment|Deployment]] con 'metadata.name' igual a 'deployment-whoami'
  
 1. Conectarse al master 1. Conectarse al master
Line 1053: Line 1006:
 Requisitos: Requisitos:
  
-  * Tener instalado [[informatica:linux:docker:kubernetes#nginx|nginx controller]]+  * Tener instalado [[informatica:linux:kubernetes#nginx|nginx controller]]
  
 1. Conectarnos al master 1. Conectarnos al master
Line 1183: Line 1136:
 ====== Issuer ====== ====== Issuer ======
  
-Se trata de un [[https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/|custom resource]] creado durante el [[informatica:linux:docker:kubernetes#cert_manager|proceso de instalación]] del [[https://kubernetes.io/docs/concepts/cluster-administration/addons/|Addon]] llamado [[https://github.com/jetstack/cert-manager/|cert-manager]].+Se trata de un [[https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/|custom resource]] creado durante el [[informatica:linux:kubernetes#cert_manager|proceso de instalación]] del [[https://kubernetes.io/docs/concepts/cluster-administration/addons/|Addon]] llamado [[https://github.com/jetstack/cert-manager/|cert-manager]].
  
 Requisitos: Requisitos:
  
-  * Tener instalado [[informatica:linux:docker:kubernetes#cert_manager|cert-manager]]+  * Tener instalado [[informatica:linux:kubernetes#cert_manager|cert-manager]]
  
 Para instalarlo: Para instalarlo:
Line 1269: Line 1222:
  
   * IPs privadas de los workers del clúster   * IPs privadas de los workers del clúster
-  * Puertos en los que escuchan los Nodeport tanto HTTP como HTTPS. Ver paso 8 de [[informatica:linux:docker:kubernetes#nginx_nodeport_daemonset_usar_este|Nginx ingress Nodeport daemonset]]+  * Puertos en los que escuchan los Nodeport tanto HTTP como HTTPS. Ver paso 8 de [[informatica:linux:kubernetes#nginx_nodeport_daemonset_usar_este|Nginx ingress Nodeport daemonset]]
   * [[https://docs.docker.com/engine/install/debian|Docker]]   * [[https://docs.docker.com/engine/install/debian|Docker]]
 +
 +==== Bare metal ====
 +
 +Estas instrucciones sob para montar completamente por fuera de kubernetes un balanceador de carga capa 7.
 +
 +TODO: refinar, porque cuando jugué con OCI me di cuenta que capa 4 funciona perfectamente, no hace falta liarse con proxy_pass y capa 7
  
 1. Acceder al servidor 1. Acceder al servidor
Line 1401: Line 1360:
 Para esta prueba necesitamos los siguientes requisitos: Para esta prueba necesitamos los siguientes requisitos:
  
-  * Ingress de nginx instalado y configurado [[informatica:linux:docker:kubernetes#nginx_nodeport_con_afinitty_usar_este|así]]+  * Ingress de nginx instalado y configurado [[informatica:linux:kubernetes#nginx_nodeport_con_afinitty_usar_este|así]]
   * Nombre DNS (en este ejemplo 'example.com') apuntando a la IP pública del servidor   * Nombre DNS (en este ejemplo 'example.com') apuntando a la IP pública del servidor
-  * [[informatica:linux:docker:kubernetes#ejemplo_ingress_con_letsencrypt|Ingress]] con letsencrypt y nombre de host 'example.com'+  * [[informatica:linux:kubernetes#ejemplo_ingress_con_letsencrypt|Ingress]] con letsencrypt y nombre de host 'example.com'
  
 5.1. Pronbar que el contenedor está corriendo: 5.1. Pronbar que el contenedor está corriendo:
Line 1438: Line 1397:
 Donde '8.8.8.8' es la IP pública desde donde hemos lanzado la petición. Donde '8.8.8.8' es la IP pública desde donde hemos lanzado la petición.
  
 +==== Oracle ====
 +
 +Requisitos:
 +
 +  * Un [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#load_balancer|load balancer]] con su correspondiente [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#security_list|security list]]
 +
 +
 +Creamos dos listeners, todo ello capa 4:
 +
 +  * Uno que escuche en el [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#listener-ingress-nginx-controller-http|puerto 80]]
 +  * Otro que escuche en el [[http://wiki.legido.com/doku.php?id=informatica:oracle:oci#listener-ingress-nginx-controller-https|puerto 443]]
 ===== LoadBalancer ===== ===== LoadBalancer =====
  
Line 1443: Line 1413:
  
  
-En nuestro caso se van a redirigir todas las peticiones no a un servicio de tipo 'NodePort' como se menciona [[https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge|aquí]], sino a la "EXTERNAL-IP" (en nuestro ejemplo una IP privada, la '192.168.95.68') de un servicio de tipo 'LoadBalancer', [[informatica:linux:docker:kubernetes#nginx|este]].+En nuestro caso se van a redirigir todas las peticiones no a un servicio de tipo 'NodePort' como se menciona [[https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge|aquí]], sino a la "EXTERNAL-IP" (en nuestro ejemplo una IP privada, la '192.168.95.68') de un servicio de tipo 'LoadBalancer', [[informatica:linux:kubernetes#nginx|este]].
  
 Esquema: Esquema:
Line 1454: Line 1424:
  
   * Tiene una IP pública.   * Tiene una IP pública.
-  * Tiene una IP privada del rango de IPs del [[informatica:linux:docker:kubernetes#layer_2|pool de IPs]] de metallb.+  * Tiene una IP privada del rango de IPs del [[informatica:linux:kubernetes#layer_2|pool de IPs]] de metallb.
   * Tiene instalado docker (porque el servicio nginx va a ser creado mediante un contenedor).   * Tiene instalado docker (porque el servicio nginx va a ser creado mediante un contenedor).
  
Line 1463: Line 1433:
   ssh edgerouter   ssh edgerouter
      
-2. Crear el siguiente archivo, ajustando la IP a la que le ha sido asignada al [[informatica:linux:docker:kubernetes#nginx|servicio 'ingress-nginx-controller']] como 'EXTERNAL-IP', en este ejemplo '192.168.95.68':+2. Crear el siguiente archivo, ajustando la IP a la que le ha sido asignada al [[informatica:linux:kubernetes#nginx|servicio 'ingress-nginx-controller']] como 'EXTERNAL-IP', en este ejemplo '192.168.95.68':
  
   vim nginx.conf   vim nginx.conf
Line 1523: Line 1493:
 </code> </code>
  
-3. Crear el siguiente archivo, ajustando la IP a la que le ha sido asignada al [[informatica:linux:docker:kubernetes#nginx|servicio 'ingress-nginx-controller']] como 'EXTERNAL-IP', en este ejemplo '192.168.95.68':+3. Crear el siguiente archivo, ajustando la IP a la que le ha sido asignada al [[informatica:linux:kubernetes#nginx|servicio 'ingress-nginx-controller']] como 'EXTERNAL-IP', en este ejemplo '192.168.95.68':
  
   vim default.conf   vim default.conf
Line 1571: Line 1541:
   * Las 3 IPs públicas (las de cada servidor y la flotante) están en la misma subred   * Las 3 IPs públicas (las de cada servidor y la flotante) están en la misma subred
  
-1. Instalar los dos servidores [[informatica:linux:docker:kubernetes#nodeport_usar_este|con NodePort]]+1. Instalar los dos servidores [[informatica:linux:kubernetes#nodeport_usar_este|con NodePort]]
  
 2. Instalar y configurar en ambos servidores [[informatica:linux:keepalived|Keepalived]] 2. Instalar y configurar en ambos servidores [[informatica:linux:keepalived|Keepalived]]
Line 1813: Line 1783:
 8. **AVISO** Este paso está deprecated. Solo hay que hacerlo si se va a usar un edge router con balanceador capa 7. NO hay que hacerlo, eso lo hice en un primer intento. El balanceador que hay que poner en el edge router tiene que ser capa 4, por tanto NO hay que habilitar proxy protocol. 8. **AVISO** Este paso está deprecated. Solo hay que hacerlo si se va a usar un edge router con balanceador capa 7. NO hay que hacerlo, eso lo hice en un primer intento. El balanceador que hay que poner en el edge router tiene que ser capa 4, por tanto NO hay que habilitar proxy protocol.
  
-[[informatica:linux:docker:kubernetes#editar_configmaps_para_habilitar_use-proxy-protocol|Editar ConfigMaps para habilitar 'use-proxy-protocol']]+[[informatica:linux:kubernetes#editar_configmaps_para_habilitar_use-proxy-protocol|Editar ConfigMaps para habilitar 'use-proxy-protocol']]
  
 ==== Actualizar nginx ingress controller ==== ==== Actualizar nginx ingress controller ====
Line 1927: Line 1897:
 ==== Nginx LoadBalancer ==== ==== Nginx LoadBalancer ====
  
-En este ejemplo asumimos que tenemos un LoadBalancer habilitado, porque hemos instalado [[informatica:linux:docker:kubernetes#layer_2|un balanceador de carga por software]].+En este ejemplo asumimos que tenemos un LoadBalancer habilitado, porque hemos instalado [[informatica:linux:kubernetes#layer_2|un balanceador de carga por software]].
  
 1. Conectarse al master: 1. Conectarse al master:
Line 2014: Line 1984:
 </code> </code>
  
-Vemos que ha tomado una 'EXTERNAL-IP' del pool de direcciones definida en el pool de direcciones de [[informatica:linux:docker:kubernetes#layer_2|metallb]].+Vemos que ha tomado una 'EXTERNAL-IP' del pool de direcciones definida en el pool de direcciones de [[informatica:linux:kubernetes#layer_2|metallb]].
  
 5.3. Ejecutar: 5.3. Ejecutar:
Line 2043: Line 2013:
 Este ejemplo requiere: Este ejemplo requiere:
  
-  * Un [[informatica:linux:docker:kubernetes#service|Service]] cuyo 'metadata.name' sea 'service-whoami' +  * Un [[informatica:linux:kubernetes#service|Service]] cuyo 'metadata.name' sea 'service-whoami' 
-  * Tener instalado un [[https://kubernetes.io/docs/concepts/services-networking/ingress/|Ingress]] controller, como [[http://wiki.legido.com/doku.php?id=informatica:linux:docker:kubernetes#nginx|Nginx]]+  * Tener instalado un [[https://kubernetes.io/docs/concepts/services-networking/ingress/|Ingress]] controller, como [[http://wiki.legido.com/doku.php?id=informatica:linux:kubernetes#nginx|Nginx]]
  
 1. Conectarse al master 1. Conectarse al master
Line 2095: Line 2065:
 Este ejemplo requiere: Este ejemplo requiere:
  
-  * Un [[informatica:linux:docker:kubernetes#service|Service]] cuyo 'metadata.name' sea 'service-whoami' +  * Un [[informatica:linux:kubernetes#service|Service]] cuyo 'metadata.name' sea 'service-whoami' 
-  * Tener instalado un [[https://kubernetes.io/docs/concepts/services-networking/ingress/|Ingress]] controller, como [[http://wiki.legido.com/doku.php?id=informatica:linux:docker:kubernetes#nginx|Nginx]] +  * Tener instalado un [[https://kubernetes.io/docs/concepts/services-networking/ingress/|Ingress]] controller, como [[http://wiki.legido.com/doku.php?id=informatica:linux:kubernetes#nginx|Nginx]] 
-  * Tener instalado el [[https://kubernetes.io/docs/concepts/cluster-administration/addons/|addon]] [[http://wiki.legido.com/doku.php?id=informatica:linux:docker:kubernetes#cert_manager|Cert-manager]] +  * Tener instalado el [[https://kubernetes.io/docs/concepts/cluster-administration/addons/|addon]] [[http://wiki.legido.com/doku.php?id=informatica:linux:kubernetes#cert_manager|Cert-manager]] 
-  * Tener instalado un [[informatica:linux:docker:kubernetes#issuer|issuer]] llamado 'letsencrypt-production' +  * Tener instalado un [[informatica:linux:kubernetes#issuer|issuer]] llamado 'letsencrypt-production' 
-  * [[informatica:linux:docker:kubernetes#edge_router|Edge router]]:+  * [[informatica:linux:kubernetes#edge_router|Edge router]]:
     * Nginx     * Nginx
     * Reverse proxy a ingress-nginx-controller 'EXTERNAL-IP'     * Reverse proxy a ingress-nginx-controller 'EXTERNAL-IP'
Line 2184: Line 2154:
 https://example.com https://example.com
  
-Debería aparecer el contenido servido por el [[informatica:linux:docker:kubernetes#deployment|deployment]]+Debería aparecer el contenido servido por el [[informatica:linux:kubernetes#deployment|deployment]]
  'deployment-whoami' con un certificado SSL válido.  'deployment-whoami' con un certificado SSL válido.
  
Line 3126: Line 3096:
 1.1. [[https://docs.docker.com/engine/install/debian|Instalar docker]] en todos los nodos, los tres control plane (k8s2.local, k8s3.local y k8s4.local) y los tres workers (k8s5.local, k8s6.local y k8s7.local). 1.1. [[https://docs.docker.com/engine/install/debian|Instalar docker]] en todos los nodos, los tres control plane (k8s2.local, k8s3.local y k8s4.local) y los tres workers (k8s5.local, k8s6.local y k8s7.local).
  
-1.2. [[informatica:linux:docker:kubernetes#nodo_comun_para_control_plane_y_worker|Instalar paquetes de kubernetes]] en todos los nodos, los tres control plane (k8s2.local, k8s3.local y k8s4.local) y los tres workers (k8s5.local, k8s6.local y k8s7.local).+1.2. [[informatica:linux:kubernetes#nodo_comun_para_control_plane_y_worker|Instalar paquetes de kubernetes]] en todos los nodos, los tres control plane (k8s2.local, k8s3.local y k8s4.local) y los tres workers (k8s5.local, k8s6.local y k8s7.local).
  
-1.3. Crear un [[informatica:linux:docker:kubernetes#balanceador_capa_4_kube-apiserver|balanceador de kube-apiserver]] y unir los tres control plane al mismo.+1.3. Crear un [[informatica:linux:kubernetes#balanceador_capa_4_kube-apiserver|balanceador de kube-apiserver]] y unir los tres control plane al mismo.
  
-1.4. [[informatica:linux:docker:kubernetes#con_alta_disponibilidad|Iniciar el cluster]] en el primer control plane+1.4. [[informatica:linux:kubernetes#con_alta_disponibilidad|Iniciar el cluster]] en el primer control plane
  
-1.5. [[informatica:linux:docker:kubernetes#control_plane_solo_alta_disponibilidad|Unir al cluster]] el resto de control plane (k8s3.local y k8s4.local).+1.5. [[informatica:linux:kubernetes#control_plane_solo_alta_disponibilidad|Unir al cluster]] el resto de control plane (k8s3.local y k8s4.local).
  
-1.6. [[informatica:linux:docker:kubernetes#worker|Unir al cluster]] los tres workers.+1.6. [[informatica:linux:kubernetes#worker|Unir al cluster]] los tres workers.
  
 En este momento ya tenemos el cluster de kubernetes montado. En este momento ya tenemos el cluster de kubernetes montado.
Line 3140: Line 3110:
 2. Exponer un servicio con certificado SSL válido y que muestre la IP pública del cliente 2. Exponer un servicio con certificado SSL válido y que muestre la IP pública del cliente
  
-2.1. Instalar [[informatica:linux:docker:kubernetes#nginx_nodeport_con_afinitty_usar_este|Nginx ingress con nodeport, afinitty y proxy protocol]].+2.1. Instalar [[informatica:linux:kubernetes#nginx_nodeport_con_afinitty_usar_este|Nginx ingress con nodeport, afinitty y proxy protocol]].
  
 Como dice el paso 8, anotar los puertos HTTP y HTTPS que exponen cada uno de los nodos. Como dice el paso 8, anotar los puertos HTTP y HTTPS que exponen cada uno de los nodos.
  
-2.2. Instalar [[informatica:linux:docker:kubernetes#cert_manager|Cert-manager addon]]+2.2. Instalar [[informatica:linux:kubernetes#cert_manager|Cert-manager addon]]
  
-2.3. Crear [[informatica:linux:docker:kubernetes#issuer|issuer]] para letsencrypt en producción+2.3. Crear [[informatica:linux:kubernetes#issuer|issuer]] para letsencrypt en producción
  
-2.4. Crear un [[informatica:linux:docker:kubernetes#deployment|deployment]] que despliegue el contenedor "whoami"+2.4. Crear un [[informatica:linux:kubernetes#deployment|deployment]] que despliegue el contenedor "whoami"
  
-2.5. Exponer el anterior deployment a través de un [[informatica:linux:docker:kubernetes#service|service]].+2.5. Exponer el anterior deployment a través de un [[informatica:linux:kubernetes#service|service]].
  
-2.6. Crear un [[http://wiki.legido.com/doku.php?id=informatica:linux:docker:kubernetes#ejemplo_ingress_con_letsencrypt|ingress con letsencrypt]] para que un nombre DNS público, "example.com" llegue al servicio definido en el paso anterior.+2.6. Crear un [[http://wiki.legido.com/doku.php?id=informatica:linux:kubernetes#ejemplo_ingress_con_letsencrypt|ingress con letsencrypt]] para que un nombre DNS público, "example.com" llegue al servicio definido en el paso anterior.
  
 En este punto si: En este punto si:
  
-  * Se deshabilita momentáneamente proxy protoco (revirtiendo [[informatica:linux:docker:kubernetes#editar_configmaps_para_habilitar_use-proxy-protocol|este paso]]+  * Se deshabilita momentáneamente proxy protoco (revirtiendo [[informatica:linux:kubernetes#editar_configmaps_para_habilitar_use-proxy-protocol|este paso]]
   * Se obtiene el worker donde está corriendo el pod 'whoami'   * Se obtiene el worker donde está corriendo el pod 'whoami'
   * Se obtiene la IP privada de ese worker   * Se obtiene la IP privada de ese worker
Line 3174: Line 3144:
 En este ejemplo vamos a instalar dos servidores, que van a compartir una IP flotante para tener redundancia. En este ejemplo vamos a instalar dos servidores, que van a compartir una IP flotante para tener redundancia.
  
-3.1. Seguir [[informatica:linux:docker:kubernetes#redundancia|estas instrucciones]].+3.1. Seguir [[informatica:linux:kubernetes#redundancia|estas instrucciones]].
  
 3.2. Crear un nombre DNS, "example.com", que apunte a la IP pública flotante, por ejemplo '8.8.8.8' 3.2. Crear un nombre DNS, "example.com", que apunte a la IP pública flotante, por ejemplo '8.8.8.8'
Line 3403: Line 3373:
 Requisitos: Requisitos:
  
-  * Un [[informatica:linux:docker:kubernetes#cluster_externo_glusterfs|Cluster glusterfs]] funcionando. En este ejemplo los 3 nodos serán a la vez:+  * Un [[informatica:linux:kubernetes#cluster_externo_glusterfs|Cluster glusterfs]] funcionando. En este ejemplo los 3 nodos serán a la vez:
     * Control Plane     * Control Plane
     * Workers     * Workers
informatica/linux/kubernetes.1664005567.txt.gz · Last modified: 2022/09/24 07:46 by javi