1 votes

Comment combiner podSelector avec les ports dans une politique réseau Kubernetes ?

J'ai un pod appelé mysql-1 avec les ports 3306 et 3307 ouverts.
Je veux créer une politique réseau qui autorise la connexion entrante de backend-1 au 3306 et backend-2 au 3307.
Pour l'instant, tout ce que j'ai pu penser est cette politique :

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: mysql-ingress-policy-1
  namespace: v2ci
spec:
  podSelector:
    matchLabels:
      app: mysql-1
      release: v2
  types:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: backend-1
          release: v2
    - podSelector:
        matchLabels:
          app: backend-1
          release: v2
    ports:
    - protocol: TCP
      port: 3306
    - protocol: TCP
      port: 3307

Le problème est que avec cette politique, chaque pod backend a accès aux deux ports.
Est-il possible de combiner ports avec podSelector d'une manière ou d'une autre, ou dois-je juste créer une politique réseau pour chaque pod backend ?

0 votes

Tel que je le sais, il n'y a pas de moyen évident d'obtenir un tel comportement. Ainsi, créer deux politiques réseau semble être une option viable.

0 votes

Je suis arrivé à la même conclusion aussi. J'ai également parcouru le code k8s pour voir s'il y a un moyen de combiner les ports et podSelectors, je n'ai rien trouvé. Je suppose que c'est intentionnel. Comme vous l'avez dit, il devrait s'agir de deux politiques réseau différentes.

0 votes

Je ne peux pas voir l'étiquette backend-2 dans ce fichier yaml. Mais à part cela, vous pouvez fournir deux sections - from différentes...

0voto

deHaar Points 131

Il n'y a pas de backend-2 mentionné dans votre fichier yaml, mais le changer uniquement ne mènerait pas au résultat souhaité.

Vous devez fournir deux sections - from différentes, une pour chaque backend:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: mysql-ingress-policy-1
  namespace: v2ci
spec:
  podSelector:
    matchLabels:
      app: mysql-1
      release: v2
  types:
  - Ingress
  ingress:
  # route backend-1 to port 3306
  - from:
    - podSelector:
        matchLabels:
          app: backend-1
          release: v2
    ports:
    - protocol: TCP
      port: 3306
  # route backend-2 to port 3307
  - from:
    - podSelector:
        matchLabels:
          app: backend-2  # vraiment appliquer un pod différent que dans l'autre "from"
          release: v2
    ports:
    - protocol: TCP
      port: 3307

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X