5. 1 Networking For Applications Flashcards
Que significa SDN
Openshift Software-defined networking
Cuales son los 5 requerimientos que satisface el SDN
Manejar tráfico de red programática mente
Manejar comunicación entre contenedores del mismo proyecto
Manejar comunicación entre pods del mismo u otro proyecto
Manejar comunicación se un pod a un servicio
Manejar comunicación entre una red externa a servicio o de contenedores a redes externas
Que es CNI
Container network interface
Como se crea un recurso desde un archivo todo.yaml
oc create -f todo.yaml
Como se copia un archivo llamado test.txt dentro del pod mypod a la ruta /tmp
oc cp test.txt mypod:/tmp
Como nos firmamos por ssh al pod mysql-73 con bash mysql-73-bdhfo1h-hhdj
oc rsh mysql-73-bdhfo1h-hhdj /bin/bash
Como se expone el servicio de la app frontend en el hostname todo.apps.ocp4.example.com
oc expose service/frontend –hostname todo.apps.ocp4.example.com
Como se validan los servicios expuestos
oc get routes
Como se ven los logs del pod frontend para corregir el problema de red
oc logs PODNAME
Como obtener ip de cluster del servicio frontend usando jsonpath
oc get service/frontend -o jsonpath=“{.spec.clusterIP}{‘\n’}”
Como se hace crea una imagen de debug del deployment MySQL imagen registry.access.redhat.com/ubi8/ubi:8.0
oc debug -t deployment/mysql –image registry.access.redhat.com/ubi8/ubi:8.0
Como se hace la validación de aplicación por curl al puerto 8080
curl -m 10 -v http://clusterIP:8080
Como nos conectamos a un pod por su ip privada
oc get pods -o wide -l name=frontend
debug pod -t deployment/ MySQL –image registry example
Como se obtienen los servicios
oc get svc
Como podemos ver la información del servicio frontend
oc describe svc/frontend
Como se ve la información de Labels y una linea posterior de despliegue
oc describe deployment/frontend | grep Labels -A1
Como se edita un servicio
oc edit svc/frontend
Como se modifica el selector name de un servicio
oc edit svc/frontend
Proceso completo para troubleshooting de red
- Crear deployments frontend/mysql y servicios
- Obtener logs de pod de app
- Obtener ip de mysql, debug a pod frontend, curl a mysql service
- Obtener ip de frontend, debug a pod mysql, curl a frontend
- Obtener ip interna de frontend, debug a pod mysql, curl a ipinterna y puerto interno.
- Describir servicio de frontend para mostrar el selector, endpoints
- Editar servicio frontend y cambiar selector por el correcto
- Prueba de url de servicio frontend
Estructura de servicio en yaml
kind: service
apiVersion: v1
metadata:
name: application-frontend
labels:
app: frontend-svc
spec:
ports:
- name: HTTP
protocol: TCP
port: 443
targetPort: 8443
selector:
app: shopping-cart
name: frontend
type:ClusterIP
Como se muestra el operador de dns
oc describe DNS.operator/default
Cuales son los servicios que DNS resuelve
A para servicios SRV port
Como obtener el cluster domain e ip
oc describe dns.operator/default
Status:
Cluster Domain: cluster.local
Cluster IP: 172.30.0.10
Como te puedes firmar al pod por ssh example-6c4984d949-7m26r
oc rsh example-6c4984d949-7m26r \
> curl hello.test.svc.cluster.local:8080
Que estructura de servicio crea CoreDNS por defecto
_port-name._port-protocol.svc-name.namespace.svc.cluster-domain.cluster-domain.
Ejemplo
_443-tcp._tcp.https.frontend.svc.cluster.local.
Que es OVN kubernetes
Open Virtual Network para kubernetes
Openshift SDN
OVN-kubernetes
Kuryr son ejemplos de
default network providers
Como se obtiene la configuracion del network cluster en yaml
oc get network/cluster -o yaml
apiVersion: config.openshift.io/v1
kind: Network
…output omitted…
spec:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
externalIP:
policy: {}
networkType: OpenshiftSDN
serviceNetwork:
- 172.30.0.0/16
…output omitted…
Que es CIDR
Classless Inter-Domain Routing
Como se diagnostica un error de red en dos pods frontend y mysql
oc expose service frontend –hostname todo.apps.ocp4.example.com
oc get routes
ver logs es la
oc logs frontend-57b8b445df-f56qh
App is ready at : 8080
Obtener IP de mysql
oc get service/mysql -o jsonpath=”{.spec.clusterIP}{‘\n’}”
Crear debug pod desde frontend app
oc debug -t deployment/frontend
Telnet hacia mysql
curl -v telnet://172.30.103.29:3306
——————————————
Obtener ip de frontend service
oc get service/frontend -o jsonpath=”{.spec.clusterIP}{‘\n’}”
Crear pod debug de mysql
oc debug -t deployment/mysql –image registry.access.redhat.com/ubi8/ubi:8.4
curl hacia aplicacion frontend
curl -m 10 -v http://172.30.23.147:8080
- Rebuilt URL to: http://172.30.23.147:8080/
- Trying 172.30.23.147…
- TCP_NODELAY set
- Connection timed out after 10000 milliseconds
- Closing connection 0
curl: (28) Connection timed out after 10000 milliseconds
Como obtener la ip privada de la app frontend para comprobar si el servicio esta abajo o es solo la red
oc get pods -o wide -l name=frontend
NAME READY STATUS RESTARTS AGE IP …
frontend-57b8b445df-f56qh 1/1 Running 0 39m 10.128.2.61 …
oc debug -t deployment/mysql –image registry.access.redhat.com/ubi8/ubi:8.4
curl -v http://10.128.2.61:8080/todo
- Trying 10.128.2.61…
- TCP_NODELAY set
- Connected to 10.128.2.61 (10.128.2.61) port 8080 (#0)
> GET /todo/ HTTP/1.1
> Host: 10.128.2.61:8080
> User-Agent: curl/7.61.1
> Accept: /
>
< HTTP/1.1 200 OK
…output omitted…
Comprobar configuracion de frontsend service
oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend ClusterIP 172.30.23.147 <none> 8080/TCP 93m
mysql ClusterIP 172.30.103.29 <none> 3306/TCP 93m</none></none>
[student@workstation network-sdn]$ oc describe svc/frontend
Name: frontend
Namespace: network-sdn
Labels: app=todonodejs
name=frontend
Annotations: <none>
Selector: name=api
Type: ClusterIP
IP: 172.30.23.147
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
Endpoints: <none>
Session Affinity: None
Events: <none></none></none></unset></none>
oc describe deployment/frontend | \
> grep -A1 Labels
Labels: app=todonodejs
name=frontend
–
Labels: app=todonodejs
name=frontend
oc edit svc/frontend
[student@workstation network-sdn]$ oc describe svc/frontend
Name: frontend
Namespace: network-sdn
Labels: app=todonodejs
name=frontend
Annotations: <none>
Selector: name=frontend
Type: ClusterIP
IP: 172.30.169.113
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
Endpoints: 10.128.2.61:8080
Session Affinity: None
Events: <none></none></unset></none>
Estructura yaml de una ruta (route)
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: a-simple-route 1
labels: 2
app: API
name: api-frontend
spec:
host: api.apps.acme.com 3
to:
kind: Service
name: api-frontend 4
port: 5
targetPort: 8443
Como se genera una ruta del servicio llamada edge con “create route” api-frontend con hostname api.apps.acme.com key api.key y cert api.cert
oc create route edge NAME
–service api-frontend
–hostname api.apps.acme.com
–key api.key
–cert api.crt
Como se establece un certificado mountado desde un volumen en modo lectura desde yaml
volumeMount:
- name: tls-certs
readOnly: true
mountPath: /usr/local/etc/ssl/ssl
- volumes:
- name: tls_certs
- secret:
- secretName: