Créer des règles de réseau Kubernetes pour les clusters standards

Cette page explique comment configurer le trafic intracluster pour un cluster standard à l'aide des règles de réseau Kubernetes dans Google Distributed Cloud (GDC) air-gapped.

Une NetworkPolicy Kubernetes spécifie les groupes de pods autorisés à communiquer entre eux et avec d'autres points de terminaison du réseau. Les ressources NetworkPolicy utilisent des libellés pour sélectionner les pods et définir des règles qui spécifient le trafic autorisé vers les pods sélectionnés. Ces règles sont limitées au niveau local et ne s'appliquent qu'au trafic au sein du cluster dans lequel elles sont définies, sauf si une règle d'autorisation globale est créée. Dans ce cas, la communication avec les points de terminaison d'autres clusters standards et partagés est également autorisée.

Avant de commencer

Pour configurer des règles de réseau Kubernetes, vous devez disposer des autorisations nécessaires dans le cluster pour créer, modifier et supprimer des ressources NetworkPolicy dans les espaces de noms concernés.

Créer une règle de pod à pod intracluster

Ces règles contrôlent le trafic entre les pods d'un même cluster standard.

Créer une règle d'entrée de pod à pod intra-cluster

  • Pour autoriser le trafic entrant de pod à pod dans le cluster, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-intra-cluster-ingress-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              Kubernetes.io/metadata.name: PEER_NAMESPACE
          podSelector:
            matchLabels:
              PEER_LABEL_KEY: PEER_LABEL_VALUE
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.
    • PEER_NAMESPACE : espace de noms du pair dans le cluster standard.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail concernées. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Par exemple, si SUBJECT_LABEL_KEY est défini sur app et que SUBJECT_LABEL_VALUE est défini sur backend, les charges de travail portant le libellé app: backend reçoivent le trafic.
    • PEER_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail homologues.
    • PEER_LABEL_VALUE : valeur associée à PEER_LABEL_KEY.
    • PORT : port sur la charge de travail concernée où le trafic est autorisé.

Créer une règle de sortie de pod à pod intra-cluster

  • Pour autoriser le trafic de sortie de pod à pod au sein du cluster, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-egress-intra-cluster-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Egress
      egress:
      - to:
        - namespaceSelector:
            matchLabels:
              Kubernetes.io/metadata.name: PEER_NAMESPACE
          podSelector:
            matchLabels:
              PEER_LABEL_KEY: PEER_LABEL_VALUE
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.
    • PEER_NAMESPACE : espace de noms du pair dans le cluster standard.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail concernées. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend envoient le trafic.
    • PEER_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail homologues.
    • PEER_LABEL_VALUE : valeur associée à PEER_LABEL_KEY.
    • PORT : port de la charge de travail homologue sur lequel le trafic est autorisé.

Créer une règle de pod à pod intracluster à l'aide d'un équilibreur de charge

Ces règles contrôlent le trafic entre les pods d'un même cluster lorsque le trafic est acheminé via un équilibreur de charge externe.

Créer une règle d'entrée de pod à pod intracluster à l'aide d'un équilibreur de charge

  • Pour autoriser le trafic entrant de pod à pod intra-cluster à l'aide d'un équilibreur de charge, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-intra-cluster-ingress-traffic-via-elb
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Ingress
      ingress:
      - from:
        - ipBlock:
            cidr: EGRESS_NAT_IP/32
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail concernées. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Par exemple, si SUBJECT_LABEL_KEY est défini sur app et que SUBJECT_LABEL_VALUE est défini sur backend, les charges de travail portant le libellé app: backend reçoivent le trafic.
    • EGRESS_NAT_IP : adresse IP NAT de sortie du pod source.
    • PORT : port sur la charge de travail concernée où le trafic est autorisé.

Créer une règle de sortie de pod à pod intracluster à l'aide d'un équilibreur de charge

  • Pour autoriser le trafic de sortie de pod à pod intra-cluster à l'aide d'un équilibreur de charge, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-intra-cluster-egress-traffic-via-elb
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: ELB_EXTERNAL_IP/32
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail concernées. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend envoient le trafic.
    • ELB_EXTERNAL_IP : adresse IP externe de l'équilibreur de charge.
    • PORT : port du point de terminaison externe vers lequel le trafic est autorisé.

Créer une règle externe à l'organisation

Ces règles contrôlent le trafic entre un pod d'un cluster standard et un point de terminaison externe (toute adresse IP en dehors du cluster).

Créer une règle d'entrée pour le trafic externe à l'organisation

  • Pour autoriser le trafic entrant à partir d'un point de terminaison externe à l'organisation, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-ingress-from-organization-external-to-standard-cluster-pod
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Ingress
      ingress:
      - from:
        - ipBlock:
            cidr: EXTERNAL_CIDR
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail concernées. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Par exemple, si SUBJECT_LABEL_KEY est défini sur app et que SUBJECT_LABEL_VALUE est défini sur backend, les charges de travail portant le libellé app: backend reçoivent le trafic.
    • EXTERNAL_CIDR : CIDR externe, par exemple 20.0.0.0/16.
    • PORT : port sur la charge de travail concernée où le trafic est autorisé.

Créer une règle de sortie pour le trafic externe à l'organisation

  • Pour autoriser le trafic de sortie vers un point de terminaison externe à l'organisation, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-egress-from-standard-cluster-pod-to-organization-external
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector:
        matchLabels:
          SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: EXTERNAL_CIDR
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.
    • SUBJECT_LABEL_KEY : clé du libellé utilisé pour sélectionner les charges de travail concernées. Par exemple, app, tier ou role.
    • SUBJECT_LABEL_VALUE : valeur associée à SUBJECT_LABEL_KEY. Par exemple, si SUBJECT_LABEL_KEY est app et que SUBJECT_LABEL_VALUE est backend, les charges de travail portant le libellé app: backend envoient le trafic.
    • EXTERNAL_CIDR : CIDR externe, par exemple 20.0.0.0/16.
    • PORT : port du point de terminaison externe vers lequel le trafic est autorisé.

Créer une règle "Tout autoriser"

Les règles suivantes peuvent être utilisées pour autoriser explicitement tout le trafic. Cela permet la communication avec les points de terminaison d'autres clusters standards et partagés.

Créer une règle d'entrée "allow-all"

  • Pour autoriser tout le trafic entrant, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-all-ingress-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
      ingress:
      - {}
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.

Créer une règle de sortie "allow-all"

  • Pour autoriser tout le trafic sortant, créez et appliquez la ressource suivante :

    kubectl --kubeconfig CLUSTER_API_SERVER apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-all-egress-traffic
      namespace: SUBJECT_NAMESPACE
    spec:
      podSelector: {}
      policyTypes:
      - Egress
      egress:
      - {}
    EOF
    

    Remplacez les éléments suivants :

    • CLUSTER_API_SERVER : chemin d'accès au fichier kubeconfig du serveur de l'API Cluster. Si vous n'avez pas encore généré de fichier kubeconfig pour le serveur d'API, consultez Se connecter pour en savoir plus.
    • SUBJECT_NAMESPACE : espace de noms du sujet dans le cluster standard.