Kubernetes-Netzwerkrichtlinien für Standardcluster erstellen

Auf dieser Seite finden Sie eine Anleitung zum Konfigurieren des Intra-Cluster-Traffics für einen Standardcluster mit Kubernetes-Netzwerkrichtlinien in Google Distributed Cloud (GDC) mit Air Gap.

Eine Kubernetes-NetworkPolicy gibt an, wie Gruppen von Pods miteinander und mit anderen Netzwerkendpunkten kommunizieren dürfen. NetworkPolicy-Ressourcen verwenden Labels, um Pods auszuwählen und Regeln zu definieren, die angeben, welcher Traffic für die ausgewählten Pods zulässig ist. Diese Richtlinien sind lokal begrenzt und gelten nur für Traffic innerhalb des Clusters, in dem sie definiert sind, sofern keine „Allow-all“-Richtlinie erstellt wird, die auch die Kommunikation mit Endpunkten aus anderen Standard- und freigegebenen Clustern zulässt.

Hinweise

Wenn Sie Kubernetes-Netzwerkrichtlinien konfigurieren möchten, benötigen Sie die erforderlichen Berechtigungen im Cluster, um NetworkPolicy-Ressourcen in den relevanten Namespaces zu erstellen, zu ändern und zu löschen.

Richtlinie für Pod-zu-Pod-Kommunikation innerhalb des Clusters erstellen

Diese Richtlinien steuern den Traffic zwischen Pods innerhalb desselben Standardclusters.

Richtlinie für eingehenden Pod-zu-Pod-Traffic innerhalb des Clusters erstellen

  • Um Ingress-Traffic von Pod zu Pod innerhalb des Clusters zuzulassen, erstellen und wenden Sie die folgende Ressource an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.
    • PEER_NAMESPACE: Der Peer-Namespace im Standardcluster.
    • SUBJECT_LABEL_KEY: Der Schlüssel des Labels, mit dem die betreffenden Arbeitslasten ausgewählt werden. Beispiel: app, tier oder role.
    • SUBJECT_LABEL_VALUE: Der Wert, der mit dem SUBJECT_LABEL_KEY verknüpft ist. Wenn SUBJECT_LABEL_KEY beispielsweise app und SUBJECT_LABEL_VALUE backend ist, wird der Traffic an Arbeitslasten mit dem Label app: backend weitergeleitet.
    • PEER_LABEL_KEY: Der Schlüssel des Labels, mit dem die Peer-Arbeitslasten ausgewählt werden.
    • PEER_LABEL_VALUE: Der Wert, der mit dem PEER_LABEL_KEY verknüpft ist.
    • PORT: Der Port der betreffenden Arbeitslast, auf dem Traffic zulässig ist.

Richtlinie für ausgehenden Pod-zu-Pod-Traffic innerhalb eines Clusters erstellen

  • Um ausgehenden Pod-zu-Pod-Traffic innerhalb des Clusters zuzulassen, erstellen und wenden Sie die folgende Ressource an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.
    • PEER_NAMESPACE: Der Peer-Namespace im Standardcluster.
    • SUBJECT_LABEL_KEY: Der Schlüssel des Labels, mit dem die betreffenden Arbeitslasten ausgewählt werden. Beispiel: app, tier oder role.
    • SUBJECT_LABEL_VALUE: Der Wert, der mit dem SUBJECT_LABEL_KEY verknüpft ist. Wenn SUBJECT_LABEL_KEY beispielsweise app und SUBJECT_LABEL_VALUE backend ist, wird der Traffic von Arbeitslasten mit dem Label app: backend gesendet.
    • PEER_LABEL_KEY: Der Schlüssel des Labels, mit dem die Peer-Arbeitslasten ausgewählt werden.
    • PEER_LABEL_VALUE: Der Wert, der mit dem PEER_LABEL_KEY verknüpft ist.
    • PORT: der Port der Peer-Arbeitslast, auf dem Traffic zulässig ist.

Intra-Cluster-Pod-zu-Pod-Richtlinie mit einem Load Balancer erstellen

Mit diesen Richtlinien wird der Traffic zwischen Pods innerhalb desselben Clusters gesteuert, wenn der Traffic über einen externen Load-Balancer weitergeleitet wird.

Ingress-Richtlinie für Pod-zu-Pod-Kommunikation innerhalb eines Clusters mit einem Load Balancer erstellen

  • Damit Pod-zu-Pod-Ingress-Traffic innerhalb des Clusters über einen Load Balancer möglich ist, erstellen und wenden Sie die folgende Ressource an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.
    • SUBJECT_LABEL_KEY: Der Schlüssel des Labels, mit dem die betreffenden Arbeitslasten ausgewählt werden. Beispiel: app, tier oder role.
    • SUBJECT_LABEL_VALUE: Der Wert, der mit dem SUBJECT_LABEL_KEY verknüpft ist. Wenn SUBJECT_LABEL_KEY beispielsweise app und SUBJECT_LABEL_VALUE backend ist, wird der Traffic an Arbeitslasten mit dem Label app: backend weitergeleitet.
    • EGRESS_NAT_IP: die NAT-IP-Adresse des Quell-Pods für ausgehenden Traffic.
    • PORT: Der Port der betreffenden Arbeitslast, auf dem Traffic zulässig ist.

Egress-Richtlinie für Pod-zu-Pod-Kommunikation innerhalb eines Clusters mit einem Load Balancer erstellen

  • Damit Pod-zu-Pod-Ausgangstraffic innerhalb des Clusters über einen Load Balancer möglich ist, erstellen und wenden Sie die folgende Ressource an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.
    • SUBJECT_LABEL_KEY: Der Schlüssel des Labels, mit dem die betreffenden Arbeitslasten ausgewählt werden. Beispiel: app, tier oder role.
    • SUBJECT_LABEL_VALUE: Der Wert, der mit dem SUBJECT_LABEL_KEY verknüpft ist. Wenn SUBJECT_LABEL_KEY beispielsweise app und SUBJECT_LABEL_VALUE backend ist, wird der Traffic von Arbeitslasten mit dem Label app: backend gesendet.
    • ELB_EXTERNAL_IP: die externe IP-Adresse des Load-Balancers.
    • PORT: der Port am externen Endpunkt, zu dem Traffic zugelassen ist.

Organisationsrichtlinie erstellen

Diese Richtlinien steuern den Traffic zwischen einem Pod in einem Standardcluster und einem externen Endpunkt (einer beliebigen IP-Adresse außerhalb des Clusters).

Richtlinie für eingehenden Traffic für organisationsfremden Traffic erstellen

  • Wenn Sie eingehenden Traffic von einem organisationsfremden Endpunkt zulassen möchten, erstellen und wenden Sie die folgende Ressource an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.
    • SUBJECT_LABEL_KEY: Der Schlüssel des Labels, mit dem die betreffenden Arbeitslasten ausgewählt werden. Beispiel: app, tier oder role.
    • SUBJECT_LABEL_VALUE: Der Wert, der mit dem SUBJECT_LABEL_KEY verknüpft ist. Wenn SUBJECT_LABEL_KEY beispielsweise app und SUBJECT_LABEL_VALUE backend ist, wird der Traffic an Arbeitslasten mit dem Label app: backend weitergeleitet.
    • EXTERNAL_CIDR: der externe CIDR, z. B. 20.0.0.0/16.
    • PORT: Der Port der betreffenden Arbeitslast, auf dem Traffic zulässig ist.

Richtlinie für ausgehenden Traffic für organisationsfremden Traffic erstellen

  • Wenn Sie ausgehenden Traffic zu einem organisationsfremden Endpunkt zulassen möchten, erstellen und wenden Sie die folgende Ressource an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.
    • SUBJECT_LABEL_KEY: Der Schlüssel des Labels, mit dem die betreffenden Arbeitslasten ausgewählt werden. Beispiel: app, tier oder role.
    • SUBJECT_LABEL_VALUE: Der Wert, der mit dem SUBJECT_LABEL_KEY verknüpft ist. Wenn SUBJECT_LABEL_KEY beispielsweise app und SUBJECT_LABEL_VALUE backend ist, wird der Traffic von Arbeitslasten mit dem Label app: backend gesendet.
    • EXTERNAL_CIDR: der externe CIDR, z. B. 20.0.0.0/16.
    • PORT: der Port am externen Endpunkt, zu dem Traffic zugelassen ist.

Richtlinie „Alles zulassen“ erstellen

Mit den folgenden Richtlinien kann der gesamte Traffic explizit zugelassen werden. Dadurch ist die Kommunikation mit Endpunkten aus anderen Standard- und freigegebenen Clustern möglich.

Richtlinie für eingehenden Traffic erstellen, die alles zulässt

  • Wenn Sie allen eingehenden Traffic zulassen möchten, erstellen Sie die folgende Ressource und wenden Sie sie an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.

Richtlinie für ausgehenden Traffic erstellen, die alles zulässt

  • Wenn Sie den gesamten ausgehenden Traffic zulassen möchten, erstellen Sie die folgende Ressource und wenden Sie sie an:

    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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_API_SERVER: Der Kubeconfig-Pfad des API-Servers des Clusters. Wenn Sie noch keine kubeconfig-Datei für den API-Server generiert haben, finden Sie weitere Informationen unter Anmelden.
    • SUBJECT_NAMESPACE: Der Betreff-Namespace im Standardcluster.