Membuat kebijakan jaringan Kubernetes untuk cluster standar

Halaman ini memberikan petunjuk untuk mengonfigurasi traffic intra-cluster untuk cluster standar menggunakan kebijakan jaringan Kubernetes di Google Distributed Cloud (GDC) air-gapped.

NetworkPolicy Kubernetes adalah spesifikasi pemberian izin pada grup pod untuk berkomunikasi satu sama lain dan dengan endpoint jaringan lainnya. Resource NetworkPolicy menggunakan label untuk memilih pod, dan menentukan aturan yang menentukan traffic yang diizinkan ke pod yang dipilih. Kebijakan ini memiliki cakupan lokal dan hanya berlaku untuk traffic dalam cluster tempat kebijakan tersebut ditentukan, kecuali jika kebijakan izinkan semua dibuat, yang juga memungkinkan komunikasi dengan endpoint dari cluster standar dan bersama lainnya.

Sebelum memulai

Untuk mengonfigurasi kebijakan jaringan Kubernetes, Anda harus memiliki izin yang diperlukan dalam cluster untuk membuat, mengubah, dan menghapus resource NetworkPolicy di namespace yang relevan.

Membuat kebijakan pod-ke-pod intra-cluster

Kebijakan ini mengontrol traffic antar-pod dalam cluster standar yang sama.

Membuat kebijakan ingress pod-ke-pod intra-cluster

  • Untuk mengizinkan traffic ingress pod-ke-pod intra-cluster, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.
    • PEER_NAMESPACE: namespace peer di cluster standar.
    • SUBJECT_LABEL_KEY: kunci label yang digunakan untuk memilih beban kerja subjek. Misalnya, app, tier, atau role.
    • SUBJECT_LABEL_VALUE: nilai yang terkait dengan SUBJECT_LABEL_KEY. Misalnya, jika SUBJECT_LABEL_KEY adalah app, dan SUBJECT_LABEL_VALUE adalah backend, maka beban kerja dengan label app: backend akan menerima traffic.
    • PEER_LABEL_KEY: kunci label yang digunakan untuk memilih workload peer.
    • PEER_LABEL_VALUE: nilai yang terkait dengan PEER_LABEL_KEY.
    • PORT: port pada workload subjek tempat traffic diizinkan.

Membuat kebijakan egress pod-ke-pod intra-cluster

  • Untuk mengizinkan traffic keluar pod-ke-pod intra-cluster, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.
    • PEER_NAMESPACE: namespace peer di cluster standar.
    • SUBJECT_LABEL_KEY: kunci label yang digunakan untuk memilih beban kerja subjek. Misalnya, app, tier, atau role.
    • SUBJECT_LABEL_VALUE: nilai yang terkait dengan SUBJECT_LABEL_KEY. Misalnya, jika SUBJECT_LABEL_KEY adalah app, dan SUBJECT_LABEL_VALUE adalah backend, maka workload dengan label app: backend akan mengirimkan traffic.
    • PEER_LABEL_KEY: kunci label yang digunakan untuk memilih workload peer.
    • PEER_LABEL_VALUE: nilai yang terkait dengan PEER_LABEL_KEY.
    • PORT: port pada workload peer tempat traffic diizinkan.

Membuat kebijakan pod-ke-pod intra-cluster menggunakan load balancer

Kebijakan ini mengontrol traffic antar-pod dalam cluster yang sama saat traffic dirutekan melalui load balancer eksternal.

Membuat kebijakan ingress pod-ke-pod intra-cluster menggunakan load balancer

  • Untuk mengizinkan traffic masuk pod-ke-pod intra-cluster menggunakan load balancer, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.
    • SUBJECT_LABEL_KEY: kunci label yang digunakan untuk memilih beban kerja subjek. Misalnya, app, tier, atau role.
    • SUBJECT_LABEL_VALUE: nilai yang terkait dengan SUBJECT_LABEL_KEY. Misalnya, jika SUBJECT_LABEL_KEY adalah app, dan SUBJECT_LABEL_VALUE adalah backend, maka beban kerja dengan label app: backend akan menerima traffic.
    • EGRESS_NAT_IP: IP NAT keluar dari pod sumber.
    • PORT: port pada workload subjek tempat traffic diizinkan.

Membuat kebijakan egress pod-ke-pod intra-cluster menggunakan load balancer

  • Untuk mengizinkan traffic keluar pod-ke-pod intra-cluster menggunakan load balancer, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.
    • SUBJECT_LABEL_KEY: kunci label yang digunakan untuk memilih beban kerja subjek. Misalnya, app, tier, atau role.
    • SUBJECT_LABEL_VALUE: nilai yang terkait dengan SUBJECT_LABEL_KEY. Misalnya, jika SUBJECT_LABEL_KEY adalah app, dan SUBJECT_LABEL_VALUE adalah backend, maka workload dengan label app: backend akan mengirimkan traffic.
    • ELB_EXTERNAL_IP: alamat IP eksternal load balancer.
    • PORT: port pada endpoint eksternal yang trafficnya diizinkan.

Membuat kebijakan eksternal organisasi

Kebijakan ini mengontrol traffic antara pod dalam cluster standar dan endpoint eksternal (alamat IP di luar cluster).

Membuat kebijakan ingress untuk traffic eksternal organisasi

  • Untuk mengizinkan traffic masuk dari endpoint eksternal organisasi, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.
    • SUBJECT_LABEL_KEY: kunci label yang digunakan untuk memilih beban kerja subjek. Misalnya, app, tier, atau role.
    • SUBJECT_LABEL_VALUE: nilai yang terkait dengan SUBJECT_LABEL_KEY. Misalnya, jika SUBJECT_LABEL_KEY adalah app, dan SUBJECT_LABEL_VALUE adalah backend, maka beban kerja dengan label app: backend akan menerima traffic.
    • EXTERNAL_CIDR: CIDR eksternal, misalnya: 20.0.0.0/16.
    • PORT: port pada workload subjek tempat traffic diizinkan.

Membuat kebijakan egress untuk traffic eksternal organisasi

  • Untuk mengizinkan traffic keluar ke endpoint eksternal organisasi, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.
    • SUBJECT_LABEL_KEY: kunci label yang digunakan untuk memilih beban kerja subjek. Misalnya, app, tier, atau role.
    • SUBJECT_LABEL_VALUE: nilai yang terkait dengan SUBJECT_LABEL_KEY. Misalnya, jika SUBJECT_LABEL_KEY adalah app, dan SUBJECT_LABEL_VALUE adalah backend, maka workload dengan label app: backend akan mengirimkan traffic.
    • EXTERNAL_CIDR: CIDR eksternal, misalnya: 20.0.0.0/16.
    • PORT: port pada endpoint eksternal yang trafficnya diizinkan.

Membuat kebijakan izinkan semua

Kebijakan berikut dapat digunakan untuk mengizinkan semua traffic secara eksplisit. Hal ini memungkinkan komunikasi dengan endpoint dari cluster standar dan bersama lainnya.

Membuat kebijakan ingress izinkan semua

  • Untuk mengizinkan semua traffic masuk, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.

Membuat kebijakan egress izinkan-semua

  • Untuk mengizinkan semua traffic keluar, buat dan terapkan resource berikut:

    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
    

    Ganti kode berikut:

    • CLUSTER_API_SERVER: jalur kubeconfig server API cluster. Jika Anda belum membuat file kubeconfig untuk server API, lihat Login untuk mengetahui detailnya.
    • SUBJECT_NAMESPACE: namespace subjek di cluster standar.