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 EOFRemplacez 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,tierourole.SUBJECT_LABEL_VALUE: valeur associée àSUBJECT_LABEL_KEY. Par exemple, siSUBJECT_LABEL_KEYest défini surappet queSUBJECT_LABEL_VALUEest défini surbackend, les charges de travail portant le libelléapp: backendreç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 EOFRemplacez 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,tierourole.SUBJECT_LABEL_VALUE: valeur associée àSUBJECT_LABEL_KEY. Par exemple, siSUBJECT_LABEL_KEYestappet queSUBJECT_LABEL_VALUEestbackend, les charges de travail portant le libelléapp: backendenvoient 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 EOFRemplacez 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,tierourole.SUBJECT_LABEL_VALUE: valeur associée àSUBJECT_LABEL_KEY. Par exemple, siSUBJECT_LABEL_KEYest défini surappet queSUBJECT_LABEL_VALUEest défini surbackend, les charges de travail portant le libelléapp: backendreç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 EOFRemplacez 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,tierourole.SUBJECT_LABEL_VALUE: valeur associée àSUBJECT_LABEL_KEY. Par exemple, siSUBJECT_LABEL_KEYestappet queSUBJECT_LABEL_VALUEestbackend, les charges de travail portant le libelléapp: backendenvoient 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 EOFRemplacez 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,tierourole.SUBJECT_LABEL_VALUE: valeur associée àSUBJECT_LABEL_KEY. Par exemple, siSUBJECT_LABEL_KEYest défini surappet queSUBJECT_LABEL_VALUEest défini surbackend, les charges de travail portant le libelléapp: backendreçoivent le trafic.EXTERNAL_CIDR: CIDR externe, par exemple20.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 EOFRemplacez 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,tierourole.SUBJECT_LABEL_VALUE: valeur associée àSUBJECT_LABEL_KEY. Par exemple, siSUBJECT_LABEL_KEYestappet queSUBJECT_LABEL_VALUEestbackend, les charges de travail portant le libelléapp: backendenvoient le trafic.EXTERNAL_CIDR: CIDR externe, par exemple20.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: - {} EOFRemplacez 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: - {} EOFRemplacez 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.