Kubernetes memungkinkan Anda menggunakan objek NetworkPolicy di kluster Kubernetes untuk menolak atau mengizinkan lalu lintas akses dari layanan di namespace tertentu ke situs web eksternal tertentu. Namun, penggunaan objek NetworkPolicy hanya memberikan isolasi jaringan granular kasar dan tidak dapat menjamin keamanan aplikasi atau bisnis. Sistem keamanan zero-trust dari Service Mesh (ASM) memungkinkan Anda mengonfigurasi kebijakan otorisasi secara dinamis untuk mengontrol lalu lintas akses dari layanan di namespace ke situs web eksternal, membantu mengurangi risiko. Topik ini menjelaskan cara menggunakan kebijakan otorisasi untuk menolak lalu lintas akses dari semua layanan di namespace ke situs web eksternal. Namespace demo-frontend dan situs web eksternal aliyun.com digunakan sebagai contoh.
Prasyarat
Kluster telah ditambahkan ke instance ASM. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.
Namespace bernama demo-frontend telah dibuat dan injeksi proxy sidecar otomatis telah diaktifkan untuk namespace tersebut. Untuk informasi lebih lanjut, lihat Kelola namespace global.
Langkah 1: Buat layanan uji
Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Buat layanan bernama sleep di namespace demo-frontend.
Buat file sleep.yaml dengan konten berikut:
Jalankan perintah berikut untuk membuat layanan sleep:
kubectl apply -f sleep.yaml -n demo-frontend
Verifikasi bahwa proxy sidecar disuntikkan ke layanan sleep.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace dan klik nama pod layanan sleep.
Di tab Container, proxy sidecar bernama istio-proxy akan ditampilkan. Ini menunjukkan bahwa proxy sidecar telah disuntikkan ke layanan sleep.
Langkah 2: Buat gateway egress
Anda dapat menggunakan gateway egress untuk mengontrol lalu lintas akses dari layanan di instans Service Mesh ke situs web eksternal. Setelah mengonfigurasi kebijakan otorisasi untuk gateway egress, Anda juga dapat menentukan kondisi untuk mengontrol apakah akses ke situs web eksternal diizinkan. Dalam contoh ini, nama gateway egress diatur menjadi egressgateway. Untuk informasi lebih lanjut, lihat Buat gateway egress.
Langkah 3: Konfigurasikan kebijakan untuk mengakses layanan eksternal
Secara default, layanan di instance ASM diizinkan mengakses semua layanan eksternal. Untuk mengontrol akses ke situs web eksternal tertentu, atur parameter Outbound Traffic Policy ke REGISTRY_ONLY untuk instance ASM di Konsol ASM. Dalam hal ini, layanan eksternal yang tidak didaftarkan sebagai entri layanan tidak dapat diakses oleh layanan di instans Service Mesh.
Konfigurasikan kebijakan untuk mengakses layanan eksternal.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih .
Di tab global, klik Outbound Traffic Policy, atur parameter Outbound Traffic Policy ke REGISTRY_ONLY, lalu klik Update Settings.
Daftarkan situs web eksternal aliyun.com sebagai entri layanan.
Di halaman detail instance ASM, pilih di panel navigasi sebelah kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Buat, pilih istio-system dari daftar drop-down Namespace dan salin konten berikut ke editor kode. Lalu, klik Create.
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: aliyuncom-ext namespace: istio-system spec: hosts: - www.aliyun.com location: MESH_EXTERNAL ports: - name: http number: 80 protocol: HTTP - name: tls number: 443 protocol: TLS resolution: DNS
Langkah 4: Buat kebijakan lalu lintas
Buat gateway Istio, aturan tujuan, dan layanan virtual untuk merutekan lalu lintas dari namespace demo-frontend ke gateway egress dan kemudian ke situs web eksternal tertentu.
Buat gateway Istio di namespace istio-system dengan menggunakan kode YAML berikut. Untuk informasi lebih lanjut, lihat Kelola gateway Istio.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: istio-egressgateway namespace: istio-system spec: selector: istio: egressgateway servers: - port: number: 80 name: http protocol: HTTPS tls: mode: ISTIO_MUTUAL hosts: - '*'Dalam kode sebelumnya, parameter
modediatur keISTIO_MUTUAL. Ini berarti autentikasi Transport Layer Security mutual (mTLS) diaktifkan. Dalam hal ini, layanan di instance ASM harus melewati autentikasi TLS sebelum dapat mengakses situs web eksternal.Buat aturan tujuan di namespace demo-frontend dengan menggunakan kode YAML berikut. Untuk informasi lebih lanjut, lihat Kelola aturan tujuan.
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: target-egress-gateway namespace: demo-frontend spec: host: istio-egressgateway.istio-system.svc.cluster.local subsets: - name: target-egress-gateway-mTLS trafficPolicy: loadBalancer: simple: ROUND_ROBIN tls: mode: ISTIO_MUTUALDalam kode sebelumnya, parameter
modediatur keISTIO_MUTUAL. Ini berarti autentikasi mTLS diaktifkan. Dalam hal ini, layanan di instance ASM harus melewati autentikasi TLS sebelum dapat mengakses situs web eksternal.Buat layanan virtual di namespace demo-frontend dengan menggunakan kode YAML berikut. Untuk informasi lebih lanjut, lihat Kelola layanan virtual.
Dalam bagian
httppada kode sebelumnya, dua aturan pencocokan dikonfigurasi.Dalam aturan pencocokan pertama, parameter
gatewaysdiatur kemesh. Ini menunjukkan bahwa aturan pencocokan pertama berlaku untuk proxy sidecar yang disuntikkan ke namespace demo-frontend dan digunakan untuk merutekan lalu lintas dari namespace demo-frontend ke gateway egress.Dalam aturan pencocokan kedua, parameter
gatewaysdiatur keistio-system/istio-egressgateway. Ini menunjukkan bahwa aturan pencocokan kedua digunakan untuk merutekan lalu lintas dari gateway egress ke layanan eksternal yang terdaftar.
Langkah 5: Buat kebijakan otorisasi
Di namespace demo-frontend, buat kebijakan otorisasi yang mengizinkan gateway egress egressgateway untuk menolak lalu lintas akses dari namespace demo-frontend.
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih . Di halaman yang muncul, klik Create.
Di halaman Create, atur parameter yang dijelaskan dalam tabel berikut, lalu klik Create.
Parameter
Deskripsi
Name
Nama kebijakan otorisasi.
Policy Type
Aksi otorisasi. Dalam contoh ini, parameter ini diatur ke DENY.
ASM Gateway
Gateway tempat kebijakan otorisasi berlaku. Dalam contoh ini, parameter ASM Gateway di tab Gateway Scope diatur ke egressgateway.
Request Matching Rules
Dalam contoh ini, Namespaces diaktifkan di bagian Add Request Source dan nilainya diatur ke demo-frontend.
Langkah 6: Verifikasi bahwa kebijakan otorisasi dapat digunakan untuk menolak lalu lintas akses dari layanan di namespace demo-frontend ke situs web eksternal
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace. Temukan nama pod layanan sleep dan klik di kolom Actions.
Jalankan perintah berikut untuk mengakses situs web eksternal aliyun.com:
curl -I http://www.aliyun.comOutput yang diharapkan:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Thu, 12 Oct 2023 07:14:09 GMT server: envoy x-envoy-upstream-service-time: 4Kesalahan
403dikembalikan, yang menunjukkan bahwa layanan di namespace demo-frontend gagal mengakses situs web eksternal aliyun.com. Hasil pengujian menunjukkan bahwa kebijakan otorisasi dapat digunakan untuk menolak lalu lintas akses dari layanan di namespace demo-frontend ke situs web eksternal.