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:55] 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 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 1271: Line 1224:
   * 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]]   * 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 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 =====
  
informatica/linux/kubernetes.1664006154.txt.gz · Last modified: 2022/09/24 07:55 by javi