Skip to content

Latest commit

 

History

History
105 lines (80 loc) · 3.1 KB

TP10.md

File metadata and controls

105 lines (80 loc) · 3.1 KB

Filtrage flux L7

Ce TP se déroule sur un cluster DigitalOcean.

Sommaire

But du TP

  • Apprendre à construire une CNP L7

1.Créer le NS red

kubectl create ns red

2.Creer un pod basé sur l'image stefanprodan/podinfo dans le NS red

Créeons un déploiment avec un réplica unique et exposons-le

kubectl create deployment podinfo --image=stefanprodan/podinfo --namespace=red
kubectl expose deployment podinfo --port=80 --target-port=9898 --namespace=red

3.Vérifier que vous pouvez désactiver un Pod en faisant un POST sur /readyz/disable (fonctionnalité de l'appli podinfo)

On crée un Pod nommé debug dans le NS red afin de requeter en L7 le svc podinfo :

kubectl run debug-pod -it --rm --restart=Never --image=nicolaka/netshoot --namespace=red -- bash
# curl -sv -X POST http://podinfo.red.svc/readyz/disable
 
# curl -sv http://podinfo.red.svc/readyz

4.Créer une Netpol L7

Créer une NetworkPolicy L7 (composée éventuellement de plusieurs règles) qui

  • s'applique sur Podinfo
  • empêche le POST sur "/readyz/disable"
  • autorise le GET sur "/readyz"

La documentation est accessible ici : https://docs.cilium.io/en/v1.12/policy/language/#layer-7-examples .

Voici un exemple à adapter :

## l7-policy.yaml
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "rule1"
spec:
  description: "Allow HTTP GET /public from env=prod to app=service"
  endpointSelector:
    matchLabels:
      app: service
  ingress:
  - fromEndpoints:
    - matchLabels:
        env: prod
    toPorts:
    - ports:
      - port: "80"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/public"
kubectl apply -f l7-policy.yaml -n red

Pour cela utilisez une règle CiliumNetwork Policy L7

Des indices :

  • préciser bien que la NP s'applique à un déploiement (app=podinfo)
  • préciser que la source est le Pod debug-po (run=debug-pod)
  • preciser le bon port TCP à filtrer vu du Pod

5.Inspecter les Headers HTTP (curl -sv) avant et après l'apllication de la règle.

En déduire le composant logiciel tiers utilisé par Cilium qui bloque les appels L7.

On constate même la présence d'un process envoy sur le Node en question, en listant les process (via nod-shell par exemple) :

root@node-7io28:/# ps -efd | grep envoy
root      108864    3075  0 13:59 ?        00:00:02 cilium-envoy -l info -c /var/run/cilium/bootstrap.pb --base-id 0 --log-format %t|%l|%n|%v

Cleanup

kubectl delete -f l7-policy.yaml -n red

Revenir au sommaire | TP Suivant