No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Kubernetes

Curso de Kubernetes

Marcos Lilljedahl

Marcos Lilljedahl

Enrutando el tráfico utilizando servicios

17/33
Recursos

Aportes 9

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

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

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 –t nat –L 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 –t nat –nL 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 –t nat –nL 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 –t nat –nL 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 –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

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

Un poco complicado por todos los comandos

excelente explicación 😃

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.

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…!!!