No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Compra acceso a todo Platzi por 1 a帽o

Antes: $249

Currency
$209/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscr铆bete

Termina en:

15D
22H
29M
5S
Curso de Kubernetes

Curso de Kubernetes

Marcos Lilljedahl

Marcos Lilljedahl

Enrutando el tr谩fico utilizando servicios

17/33
Recursos

Aportes 11

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Listo

sudo iptables -t nat -L OUTPUT
sudo iptables -t nat -nL KUBE-SERVICES
sudo iptables -t nat -nL KUBE-SVC-WHBE4CO6OW2LBOXF
sudo iptables -t nat -nL KUBE-SEP-ISQ22OJBOFERAA4G
kubectl get pods -o wide
kubectl describe service httpenv
kubectl describe endpoints httpenv 
kubectl get endpoints httpenv -o yaml

Si estas usando minikube tenes que entrar al cluster por ssh para poder ver las reglas de iptables.

Cuando inicias minikube minikube start --nodes 5 -p cluster_name luego de -p es el profile de tu cluster, pone el nombre que creas conveniente. Ejemplo minikube start --nodes 5 -p test

Luego entras por ssh
minikube ssh -p cluster_name en mi caso minikube ssh -p test

Adentro revisas las reglas de iptables con los comandos que paso el profesor:

  • sudo iptables -t nat -L OUTPUT

output

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
KUBE-SERVICES  all  --  anywhere             anywhere             /* kubernetes service portals */
DOCKER_OUTPUT  all  --  anywhere             host.minikube.internal 
DOCKER     all  --  anywhere            !localhost/8          ADDRTYPE match dst-type LOCAL
  • sudo iptables -t nat -nL KUBE-SERVICES

output

Chain KUBE-SERVICES (2 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  tcp  -- !10.244.0.0/16        10.96.0.1            /* default/kubernetes:https cluster IP */ tcp dpt:443
KUBE-SVC-NPX46M4PTMTKRN6Y  tcp  --  0.0.0.0/0            10.96.0.1            /* default/kubernetes:https cluster IP */ tcp dpt:443
KUBE-MARK-MASQ  udp  -- !10.244.0.0/16        10.96.0.10           /* kube-system/kube-dns:dns cluster IP */ udp dpt:53
KUBE-SVC-TCOU7JCQXEZGVUNU  udp  --  0.0.0.0/0            10.96.0.10           /* kube-system/kube-dns:dns cluster IP */ udp dpt:53
KUBE-MARK-MASQ  tcp  -- !10.244.0.0/16        10.96.0.10           /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53
KUBE-SVC-ERIFXISQEP7F7OF4  tcp  --  0.0.0.0/0            10.96.0.10           /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53
KUBE-MARK-MASQ  tcp  -- !10.244.0.0/16        10.96.0.10           /* kube-system/kube-dns:metrics cluster IP */ tcp dpt:9153
KUBE-SVC-JD5MR3NA4I4DYORP  tcp  --  0.0.0.0/0            10.96.0.10           /* kube-system/kube-dns:metrics cluster IP */ tcp dpt:9153
KUBE-MARK-MASQ  tcp  -- !10.244.0.0/16        10.107.149.250       /* default/httpenv cluster IP */ tcp dpt:8888
KUBE-SVC-6ZVPY37LGINYSSPR  tcp  --  0.0.0.0/0            10.107.149.250       /* default/httpenv cluster IP */ tcp dpt:8888
KUBE-NODEPORTS  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL

En mi caso voy a ver las reglas de la ip del servicio 10.107.149.250

  • sudo iptables -t nat -nL sudo iptables -t nat -nL KUBE-SVC-6ZVPY37LGINYSSPR

output

Chain KUBE-SVC-6ZVPY37LGINYSSPR (1 references)
target     prot opt source               destination         
KUBE-SEP-UTACH3V2EFGNGWSL  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.10000000009
KUBE-SEP-OBKCIYINKH75NNAU  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.11111111101
KUBE-SEP-2BAZO7KUFC5W4VUP  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.12500000000
KUBE-SEP-H2O72PL5EVFXTZBK  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.14285714272
KUBE-SEP-BZIDQWP33MHSLDLW  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.16666666651
KUBE-SEP-U4OA2VHREJS6ZEJF  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.20000000019
KUBE-SEP-ZN5OKFENC7VMGVKJ  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.25000000000
KUBE-SEP-KUCY6OLHFSCAHRUH  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.33333333349
KUBE-SEP-2L47EJAEPVOMIKY7  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ statistic mode random probability 0.50000000000
KUBE-SEP-AOU4T5P455EZE2YM  all  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */

Veo alguna regla para revisar

  • sudo iptables -t nat -nL KUBE-SEP-UTACH3V2EFGNGWSL

output

Chain KUBE-SEP-UTACH3V2EFGNGWSL (1 references)
target     prot opt source               destination         
KUBE-MARK-MASQ  all  --  10.244.1.3           0.0.0.0/0            /* default/httpenv */
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            /* default/httpenv */ tcp to:10.244.1.3:8888

Con kubectl get service anotamos el cluster ip del servicio.
Vamos a ver las reglas de ip-table (Iptables tiene diferentes tablas: nat, filtros, ro, etc.) del equipo local para ver como hace k8s para anotar este trafico: sudo iptables 鈥搕 nat 鈥揕 OUTPUT. Con esto vamos a listar las reglas (el chain) de output.
Vamos a ver que tenemos dos targets: DOCKER (esto lo genera docker internamente) y KUBE-SERVICES (hace las reglas de enrutado outbound salientes de k8s)
Para ver las reglas del chain KUBE-SERVICES: sudo iptables 鈥搕 nat 鈥搉L KUBE-SERVICES (Vamos a ver muchas reglas y el que administra todas esas reglas es KUBE-PROXY cada vez que creamos un pod o un servicio en nuestro nodo.) Lo importante es que busques la ip que se asigno al servicio cuando se creo y anotar el target del servicio (es el c贸digo que esta mas a la izquierda)
sudo iptables 鈥搕 nat 鈥搉L EL_TARGET_QUE_ANOTAMOS nos muestra varios chain enrutados y cada una de las derivaciones de estos son una probabilidad estad铆stica. Cuando se quiere enrutar el trafico, iptables lo hace de manera probabil铆stica.
Para ver hacia donde se dirige este trafico vamos a agarrar uno de los target de los chains: sudo iptables 鈥搕 nat 鈥搉L EL_TARGET_QUE_ANOTAMOS. Esto hace un mascarade y me dice que todo el trafico que yo quiero mandar a esa ip virtual que hab铆amos copiado tiene que ir al nodo que aparece mas a la derecha y esa es la ip privada de nuestro nodo de k8s que esta registrado.

ENDPOINTS son las direcciones ip de un servicio a las que necesitar铆amos acceder en caso de que quisi茅ramos llegar a ese servicio. Podemos encontrarlos con kubectl describe service NOMBRE_DEL_SERVICIO
Ah铆 va a aparecer la opci贸n ENDPOINTS donde vamos ver cada una de las direcciones ip de nuestros pods. Para ver mas datos: kubectl describe endpoints NOMBRE_DEL_SERVICIO
Tambien se puede ver con: kubectl get endpoints NOMBRE_DEL_SERVICIO 鈥搊 yaml

Al comienzo sent铆 este curso super persado. Pero poco a poco se ha ido dando muy muy bien

驴Te quedaste con dudas sobre qu茅 es IPTABLES?


Ac谩 algo de info: 馃憞
Iptables es un firewall que se ocupa de controlar el tr谩fico de datos en nuestra red. Esta utilidad est谩 habilitada como comando en el kernel de linux.
Hay tres reglas muy importantes para el filtrado de datos que tienes que tener en cuenta:

  • Input: paquetes de datos que entran a nuestra red
  • Output: paquetes de datos que salen de nuestra red
  • Forward: paquetes de datos que se redireccionan desde nuestra red

Dentro de cada una puedes habilitar o bloquear tr谩fico en protocolos de transporte como UDP/TCP (de acuerdo con el modelo OSI).
.
Les dejo algo de informaci贸n para que chequen por ustedes mismxs.馃憞

Endpoints: Es un recurso de kubernetes que representa las direcciones ip de un servicio a las cuales necesitariamos acceder en el caso de que quisieramos llegar a ese servicio. Adem谩s, endpoints es el 煤nico recurso en k8s que esta en plural.

Un poco complicado por todos los comandos

excelente explicaci贸n 馃槂

Para eliminar el servicio creado el comando seria en este caso:
kubectl delete svc httpenv
o con remplazando 鈥渟vc鈥 por service, son alias y es lo mismo.

El NodePort tambi茅n habilita el puerto en el Master?

Con el enrutado de tr谩fico se cierra la comprensi贸n sobre el tema de exposici贸n de servicios.
Gracias鈥!!!