Skip to content

Latest commit

 

History

History
183 lines (166 loc) · 3.31 KB

507_Network_Policies.md

File metadata and controls

183 lines (166 loc) · 3.31 KB

Network Policies

Desplegar aplicacion basica

  • Crear los siguientes objetos
apiVersion: v1
kind: Service
metadata:
  name: sql01
spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    name: mysql
  type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    name: webapp-pod
  type: LoadBalancer
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: mysql
  name: mysql
spec:
  containers:
  - env:
    - name: MYSQL_ROOT_PASSWORD
      value: password123
    image: mysql:5.7
    imagePullPolicy: Always
    name: mysql
    ports:
    - containerPort: 3306
      protocol: TCP
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: webapp-pod
  name: webapp-pod
spec:
  containers:
  - image: kodekloud/simple-webapp-mysql
    name: webapp
    env:
      - name: DB_Host
        value: sql01
      - name: DB_User
        value: root
      - name: DB_Password
        value: password123
  • Conectarnos con el navegador a la IP del balanceador
  • ¿Funciona?

Aplicar NetworkPolicy a mysql-pod

  • Aplicar la siguiente NetworkPolicy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: mysql-policy
spec:
  podSelector:
    matchLabels:
      name: mysql
  policyTypes:
  - Ingress
  - Egress
  ingress: []
  egress: []
  • Volver a probar la conexion. ¿Funciona? ¿Por que? (OJO: puede ser necesario esperar un poco para ver el resultado)
  • Modificar las network policies de forma que la app vuelva a funcionar, pero este protegida (no vale permitir todo)
    • PISTA: Usar "kubectl describe netpol" para ver como se estan interpretando los selectores
Pista
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: mysql-policy
spec:
  podSelector:
    matchLabels:
      name: mysql
  policyTypes:
  - Ingress
  - Egress
  ingress:
    - from:
      - podSelector:
          matchLabels:
            name: webapp-pod
      ports:
      - protocol: TCP
        port: 3306
  egress: []

Aplicar NetworkPolicy a webapp-pod

  • Aplicar la siguiente NetworkPolicy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: webapp-policy
spec:
  podSelector:
    matchLabels:
      name: webapp-pod
  policyTypes:
  - Ingress
  - Egress
  ingress: []
  egress: []
  • Volver a probar la conexion. ¿Funciona? ¿Por que? (OJO: puede ser necesario esperar un poco para ver el resultado)
  • Modificar las network policies de forma que la app vuelva a funcionar, pero este protegida (no vale permitir todo)
    • ¡OJO! La configuracion de conexion a la bbdd esta por nombre del servicio (sql01), asi que hay que permitir las consultas DNS en el Egress
Pista
kind: NetworkPolicy
metadata:
  name: webapp-policy
spec:
  podSelector:
    matchLabels:
      name: webapp-pod
  policyTypes:
  - Ingress
  - Egress
  ingress:
    - from: []
      ports:
        - protocol: TCP
          port: 8080
  egress:
    - to:
      - podSelector:
          matchLabels:
            name: mysql
      ports:
        - protocol: TCP
          port: 3306
    - ports:
        - protocol: UDP
          port: 53
        - protocol: TCP
          port: 53