Secara default, titik akhir backend untuk Service Kubernetes tersebar di semua node dalam kluster. Hal ini dapat menyebabkan masalah konektivitas atau kinerja tidak efisien untuk lalu lintas yang melintasi kelompok node berbeda. Fitur topologi layanan memungkinkan Anda membatasi lalu lintas ke aplikasi pada node tepi agar hanya dapat diakses oleh node dalam kelompok node yang sama atau oleh node lokal. Topik ini menjelaskan fitur topologi layanan dan cara mengonfigurasikannya.
Latar Belakang
Dalam skenario komputasi tepi, node tepi sering dikelompokkan berdasarkan lokasi geografis atau atribut logis lainnya, seperti arsitektur CPU, penyedia layanan Internet (ISP), atau penyedia layanan cloud. Kelompok-kelompok node ini biasanya terisolasi satu sama lain, sehingga mungkin tidak memiliki konektivitas jaringan, tidak berbagi sumber daya, menggunakan sumber daya heterogen, atau menjalankan aplikasi yang independen.
Cara kerja topologi layanan
Untuk mengatasi permasalahan tersebut, Container Service for Kubernetes (ACK) Edge menambahkan fitur manajemen topologi titik akhir ke Service native, yang memungkinkan Anda membatasi cakupan akses titik akhir backend suatu Service melalui konfigurasi yang sederhana. Misalnya, aplikasi pada node tepi hanya dapat diakses oleh node dalam kelompok node yang sama atau oleh node lokal. Prinsip implementasinya ditunjukkan pada gambar berikut.
-
Service1 dikaitkan dengan dua instans Pod backend: Pod 2 dan Pod 3.
annotation: "openyurt.io/topologyKeys: kubernetes.io/zone"menetapkan cakupan topologis Service1 ke kelompok node. -
Pod 2 berada di node 2 dan Pod 3 berada di node 4. Node-node ini masing-masing termasuk dalam dua kelompok node berbeda, yaitu kelompok node A dan kelompok node B.
-
Karena Pod 1 dan Pod 3 tidak berada dalam kelompok node yang sama, ketika Pod 1 mengakses Service1, lalu lintas hanya diarahkan ke Pod 2. Akses ke Pod 3 dibatasi.
Catatan penggunaan
-
Untuk versi sebelum v1.26.3-aliyun.1: Untuk mengaktifkan topologi layanan, Anda harus menerapkan anotasi topologi layanan saat membuat Service. Jika anotasi ditambahkan setelah Service dibuat, fitur tersebut tidak akan berlaku. Dalam hal ini, Anda harus menghapus dan membuat ulang Service tersebut.
-
Untuk v1.26.3-aliyun.1 dan versi setelahnya: Anda dapat mengubah anotasi topologi layanan setelah Service dibuat, dan perubahan tersebut langsung berlaku.
Anotasi
Anda dapat mengonfigurasi topologi layanan dengan menambahkan anotasi ke Service Kubernetes standar. Tabel berikut menjelaskan anotasi yang tersedia.
|
Kunci anotasi |
Nilai anotasi |
Deskripsi |
|
openyurt.io/topologyKeys |
kubernetes.io/hostname |
Membatasi akses Service hanya ke node lokal. |
|
openyurt.io/topologyKeys |
kubernetes.io/zone atau openyurt.io/nodepool |
Membatasi akses Service ke node dalam kelompok node yang sama. Jika versi kluster ACK Edge Anda adalah 1.18 atau lebih baru, kami merekomendasikan Anda menggunakan openyurt.io/nodepool. |
|
- |
- |
Tidak ada pembatasan topologi yang diterapkan pada Service. |
Konfigurasikan topologi layanan
Anda dapat mengonfigurasi topologi layanan menggunakan Konsol atau CLI.
Konsol
Untuk membuat Service yang hanya dapat diakses oleh node dalam kelompok node yang sama, tambahkan anotasi ke Service tersebut. Misalnya, atur Name menjadi openyurt.io/topologyKeys dan Value menjadi kubernetes.io/zone. Untuk informasi selengkapnya tentang cara membuat Service, lihat Manajemen Service.
CLI
Untuk membuat Service yang menggunakan kelompok node sebagai domain topologinya, gunakan contoh YAML berikut.
apiVersion: v1
kind: Service
metadata:
annotations:
openyurt.io/topologyKeys: kubernetes.io/zone
name: my-service-nodepool
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: nginx
sessionAffinity: None
type: ClusterIP