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
Anda memiliki kluster ACK yang dikelola atau kluster khusus ACK yang menggunakan Terway sebagai plug-in jaringan. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola dan Buat kluster khusus ACK (tidak tersedia lagi).
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 |
Jika aturan Anda perlu mencocokkan Pod dalam kluster, gunakan
podSelectorataunamespaceSelector.ipBlockhanya 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 |
Jika aturan Anda perlu mencocokkan Pod dalam kluster, gunakan
podSelectorataunamespaceSelector. Dalam implementasi eBPF,ipBlockhanya 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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Add-ons.
Klik tab Networking, temukan komponen terway-eniip, lalu klik Configuration di pojok kanan bawah. Centang kotak Enables NetworkPolicy, lalu klik OK.
PentingUntuk 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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster target. Di panel navigasi sisi kiri, pilih .
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
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.
Verifikasi bahwa aplikasi client busybox dapat mengakses Service nginx.
Di halaman Deployments, temukan aplikasi busybox dan klik namanya.
Klik tab Pods. Lalu, temukan pod busybox-{hash} dan klik Terminal di kolom Actions.

Di terminal busybox, jalankan perintah
wget nginxuntuk menguji konektivitas jaringan ke Nginx.
Output menunjukkan bahwa pod busybox dapat mengakses Service nginx.
CLI
Jalankan perintah berikut untuk membuat aplikasi Nginx dan ekspos aplikasi tersebut menggunakan Service bernama nginx.
Buat aplikasi Nginx.
kubectl run nginx --image=nginxOutput yang diharapkan:
pod/nginx createdPeriksa apakah pod sedang berjalan.
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 45sBuat Service bernama nginx.
kubectl expose pod nginx --port=80Output yang diharapkan:
service/nginx exposedLihat Layanan.
kubectl get serviceOutput 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 12sJalankan perintah berikut untuk membuat pod bernama busybox dan akses Service bernama nginx dari pod tersebut.
kubectl run busybox --rm -ti --image=busybox /bin/shOutput yang diharapkan:
If you don't see a command prompt, try pressing enter. / # / #Setelah prompt muncul, jalankan perintah berikut untuk mengakses nginx:
wget nginxOutput 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,
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
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.
CatatanJika 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
fromdanports.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.
CatatanJika 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
todanports.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.
CatatanJika 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.
Klik Next lalu klik OK.
Di terminal busybox, jalankan perintah
wget nginxuntuk menguji konektivitas jaringan ke Service nginx. Untuk informasi selengkapnya, lihat Langkah 5.Koneksi timeout karena kebijakan jaringan tidak mengizinkan akses dari pod busybox.

Ubah kebijakan jaringan untuk mengizinkan akses dari aplikasi busybox.
Di daftar kebijakan jaringan, temukan kebijakan access-nginx dan klik Edit di kolom Actions.
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
Klik Next lalu klik OK.
Jalankan perintah
wget -O /dev/null nginxuntuk 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
Gunakan templat YAML berikut dan jalankan perintah
vim policy.yamluntuk membuat file bernama policy.yaml.vim policy.yamlkind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: access: "true"Jalankan perintah berikut untuk menerapkan kebijakan jaringan dari file policy.yaml.
kubectl apply -f policy.yamlOutput yang diharapkan:
networkpolicy.networking.k8s.io/access-nginx createdJalankan 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/shUji konektivitas jaringan ke Service nginx:
wget nginxOutput yang diharapkan:
Connecting to nginx (172.19.XX.XX:80) wget: can't connect to remote host (172.19.XX.XX): Connection timed outJalankan perintah berikut untuk memulai pod dengan label akses yang diperlukan.
kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/shUji konektivitas jaringan ke Service nginx:
wget nginxOutput yang diharapkan:
Connecting to nginx (172.21.XX.XX:80) saving to 'index.html' index.html 100% |****************************************************************************************************************************************************| 612 0:00:00 ETA 'index.html' savedOutput menunjukkan bahwa permintaan berhasil dan Anda dapat mengakses Service nginx.
Use case 2: Batasi akses berdasarkan blok CIDR sumber
Console
Konfigurasikan Kebijakan Jaringan untuk Service nginx. Untuk detail konfigurasi, lihat Use Case 1: Batasi akses Service ke aplikasi dengan label tertentu.
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.

Akses gagal karena Kebijakan Jaringan secara default menolak semua lalu lintas masuk.
Ubah Kebijakan Jaringan untuk mengizinkan akses dari blok CIDR klien tertentu.
Buka myip.ipip.net di browser untuk menemukan alamat IP publik mesin Anda.
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

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

Setelah Kebijakan Jaringan diperbarui, Anda dapat mengakses Service nginx dari klien Anda melalui SLB yang menghadap internet.
CLI
Jalankan perintah berikut untuk membuat service Server Load Balancer (SLB) Alibaba Cloud untuk aplikasi nginx, dengan menentukan
type=LoadBalanceruntuk mengekspos service nginx ke internet.vim nginx-service.yamlBerikut 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: LoadBalancerJalankan perintah berikut untuk membuat Service dari file nginx-service.yaml.
kubectl apply -f nginx-service.yamlOutput yang diharapkan:
service/nginx-slb createdVerifikasi bahwa Service diekspos ke internet:
kubectl get service nginx-slbOutput 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 8mJalankan perintah berikut untuk mengakses alamat IP SLB yang baru saja Anda buat, 47.110.xxx.xxx. Akses gagal.
wget 47.110.xxx.xxxOutput yang diharapkan:
--2018-11-21 11:46:05-- http://47.110.xx.xxx/ Connecting to 47.110.XX.XX:80... failed: Connection refused.CatatanAkses 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.
Jalankan perintah berikut untuk memeriksa alamat IP publik lokal Anda.
curl myip.ipip.netOutput yang diharapkan:
Current IP: 10.0.x.x From: China Beijing Beijing # Output hanya sebagai referensi. Gunakan alamat IP aktual Anda.Jalankan perintah berikut untuk mengubah file policy.yaml.
vim policy.yamlPerbarui 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.yamlOutput yang diharapkan:
networkpolicy.networking.k8s.io/access-nginx unchangedCatatanGunakan rentang alamat /24.
Alamat pemeriksaan kesehatan SLB berada dalam blok alamat
100.64.0.0/10. Oleh karena itu, Anda harus mengonfigurasi100.64.0.0/10.
Mulai Pod klien dan gunakan untuk mengakses Service nginx.
kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/shAkses Service nginx:
wget 47.110.XX.XXOutput yang diharapkan:
Connecting to 47.110.XX.XX (47.110.XX.XX:80) index.html 100% |***********************************************************| 612 0:00:00 ETAKemajuan 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.
Gunakan perintah ping untuk menanyakan alamat IP yang terikat ke registry.aliyuncs.com (120.55.XXX.XXX).
Buat aturan dalam kebijakan jaringan untuk membatasi akses aplikasi busybox hanya ke registry.aliyuncs.com.
Di halaman Network Policies, klik Create di pojok kanan atas. Di panel Create, konfigurasikan aturan Kebijakan Jaringan.
Atur Type ke Stateless.
Atur Workloads ke busybox.
Atur Labels ke app=busybox.
Selector: ipBlock
cidr: 120.55.XXX.XXX/32
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
Klik Next, lalu klik OK.
Di terminal BusyBox, jalankan perintah berikut untuk mengakses www.aliyun.com.
nc -vz -w 1 www.aliyun.com 443Output yang diharapkan:
nc: www.aliyun.com (60.191.xx.xx:443): Connection timed outAkses registry.aliyuncs.com.
nc -vz -w 1 registry.aliyuncs.com 443Output yang diharapkan:
registry.aliyuncs.com (120.55.xx.xx:443) open
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.
CatatanJika Anda tidak menentukan Pod Selector, Kebijakan Jaringan berlaku untuk semua Pod di Namespace.
Contoh ini menggunakan pengaturan berikut:
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.

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.

CLI
Jalankan perintah berikut untuk mendapatkan daftar alamat IP yang di-resolve oleh www.aliyun.com.
dig +short registry.aliyuncs.comOutput yang diharapkan:
120.55.XXX.XXXJalankan perintah berikut untuk membuat file busybox-policy.
vim busybox-policy.yamlTemplat 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: 53CatatanFile 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.
Jalankan perintah berikut untuk membuat kebijakan jaringan dari file busybox-policy.
kubectl apply -f busybox-policy.yamlOutput yang diharapkan:
networkpolicy.networking.k8s.io/busybox-policy createdJalankan perintah berikut untuk memulai Pod busybox dan menguji akses jaringan.
kubectl run busybox --rm -ti --image=busybox /bin/shAkses situs web selain www.aliyun.com, misalnya, www.taobao.com:
wget www.taobao.comOutput 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 outError can't connect to remote host menunjukkan bahwa akses ke layanan gagal.
Jalankan perintah berikut untuk mengakses www.aliyun.com.
wget registry.aliyuncs.comOutput 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 ETAKemajuan 100% menunjukkan koneksi berhasil.
Use case 4: Kontrol akses jaringan publik untuk pod
Operasi ini dapat memengaruhi layanan yang mengakses jaringan publik. Kami merekomendasikan melakukan langkah-langkah ini di namespace kosong.
Console
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
CatatanAnda tidak dapat menambahkan beberapa blok CIDR dalam satu aturan ipBlock.

Klik Next, lalu klik OK.
Di tab Basic Information halaman detail kluster, dapatkan alamat IP internal dan port.

Di terminal busybox, jalankan perintah berikut untuk menguji akses jaringan publik dan pribadi Pod.
nc -vz -w 1 www.aliyun.com 443Output yang diharapkan: Pod tidak dapat mengakses jaringan publik, dan koneksi timeout.
nc: www.aliyun.com (60.191.xx.xx:443): Connection timed outUji 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
Jalankan perintah berikut untuk membuat namespace uji guna memverifikasi pembatasan akses.
Buat namespace bernama test-np.
kubectl create ns test-npOutput yang diharapkan:
namespace/test-np createdBuat Kebijakan Jaringan default untuk namespace ini yang hanya mengizinkan lalu lintas egress ke jaringan pribadi.
vim default-deny.yamlBerikut 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/8Jalankan perintah
kubectl applyuntuk membuat Kebijakan Jaringan dari filedefault-deny.yaml.kubectl apply -f default-deny.yamlOutput yang diharapkan:
networkpolicy.networking.k8s.io/deny-public-net createdLihat Kebijakan Jaringan:
kubectl get networkpolicy -n test-npOutput yang diharapkan:
NAME POD-SELECTOR AGE deny-public-net <none> 1mBuat Kebijakan Jaringan yang mengizinkan Pod dengan label tertentu mengakses jaringan publik.
vim allow-specify-label.yamlLabel 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.yamlOutput yang diharapkan:
networkpolicy.networking.k8s.io/allow-public-network-for-labels createdLihat Kebijakan Jaringan:
kubectl get networkpolicy -n test-npOutput yang diharapkan:
NAME POD-SELECTOR AGE allow-public-network-for-labels public-network=true 1m deny-public-net <none> 3mJalankan 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-intranetping aliyun.comOutput 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 lossJika 0 packets received ditampilkan, akses gagal.
CatatanKegagalan 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.
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-internetping aliyun.comOutput 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 msKetika 0% packet loss ditampilkan, Anda telah berhasil mengakses layanan.
CatatanPod 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.