All Products
Search
Document Center

Container Service for Kubernetes:Gunakan kebijakan jaringan di kluster ACK

Last Updated:Mar 24, 2026

ACK Network Policy menyediakan kontrol jaringan berbasis kebijakan. Saat menggunakan plug-in jaringan Terway, Anda dapat menerapkan kebijakan jaringan untuk aplikasi tertentu dalam kluster guna mengontrol lalu lintas jaringan berdasarkan alamat IP atau port. Topik ini menjelaskan cara menggunakan kebijakan jaringan di kluster ACK beserta skenario penggunaannya.

Prasyarat

Batasan

  • Untuk menggunakan fitur kebijakan jaringan di Konsol, Anda harus termasuk dalam daftar putih. Ajukan permohonan akses melalui Konsol Quota Center.

  • Anda tidak perlu masuk daftar putih jika mengelola kebijakan jaringan melalui command line.

  • Aturan NetworkPolicy menggunakan pemilih label untuk memilih namespace atau Pod. Namun, jumlah besar NetworkPolicy dalam sebuah kluster dapat meningkatkan waktu penerapan aturan serta menyulitkan manajemen dan troubleshooting kluster. Kami merekomendasikan maksimal 100 NetworkPolicy per kluster.

  • Fitur ini hanya berlaku untuk node yang menggunakan plug-in CNI Terway dan dikonfigurasi dalam mode ENI (Elastic Network Interface) bersama. Fitur ini tidak didukung pada node dalam kelompok node yang dikonfigurasi dalam mode ENI eksklusif.

    Dokumen ini tidak mencakup konfigurasi spesifik dan batasan untuk skenario komputasi yang berbeda. Untuk menggunakan fitur ini di lingkungan komputasi tertentu, seperti Cloud Hibrida atau instans elastis, konsultasikan dokumentasi produk komputasi yang sesuai.
  • ACK hanya mendukung kebijakan jaringan Kubernetes standar. Fitur ini tidak mendukung kebijakan jaringan kustom dari solusi pihak ketiga seperti Calico atau Cilium.

Detail implementasi

Saat membuat kluster, implementasi NetworkPolicy bergantung pada versi awal Terway yang digunakan.

1.9.0 dan yang lebih baru

Component

Implementasi NetworkPolicy

terway-eniip

eBPF

Penting
  • Jika aturan Anda perlu mencocokkan Pod dalam kluster, gunakan podSelector atau namespaceSelector. ipBlock hanya dapat mencocokkan alamat di luar kluster.

  • Jika Anda membuat kluster dengan versi awal Terway sebelum 1.9.0, implementasi NetworkPolicy tetap tidak berubah meskipun Terway ditingkatkan ke versi 1.9.0 atau lebih baru.

  • Implementasi NetworkPolicy berbasis eBPF memerlukan kernel versi 4.19 atau lebih baru. Fitur ini tidak berfungsi pada node dengan kernel versi sebelum 4.19.

  • Catatan ini hanya berlaku untuk node ECS reguler yang menjalankan komponen Terway. Untuk mengaktifkan NetworkPolicy pada Virtual Node, lihat Gunakan kebijakan jaringan.

Sebelum 1.9.0

Component

Implementasi NetworkPolicy

terway-eniip dengan IPvlan atau DataPath V2 dinonaktifkan

iptables

terway-eniip dengan IPvlan atau DataPath V2 diaktifkan

eBPF

Penting
  • Jika aturan Anda perlu mencocokkan Pod dalam kluster, gunakan podSelector atau namespaceSelector. Dalam implementasi eBPF, ipBlock hanya dapat mencocokkan alamat di luar kluster.

  • Jika Anda membuat kluster dengan versi awal Terway sebelum 1.9.0, implementasi NetworkPolicy tetap tidak berubah meskipun Terway ditingkatkan ke versi 1.9.0 atau lebih baru.

  • Implementasi NetworkPolicy berbasis eBPF memerlukan kernel versi 4.19 atau lebih baru. Pada node dengan kernel versi sebelum 4.19, fitur ini akan kembali ke mode iptables, yang dapat menyebabkan aturan NetworkPolicy berfungsi secara tidak benar.

  • Catatan ini hanya berlaku untuk node ECS reguler yang menjalankan komponen Terway. Untuk mengaktifkan NetworkPolicy pada Virtual Node, lihat Gunakan kebijakan jaringan.

Aktifkan kebijakan jaringan

Anda dapat mengaktifkan fitur Network Policy untuk kluster baru maupun yang sudah ada.

Kluster baru

Saat membuat kluster, pilih opsi Support for NetworkPolicies untuk mengaktifkan fitur Network Policy. Untuk informasi selengkapnya, lihat Buat kluster ACK Pro.

Kluster yang sudah ada

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.

  3. Klik tab Networking, temukan komponen terway-eniip, lalu klik Configuration di pojok kanan bawah. Centang kotak Enables NetworkPolicy, lalu klik OK.

    image

    Penting

    Untuk kluster yang belum mengaktifkan DataPath V2, fitur Network Policy tidak berlaku pada node yang sudah ada hingga node tersebut direstart.

Contoh kebijakan jaringan

Persiapkan aplikasi contoh

Ikuti langkah-langkah berikut untuk membuat aplikasi uji Nginx yang dapat diakses oleh Pod lain.

Console

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster target. Di panel navigasi sisi kiri, pilih Workloads > Deployments.

  3. Di halaman Deployments, klik Create from Image. Di wizard Create, buat aplikasi bernama nginx dan ekspos sebagai Service. Setelah mengonfigurasi aplikasi, klik Create.

    Untuk contoh ini, konfigurasikan hanya parameter berikut untuk aplikasi Nginx dan gunakan pengaturan default untuk semua parameter lainnya. Untuk informasi selengkapnya, lihat Detail konfigurasi.

    Parameter

    Deskripsi

    Contoh

    Basic Information

    Name

    Nama aplikasi.

    nginx

    Replicas

    Jumlah pod.

    1

    Container

    Image Name

    Image kontainer.

    nginx:latest

    Advanced

    Services

    Di samping Services, klik Create untuk mengonfigurasi parameter Service.

    Name: nginx

    Type:

    • ClusterIP

    • LoadBalancer

    • NodePort

    Port Mapping:

    • Name: nginx

    • Service Port: 80

    • Container Port: 80

    • Protocol: TCP

  4. Di halaman Deployments, klik Create from Image lagi. Di wizard Create, buat aplikasi client bernama busybox untuk menguji konektivitas jaringan ke Service nginx.

    Untuk contoh ini, konfigurasikan hanya parameter berikut untuk aplikasi client busybox dan gunakan pengaturan default untuk semua parameter lainnya. Untuk informasi selengkapnya, lihat Detail konfigurasi.

    Parameter

    Deskripsi

    Contoh

    Basic Information

    Name

    Nama aplikasi.

    busybox

    Replicas

    Jumlah pod.

    1

    Container

    Image Name

    Image kontainer.

    busybox:latest

    Start Command

    Biarkan parameter ini kosong.

    Pilih stdin dan tty.

  5. Verifikasi bahwa aplikasi client busybox dapat mengakses Service nginx.

    1. Di halaman Deployments, temukan aplikasi busybox dan klik namanya.

    2. Klik tab Pods. Lalu, temukan pod busybox-{hash} dan klik Terminal di kolom Actions.

      image.png

    3. Di terminal busybox, jalankan perintah wget nginx untuk menguji konektivitas jaringan ke Nginx.

      connection

      Output menunjukkan bahwa pod busybox dapat mengakses Service nginx.

CLI

  1. Jalankan perintah berikut untuk membuat aplikasi Nginx dan ekspos aplikasi tersebut menggunakan Service bernama nginx.

    Buat aplikasi Nginx.

    kubectl run nginx --image=nginx

    Output yang diharapkan:

    pod/nginx created

    Periksa apakah pod sedang berjalan.

    kubectl get pod

    Output yang diharapkan:

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx                    1/1     Running   0          45s

    Buat Service bernama nginx.

    kubectl expose pod nginx --port=80

    Output yang diharapkan:

    service/nginx exposed

    Lihat Layanan.

    kubectl get service

    Output yang diharapkan:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   172.XX.XX.1     <none>        443/TCP   30m
    nginx        ClusterIP   172.XX.XX.48    <none>        80/TCP    12s
  2. Jalankan perintah berikut untuk membuat pod bernama busybox dan akses Service bernama nginx dari pod tersebut.

    kubectl run busybox --rm -ti --image=busybox /bin/sh

    Output yang diharapkan:

    If you don't see a command prompt, try pressing enter.
    / #
    / #

    Setelah prompt muncul, jalankan perintah berikut untuk mengakses nginx:

    wget nginx

    Output yang diharapkan:

    Connecting to nginx (172.XX.XX.48:80)
    saving to 'index.html'
    index.html           100% |****************************************************************************************************************************************************|   612  0:00:00 ETA
    'index.html' saved

Skema 1: Izinkan akses berdasarkan label

Console

Untuk menggunakan kebijakan jaringan di Konsol, Anda harus ditambahkan ke daftar putih. Untuk dimasukkan ke daftar putih, kirim tiketkirim tiket. Untuk informasi selengkapnya, lihat Batasan.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Network > Network Policies.

  3. Di halaman Network Policy, pilih namespace di bagian atas. Untuk contoh ini, pilih default. Di pojok kanan atas, klik Create dan konfigurasikan kebijakan jaringan di panel Create.

    Parameter

    Deskripsi

    Contoh

    Name

    Nama kebijakan jaringan.

    access-nginx

    Pod Selector

    Klik + Add Label to Select Workload untuk menentukan pod yang dikenai kebijakan jaringan.

    Catatan

    Jika Anda tidak mengonfigurasi pemilih pod, kebijakan jaringan berlaku untuk semua pod di namespace yang dipilih.

    Dalam contoh ini, pengaturan berikut digunakan:

    • Atur Type ke Deployment

    • Atur Workload ke nginx.

    • Atur Label ke app=nginx.

    Ingress

    Setiap kebijakan jaringan berisi daftar izin aturan ingress. Setiap aturan mengizinkan traffic yang cocok dengan bagian from dan ports.

    • Rule:

      • podSelector: memilih pod tertentu dalam namespace yang sama dengan kebijakan jaringan dan mengizinkan pod tersebut sebagai sumber lalu lintas masuk.

      • namespaceSelector: memilih namespace tertentu dan mengizinkan semua pod dalam namespace tersebut sebagai sumber lalu lintas masuk.

      • ipBlock: memilih rentang alamat IP tertentu dalam notasi CIDR dan mengizinkan alamat IP tersebut sebagai sumber lalu lintas masuk.

    • Port: Protokol TCP dan UDP didukung.

    Catatan
    • Jika Anda tidak menambahkan aturan, lalu lintas masuk ke pod yang dipilih akan ditolak.

    • Jika DataPath v2 atau IPvlan diaktifkan untuk kluster, Anda tidak dapat menggunakan ipBlock untuk membatasi traffic dari blok CIDR pod. Anda harus menggunakan podSelector.

    Dalam contoh ini, tidak ada aturan ingress yang ditambahkan.

    Egress

    Setiap kebijakan jaringan berisi daftar izin aturan egress. Setiap aturan mengizinkan traffic yang cocok dengan bagian to dan ports.

    • Rule:

      • podSelector: memilih pod tertentu dalam namespace yang sama dengan kebijakan jaringan dan mengizinkan pod tersebut sebagai tujuan lalu lintas keluar.

      • namespaceSelector: memilih namespace tertentu dan mengizinkan semua pod dalam namespace tersebut sebagai tujuan lalu lintas keluar.

      • ipBlock: memilih rentang alamat IP tertentu dalam notasi CIDR dan mengizinkan alamat IP tersebut sebagai tujuan lalu lintas keluar.

    • Port: Protokol TCP dan UDP didukung.

    Catatan

    Jika DataPath v2 atau IPvlan diaktifkan untuk kluster, Anda tidak dapat menggunakan ipBlock untuk membatasi traffic dari blok CIDR pod. Anda harus menggunakan podSelector.

    Dalam contoh ini, tidak ada aturan egress yang ditambahkan.

  4. Klik Next lalu klik OK.

  5. Di terminal busybox, jalankan perintah wget nginx untuk menguji konektivitas jaringan ke Service nginx. Untuk informasi selengkapnya, lihat Langkah 5.

    Koneksi timeout karena kebijakan jaringan tidak mengizinkan akses dari pod busybox.

    timeout

  6. Ubah kebijakan jaringan untuk mengizinkan akses dari aplikasi busybox.

    1. Di daftar kebijakan jaringan, temukan kebijakan access-nginx dan klik Edit di kolom Actions.

    2. Tambahkan aturan ingress.

      Di sisi kanan bagian Ingress, klik + Add dan lakukan langkah-langkah berikut:

      • Di sisi kanan Rule, klik + Add. Lalu, tambahkan aturan akses untuk podSelector dengan pengaturan berikut:

        Parameter

        Contoh

        Selector

        podSelector

        Type

        Deployment

        Workload

        busybox

        Label

        app=busybox

      • Di sisi kanan Port, klik + Add dan konfigurasikan pengaturan berikut:

        Parameter

        Contoh

        Protocol

        TCP

        Port

        80

    3. Klik Next lalu klik OK.

    4. Jalankan perintah wget -O /dev/null nginx untuk menguji konektivitas jaringan antara busybox dan nginx setelah Anda mengubah kebijakan jaringan.

      Setelah Anda menambahkan aturan untuk aplikasi busybox ke kebijakan jaringan, pod busybox dapat mengakses pod nginx.正常访问

CLI

  1. Gunakan templat YAML berikut dan jalankan perintah vim policy.yaml untuk membuat file bernama policy.yaml.

    vim policy.yaml
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: access-nginx
    spec:
      podSelector:
        matchLabels:
          run: nginx
      ingress:
      - from:
        - podSelector:
            matchLabels:
              access: "true"
  2. Jalankan perintah berikut untuk menerapkan kebijakan jaringan dari file policy.yaml.

    kubectl apply -f policy.yaml

    Output yang diharapkan:

    networkpolicy.networking.k8s.io/access-nginx created
  3. Jalankan perintah berikut untuk menguji konektivitas jaringan ke Service nginx. Karena label akses tidak ditentukan, permintaan akan timeout.

    kubectl run busybox --rm -ti --image=busybox /bin/sh

    Uji konektivitas jaringan ke Service nginx:

    wget nginx

    Output yang diharapkan:

    Connecting to nginx (172.19.XX.XX:80)
    wget: can't connect to remote host (172.19.XX.XX): Connection timed out
  4. Jalankan perintah berikut untuk memulai pod dengan label akses yang diperlukan.

    kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh

    Uji konektivitas jaringan ke Service nginx:

    wget nginx

    Output yang diharapkan:

    Connecting to nginx (172.21.XX.XX:80)
    saving to 'index.html'
    index.html           100% |****************************************************************************************************************************************************|   612  0:00:00 ETA
    'index.html' saved

    Output menunjukkan bahwa permintaan berhasil dan Anda dapat mengakses Service nginx.

Use case 2: Batasi akses berdasarkan blok CIDR sumber

Console

  1. Konfigurasikan Kebijakan Jaringan untuk Service nginx. Untuk detail konfigurasi, lihat Use Case 1: Batasi akses Service ke aplikasi dengan label tertentu.

  2. Di daftar service, temukan alamat IP publik Service nginx di kolom External Endpoint (misalnya, 47.xxx.xx.x) dan coba akses alamat tersebut di browser Anda.en

    Akses gagal karena Kebijakan Jaringan secara default menolak semua lalu lintas masuk.

  3. Ubah Kebijakan Jaringan untuk mengizinkan akses dari blok CIDR klien tertentu.

    1. Buka myip.ipip.net di browser untuk menemukan alamat IP publik mesin Anda.

    2. Di daftar Kebijakan Jaringan, temukan kebijakan access-nginx, klik Edit di kolom Actions, lalu ubah aturan di panel Edit.

      Di sebelah kanan Source, klik + Add dan lakukan langkah-langkah berikut:

      • Di sebelah kanan Rule, klik + Add untuk menambahkan aturan yang mengizinkan akses dari alamat IP mesin Anda:

        Parameter

        Contoh

        Selector

        ipBlock

        cidr

        <Alamat IP mesin Anda>/32

        Misalnya, 42.xx.xx.xx/32

      • Di sebelah kanan Rule, klik + Add untuk menambahkan aturan lain yang mengizinkan akses dari blok CIDR pemeriksaan kesehatan Server Load Balancer (SLB) Alibaba Cloud:

        Parameter

        Contoh

        Selector

        ipBlock

        cidr

        100.0.0.0/8

      • Di sebelah kanan Port, klik + Add. Konfigurasikan pengaturan port sebagai berikut:

        Parameter

        Contoh

        Protocol

        TCP

        Port

        80

      ipblock

    3. Klik Next, lalu klik OK.

    4. Di daftar service, klik alamat IP di kolom External Endpoint (misalnya, 47.xxx.xx.x:80) untuk mengakses Service nginx.

      image.png

      Setelah Kebijakan Jaringan diperbarui, Anda dapat mengakses Service nginx dari klien Anda melalui SLB yang menghadap internet.

CLI

  1. Jalankan perintah berikut untuk membuat service Server Load Balancer (SLB) Alibaba Cloud untuk aplikasi nginx, dengan menentukan type=LoadBalancer untuk mengekspos service nginx ke internet.

    vim nginx-service.yaml

    Berikut adalah templat untuk file nginx-service.yaml.

    # Paste the following YAML content into nginx-service.yaml.
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: nginx
      name: nginx-slb
    spec:
      externalTrafficPolicy: Local
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: LoadBalancer

    Jalankan perintah berikut untuk membuat Service dari file nginx-service.yaml.

    kubectl apply -f nginx-service.yaml 

    Output yang diharapkan:

    service/nginx-slb created

    Verifikasi bahwa Service diekspos ke internet:

    kubectl get service nginx-slb

    Output yang diharapkan:

    NAME        TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
    nginx-slb   LoadBalancer   172.19.xx.xxx   47.110.xxx.xxx   80:32240/TCP   8m
  2. Jalankan perintah berikut untuk mengakses alamat IP SLB yang baru saja Anda buat, 47.110.xxx.xxx. Akses gagal.

    wget 47.110.xxx.xxx

    Output yang diharapkan:

    --2018-11-21 11:46:05--  http://47.110.xx.xxx/
    Connecting to 47.110.XX.XX:80... failed: Connection refused.
    Catatan

    Akses gagal karena alasan berikut:

    • Service nginx yang dikonfigurasi hanya dapat diakses oleh aplikasi dengan label tertentu access=true.

    • Mengakses alamat IP SLB menyediakan akses eksternal ke Kubernetes, yang berbeda dari menggunakan kebijakan jaringan untuk membatasi akses service hanya ke aplikasi dengan label tertentu.

    Solusi: Ubah Kebijakan Jaringan untuk menambahkan blok CIDR sumber yang diizinkan.

  3. Jalankan perintah berikut untuk memeriksa alamat IP publik lokal Anda.

    curl myip.ipip.net

    Output yang diharapkan:

    Current IP: 10.0.x.x From: China Beijing Beijing        # Output hanya sebagai referensi. Gunakan alamat IP aktual Anda.
  4. Jalankan perintah berikut untuk mengubah file policy.yaml.

    vim policy.yaml

    Perbarui file policy.yaml dengan konten berikut:

    # The following is the content of the YAML file.
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: access-nginx
    spec:
      podSelector:
        matchLabels:
          run: nginx
      ingress:
      - from:
        - podSelector:
            matchLabels:
              access: "true"
        - ipBlock:
            cidr: 100.64.0.0/10
        - ipBlock:
            cidr: 10.0.0.0/24      # Rentang alamat jaringan lokal Anda. Ini hanya contoh. Gunakan informasi aktual Anda.

    Jalankan perintah berikut untuk menerapkan perubahan dari file policy.yaml.

    kubectl apply -f policy.yaml 

    Output yang diharapkan:

    networkpolicy.networking.k8s.io/access-nginx unchanged
    Catatan
    • Gunakan rentang alamat /24.

    • Alamat pemeriksaan kesehatan SLB berada dalam blok alamat 100.64.0.0/10. Oleh karena itu, Anda harus mengonfigurasi 100.64.0.0/10.

  5. Mulai Pod klien dan gunakan untuk mengakses Service nginx.

    kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh

    Akses Service nginx:

    wget 47.110.XX.XX

    Output yang diharapkan:

    Connecting to 47.110.XX.XX (47.110.XX.XX:80)
    index.html           100% |***********************************************************|   612  0:00:00 ETA

    Kemajuan 100% menunjukkan koneksi berhasil ke Service nginx.

Use case 3: Batasi egress pod ke alamat tertentu

Console

Topik ini menggunakan contoh domain www.aliyun.com dan registry.aliyuncs.com untuk menunjukkan cara mengonfigurasi kebijakan jaringan yang hanya mengizinkan Pod mengakses registry.aliyuncs.com.

  1. Gunakan perintah ping untuk menanyakan alamat IP yang terikat ke registry.aliyuncs.com (120.55.XXX.XXX).

  2. Buat aturan dalam kebijakan jaringan untuk membatasi akses aplikasi busybox hanya ke registry.aliyuncs.com.

    1. Di halaman Network Policies, klik Create di pojok kanan atas. Di panel Create, konfigurasikan aturan Kebijakan Jaringan.

    2. Untuk informasi lebih lanjut tentang parameter, lihat Use Case 1: Batasi akses Service ke aplikasi dengan label tertentu. Tabel berikut menunjukkan konfigurasi contoh.

      Parameter

      Deskripsi

      Contoh

      Name

      Nama kustom untuk Kebijakan Jaringan.

      busybox-policy

      Pod Selectors

      Klik + Specify workload type and labels untuk memilih Pod yang dikenai Kebijakan Jaringan.

      Catatan

      Jika Anda tidak menentukan Pod Selector, Kebijakan Jaringan berlaku untuk semua Pod di Namespace.

      Contoh ini menggunakan pengaturan berikut:

      • Atur Type ke Stateless.

      • Atur Workloads ke busybox.

      • Atur Labels ke app=busybox.

      Egress

      Di sebelah kanan Egress, klik + Add, lalu di sebelah kanan Rule, klik + Add.

      Tambahkan aturan di mana ipBlock adalah alamat IP yang sebelumnya Anda peroleh untuk registry.aliyuncs.com dalam format /32, misalnya 120.55.XXX.XXX/32.

      • Selector: ipBlock

      • cidr: 120.55.XXX.XXX/32

      image.png

      Di sebelah kanan Egress, klik + Add untuk menambahkan aturan lain. Aturan ini mengizinkan lalu lintas egress pada Port UDP 53 ke semua Namespace, yang memungkinkan aplikasi melakukan Resolusi DNS.

      • Di sebelah kanan Rule, klik + Add dan tambahkan aturan yang memilih semua Namespace.

      • Di sebelah kanan Port, klik + Add dan tambahkan aturan untuk Port UDP 53.

      • Rule:

        • Selector: namespaceSelector

        • Namespace: All

      • Port:

        • Protocol: UDP

        • Port: 53

      image

    3. Klik Next, lalu klik OK.

    4. Di terminal BusyBox, jalankan perintah berikut untuk mengakses www.aliyun.com.

      nc -vz -w 1 www.aliyun.com 443

      Output yang diharapkan:

      nc: www.aliyun.com (60.191.xx.xx:443): Connection timed out

      Akses registry.aliyuncs.com.

      nc -vz -w 1 registry.aliyuncs.com 443

      Output yang diharapkan:

      registry.aliyuncs.com (120.55.xx.xx:443) open

CLI

  1. Jalankan perintah berikut untuk mendapatkan daftar alamat IP yang di-resolve oleh www.aliyun.com.

    dig +short registry.aliyuncs.com

    Output yang diharapkan:

    120.55.XXX.XXX
  2. Jalankan perintah berikut untuk membuat file busybox-policy.

    vim busybox-policy.yaml

    Templat file busybox-policy adalah sebagai berikut:

    # The following is the content of the YAML file.
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: busybox-policy
    spec:
      podSelector:
        matchLabels:
          run: busybox
      egress:
      - to:
        - ipBlock:
            cidr: 120.55.XXX.XXX/32
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
        - namespaceSelector: {}
        ports:
        - protocol: UDP
          port: 53
    Catatan

    File busybox-policy berisi Aturan Egress yang membatasi akses outbound aplikasi. Anda harus mengonfigurasi aturan ini untuk mengizinkan permintaan UDP. Jika tidak, resolusi DNS akan gagal.

  3. Jalankan perintah berikut untuk membuat kebijakan jaringan dari file busybox-policy.

    kubectl apply -f busybox-policy.yaml 

    Output yang diharapkan:

    networkpolicy.networking.k8s.io/busybox-policy created
  4. Jalankan perintah berikut untuk memulai Pod busybox dan menguji akses jaringan.

    kubectl run busybox --rm -ti --image=busybox /bin/sh

    Akses situs web selain www.aliyun.com, misalnya, www.taobao.com:

    wget www.taobao.com

    Output yang diharapkan:

    Connecting to www.taobao.com (64.13.XX.XX:80)
    wget: can't connect to remote host (64.13.XX.XX): Connection timed out

    Error can't connect to remote host menunjukkan bahwa akses ke layanan gagal.

  5. Jalankan perintah berikut untuk mengakses www.aliyun.com.

    wget registry.aliyuncs.com

    Output yang diharapkan:

    Connecting to registry.aliyuncs.com (120.55.XXX.XXX:80)
    Connecting to registry.aliyuncs.com (120.55.XXX.XXX:443)
    wget: note: TLS certificate validation not implemented
    index.html           100% |***********************************************************|  462k  0:00:00 ETA

    Kemajuan 100% menunjukkan koneksi berhasil.

Use case 4: Kontrol akses jaringan publik untuk pod

Penting

Operasi ini dapat memengaruhi layanan yang mengakses jaringan publik. Kami merekomendasikan melakukan langkah-langkah ini di namespace kosong.

Console

  1. Di pojok kanan atas halaman Network Policies, klik Create. Di panel Create, konfigurasikan Kebijakan Jaringan.

    Untuk detail parameter dan langkah-langkah, lihat Batasi akses Service ke aplikasi dengan label tertentu menggunakan Kebijakan Jaringan. Tabel berikut menunjukkan konfigurasi contoh.

    Parameter

    Nilai

    Name

    deny-public-net

    Pod Selector

    Atur Type ke All.

    Ingress

    Tambahkan dua aturan berikut:

    • Aturan allow-all untuk namespaceSelector.

    • Aturan allow-all untuk ipBlock.

    来源

    Egress

    Tambahkan aturan yang hanya mengizinkan lalu lintas egress ke jaringan pribadi:

    • Atur namespaceSelector ke All untuk mengizinkan Pod mengakses semua Pod di jaringan internal.

    • Buat tiga aturan untuk ipBlock untuk mengizinkan lalu lintas egress ke tiga blok CIDR jaringan pribadi berikut:

      • 10.0.0.0/8

      • 172.16.0.0/12

      • 192.168.0.0/16

      Catatan

      Anda tidak dapat menambahkan beberapa blok CIDR dalam satu aturan ipBlock.

      公网 去向

  2. Klik Next, lalu klik OK.

  3. Di tab Basic Information halaman detail kluster, dapatkan alamat IP internal dan port.

    image.png

  4. Di terminal busybox, jalankan perintah berikut untuk menguji akses jaringan publik dan pribadi Pod.

    nc -vz -w 1 www.aliyun.com 443

    Output yang diharapkan: Pod tidak dapat mengakses jaringan publik, dan koneksi timeout.

    nc: www.aliyun.com (60.191.xx.xx:443): Connection timed out

    Uji akses jaringan pribadi.

    nc -vz -w 1 10.134.xx.xx:<Port> # Ganti dengan alamat IP pribadi Anda.

    Output yang diharapkan: Pod dapat mengakses alamat jaringan pribadi.

    10.134.xx.xx:<Port> (10.134.xx.xx:<Port>) open

CLI

  1. Jalankan perintah berikut untuk membuat namespace uji guna memverifikasi pembatasan akses.

    Buat namespace bernama test-np.

    kubectl create ns test-np

    Output yang diharapkan:

    namespace/test-np created
  2. Buat Kebijakan Jaringan default untuk namespace ini yang hanya mengizinkan lalu lintas egress ke jaringan pribadi.

    vim default-deny.yaml

    Berikut adalah contoh templat untuk file default-deny.yaml:

    # The following is the content of the YAML file.
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      namespace: test-np
      name: deny-public-net
    spec:
      podSelector: {}
      ingress:
      - from:
        - ipBlock:
            cidr: 0.0.0.0/0
      egress:
      - to:
        - ipBlock:
            cidr: 192.168.0.0/16
        - ipBlock:
            cidr: 172.16.0.0/12
        - ipBlock:
            cidr: 10.0.0.0/8

    Jalankan perintah kubectl apply untuk membuat Kebijakan Jaringan dari file default-deny.yaml.

    kubectl apply -f default-deny.yaml

    Output yang diharapkan:

    networkpolicy.networking.k8s.io/deny-public-net created

    Lihat Kebijakan Jaringan:

    kubectl get networkpolicy -n test-np

    Output yang diharapkan:

    NAME                              POD-SELECTOR          AGE
    deny-public-net                   <none>                1m
  3. Buat Kebijakan Jaringan yang mengizinkan Pod dengan label tertentu mengakses jaringan publik.

    vim allow-specify-label.yaml

    Label contoh diatur ke public-network=true.

    # The following is the content of the YAML file.
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-public-network-for-labels
      namespace: test-np
    spec:
      podSelector:
        matchLabels:
          public-network: "true"
      ingress:
      - from:
        - ipBlock:
            cidr: 0.0.0.0/0
      egress:
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
        - namespaceSelector:
            matchLabels:
              ns: kube-system  # Mengizinkan Pod mengakses layanan penting di kube-system, seperti CoreDNS. Ini hanya contoh. Konfigurasikan sesuai kebutuhan. 

    Jalankan perintah berikut untuk membuat Kebijakan Jaringan:

    kubectl apply -f allow-specify-label.yaml

    Output yang diharapkan:

    networkpolicy.networking.k8s.io/allow-public-network-for-labels created

    Lihat Kebijakan Jaringan:

    kubectl get networkpolicy -n test-np

    Output yang diharapkan:

    NAME                              POD-SELECTOR          AGE
    allow-public-network-for-labels   public-network=true    1m
    deny-public-net                   <none>                 3m
  4. Jalankan perintah berikut untuk memverifikasi bahwa Pod tanpa label khusus tidak dapat mengakses jaringan publik.

    kubectl run -it --namespace test-np --rm --image registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 busybox-intranet
    ping aliyun.com

    Output yang diharapkan:

    PING aliyun.com (106.11.2xx.xxx): 56 data bytes
    ^C
    --- aliyun.com ping statistics ---
    9 packets transmitted, 0 packets received, 100% packet loss

    Jika 0 packets received ditampilkan, akses gagal.

    Catatan

    Kegagalan akses disebabkan oleh aturan kebijakan jaringan deny-public-net. Aturan ini menolak akses jaringan publik default untuk Pod di namespace test-np. Akibatnya, Pod yang memiliki label default dan diluncurkan di namespace ini tidak dapat mengakses jaringan publik.

  5. Jalankan perintah berikut untuk memverifikasi bahwa Pod dengan public-network=true dapat mengakses Layanan.

    kubectl run -it --namespace test-np --labels public-network=true --rm --image registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 busybox-internet
    ping aliyun.com

    Output yang diharapkan:

    PING aliyun.com (106.11.1xx.xx): 56 data bytes
    64 bytes from 106.11.1xx.xx: seq=0 ttl=47 time=4.235 ms
    64 bytes from 106.11.1xx.xx: seq=1 ttl=47 time=4.200 ms
    64 bytes from 106.11.1xx.xx: seq=2 ttl=47 time=4.182 ms
    ^C
    --- aliyun.com ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max = 4.182/4.205/4.235 ms

    Ketika 0% packet loss ditampilkan, Anda telah berhasil mengakses layanan.

    Catatan

    Pod busybox-internet dapat mengakses jaringan publik karena kebijakan jaringan allow-public-network-for-labels berisi aturan yang mengizinkan akses jaringan publik untuk Pod dengan label public-network=true.