Keamanan jaringan mencakup kontrol akses dan enkripsi traffic. Anda dapat menentukan network policies untuk membatasi akses jaringan antar layanan hanya pada traffic tertentu. Network policies terdiri dari berbagai pengaturan, seperti aturan default allow atau deny, isolasi namespace, dan konfigurasi security group. Selain itu, Anda dapat mengenkripsi traffic selama transmisi data guna mencegah perubahan atau kebocoran data sensitif. Dengan menerapkan teknologi dan solusi tersebut, Anda dapat meningkatkan keamanan antar layanan serta melindungi transmisi data sensitif.
Network policies
Secara default, Pod dalam kluster Kubernetes dapat saling berkomunikasi, yang menimbulkan risiko keamanan di lingkungan produksi. Anda dapat membuat network policies Kubernetes untuk mengontrol traffic antar Pod serta antara Pod dan layanan eksternal. Traffic antar Pod mengacu pada lalu lintas timur-barat (east-west traffic). Network policies menggunakan pod selectors dan label untuk mengidentifikasi Pod sumber dan tujuan. Selain itu, Anda dapat menentukan alamat IP, port, protokol, atau kombinasi elemen-elemen tersebut dalam network policies. Saat menggunakan plug-in jaringan Terway, Anda dapat mengonfigurasi network policies untuk aplikasi tertentu guna mengontrol traffic jaringan pada level alamat IP atau port. Untuk informasi selengkapnya, lihat Gunakan network policies di kluster ACK dan Kubernetes Network Policy Recipes.
Hanya kluster yang menggunakan plug-in jaringan Terway yang mendukung network policies Kubernetes. Jika kluster Anda memiliki lebih dari 100 node, proxy dari network policies Kubernetes dapat meningkatkan beban pada control plane Kubernetes. Dalam kasus ini, Anda perlu mengoptimalkan network policies Kubernetes di kluster tersebut. Untuk informasi selengkapnya, lihat Tingkatkan performa fitur NetworkPolicy untuk kluster ACK berskala besar dalam mode Terway.
Buat network policy default yang menolak semua traffic
Seperti pada kebijakan role-based access control (RBAC), Anda harus menerapkan prinsip hak istimewa minimal (least privilege) saat membuat network policies. Anda dapat membuat network policy default yang menolak semua traffic inbound dan outbound dari suatu namespace. Selain itu, Anda juga dapat membuat network policy global menggunakan Calico.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- EgressBuat network policy yang mengizinkan kueri DNS
Setelah membuat network policy default yang menolak semua traffic inbound dan outbound, Anda dapat membuat network policies untuk tujuan tertentu. Misalnya, Anda dapat membuat network policy global yang mengizinkan Pod mengirim kueri DNS ke CoreDNS.
Jalankan perintah berikut untuk menambahkan label ke namespace:
kubectl label namespace kube-system name=kube-systemBuat network policy menggunakan templat YAML berikut:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: name: kube-system ports: - protocol: UDP port: 53PentingUntuk informasi selengkapnya tentang cara mengontrol traffic jaringan antar Pod menggunakan network policies Kubernetes, lihat Network Policies.
Izinkan traffic dari Pod tertentu
Dalam skenario berikut, Anda dapat membuat network policy untuk mengizinkan traffic dari Pod tertentu:
Anda hanya ingin mengizinkan layanan mikro tertentu mengakses suatu aplikasi.
Anda hanya ingin mengizinkan aplikasi tertentu mengakses database.
Jalankan perintah berikut untuk membuat Pod dengan label
app-bookstoredanrole=api.kubectl run apiserver --image=nginx --labels="app=bookstore,role=api" --expose --port=80Buat file YAML berdasarkan templat berikut, lalu jalankan perintah
kubectl apply -funtuk menerapkan network policy menggunakan file tersebut.Network policy ini hanya mengizinkan traffic dari Pod yang memiliki label
app-bookstore.kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: api-allow spec: podSelector: matchLabels: app: bookstore role: api ingress: - from: - podSelector: matchLabels: app: bookstoreJalankan perintah berikut untuk memeriksa apakah akses dari Pod tanpa label app-bookstore ditolak:
kubectl run test-$RANDOM --rm -i -t --image=alpine -- shOutput yang diharapkan:
/ # wget -qO- --timeout=2 http://apiserver wget: download timed outJalankan perintah berikut untuk memeriksa apakah akses dari Pod dengan label
app-bookstorediizinkan:kubectl run test-$RANDOM --rm -i -t --image=alpine --labels="app=bookstore,role=frontend" -- shOutput yang diharapkan:
/ # wget -qO- --timeout=2 http://apiserver <!DOCTYPE html> <html><head>
Tambahkan aturan kustom untuk mengizinkan traffic antar Pod tertentu dalam namespace
Setelah membuat network policy yang mengizinkan komunikasi antar Pod dalam namespace, Anda dapat menambahkan aturan kustom untuk membatasi komunikasi hanya antar Pod tertentu dalam namespace tersebut. Untuk informasi selengkapnya, lihat Kubernetes Network Policy Recipes.
Monitor dan analisis data traffic
Alibaba Cloud Virtual Private Cloud (VPC) menyediakan flow logs yang mencatat informasi mengenai traffic inbound dan outbound dari elastic network interfaces (ENIs). Flow logs membantu memverifikasi aturan access control list (ACL), memantau traffic jaringan, dan memecahkan masalah jaringan. Anda dapat mengidentifikasi traffic abnormal antar sumber daya (termasuk Pod) dalam VPC dengan menganalisis flow logs. Untuk informasi selengkapnya, lihat Flow logs.
Security group
ACK menggunakan security groups untuk mengelola traffic antara node master dan node pekerja. Anda juga dapat menggunakan security groups untuk mengelola traffic antara node pekerja, sumber daya VPC lainnya, dan alamat IP eksternal. Saat membuat kluster ACK, sistem secara otomatis membuat security group untuk kluster tersebut, yang mengizinkan komunikasi antar node dalam kluster. Untuk meningkatkan keamanan, Anda dapat menambahkan aturan inbound dan outbound ke security group guna menerapkan prinsip hak istimewa minimal. Untuk informasi selengkapnya, lihat Aturan inbound dan outbound yang direkomendasikan untuk security group kluster.
Untuk informasi selengkapnya, lihat Konfigurasi security groups dalam berbagai skenario dan Konfigurasi security group.
Enkripsi transmisi data
Service Mesh (ASM)
ASM dapat mengenkripsi data yang ditransmisikan antar layanan. Selain autentikasi mutual Transport Layer Security (mTLS), Anda juga dapat menggunakan Envoy Secret Discovery Service (SDS) untuk mengaktifkan gerbang layanan (service gateways) agar mendukung HTTPS dan pemuatan sertifikat dinamis. ASM dapat digunakan bersama Application High Availability Service (AHAS) untuk mengelola traffic aplikasi yang dideploy di instans Service Mesh. ASM terintegrasi dengan Analisis Tracing untuk menyediakan kemampuan bagi pengembang aplikasi terdistribusi, seperti pemetaan jejak (trace mapping), penghitungan panggilan layanan, topologi jejak, dan analisis ketergantungan aplikasi. Pengembang dapat memanfaatkan kemampuan ini untuk mengidentifikasi dan mendiagnosis bottleneck performa dalam arsitektur aplikasi terdistribusi serta meningkatkan efisiensi pengembangan dan diagnostik.
Use a Secret to configure TLS to enable HTTPS access
Anda harus mengaktifkan akses HTTPS untuk layanan yang diekspos oleh Ingress di kluster. Untuk informasi selengkapnya, lihat Gunakan Secret untuk mengonfigurasi TLS agar mengaktifkan akses HTTPS.