1
votes

La politique réseau kubernetes autorise le trafic externe vers Internet uniquement

J'essaie de mettre en œuvre une stratégie réseau dans mon cluster kubernetes pour isoler mes pods dans un espace de noms mais leur permettre toujours d'accéder à Internet depuis que j'utilise Azure MFA pour l'authentification.

C'est ce que j'ai essayé mais je n'arrive pas à le faire fonctionner. Ingress fonctionne comme prévu mais ces règles bloquent toutes les sorties.

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: grafana-policy
  namespace: default
spec:
  podSelector:
    matchLabels: 
      app: grafana
  ingress:
  - from:
    - podSelector:
       matchLabels: 
        app: nginx-ingress

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress 

Quelqu'un qui peut me dire comment je fais fonctionner la configuration ci-dessus pour que j'autorise également le trafic Internet mais bloque le trafic vers d'autres POD? p>


0 commentaires

3 Réponses :


0
votes

Pouvez-vous essayer comme ça?

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress,Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0

Cela devrait permettre la sortie vers toutes les destinations. Mais si la destination est un pod, elle doit être bloquée par les règles d'entrée manquantes de la même NetworkPolicy.


1 commentaires

J'ai déjà essayé quelque chose comme ça, de toute façon je viens d'ajouter votre NetworkPolicy et mon pod est capable de parler avec Azure mais le trafic de pod à pod est toujours autorisé. Je teste en apportant une console au pod et en faisant curl vers un autre pod dans le même espace de noms.



0
votes

Kubernetes autorisera tout le trafic sauf s'il existe une politique réseau. Si une stratégie réseau est définie, elle autorisera uniquement le trafic défini par la stratégie réseau et refusera tout le reste.

Par défaut, les pods ne sont pas isolés; ils acceptent le trafic de n'importe quelle source.

Les pods deviennent isolés grâce à une NetworkPolicy qui les sélectionne. Une fois qu'il y a un NetworkPolicy dans un espace de noms sélectionnant un pod particulier, ce pod rejettera toutes les connexions qui ne sont autorisées par aucun NetworkPolicy. (Les autres pods de l'espace de noms qui ne sont sélectionnés par aucun NetworkPolicy continueront d'accepter tout le trafic.)

https: // kubernetes.io/docs/concepts/services-networking/network-policies/#isolated-and-non-isolated-pods

Vous devrez donc également spécifier les règles de sortie pour que cela fonctionne comme vous le souhaitez :)


0 commentaires

1
votes

Essayez d'ajouter une politique de refus de tout réseau par défaut sur l'espace de noms, puis d'ajouter une politique d'autorisation Internet après.

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-internet-only
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
      - ipBlock:
        cidr: 0.0.0.0/0
          except:
            - 10.0.0.0/8
            - 192.168.0.0/16
            - 172.16.0.0/20
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

Cela bloquera tout le trafic à l'exception d'Internet sortant. Dans la stratégie Autoriser uniquement Internet, il existe une exception pour toutes les adresses IP privées, ce qui empêchera la communication de pod à pod. Vous devrez également autoriser Egress to Core DNS à partir de kube-system si vous avez besoin de recherches DNS, car la politique default-deny-all bloquera les requêtes DNS.


2 commentaires

Cela ne fonctionne pas pour moi: (lorsque j'ajoute cela, mes PODs sont toujours capables de communiquer mais ils ne peuvent pas accéder à Internet.


Je pense que 172.16.0.0/20 devrait être 172.16.0.0/12 selon en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses