Jika Anda ingin mengoptimalkan topologi jaringan, menambah kapasitas server aplikasi, atau membatasi trafik pengguna, Anda dapat menggunakan Pusat Manajemen Trafik di konsol Service Mesh (ASM) untuk memigrasikan trafik TCP secara mulus. Ini memastikan kelangsungan bisnis dan ketersediaan tinggi layanan. Topik ini menjelaskan cara memigrasikan trafik TCP dari satu versi aplikasi ke versi lain berdasarkan contoh TCP Traffic Shifting dari Istio. Dalam contoh ini, aplikasi bernama tcp-echo memiliki dua versi: v1 dan v2. Di versi v1, aplikasi menambahkan awalan "one" pada timestamp dalam respons sebelum mengembalikan respons. Di versi v2, aplikasi menambahkan awalan "two". Dengan cara ini, Anda dapat menyesuaikan kebijakan pemisahan trafik berdasarkan hasil migrasi untuk memenuhi persyaratan bisnis spesifik dan target performa.
Prasyarat
Layanan berikut telah diaktifkan:
Sebuah klaster ACK telah dibuat. Untuk informasi lebih lanjut, lihat Buat Klaster Khusus ACK (Tidak Digunakan Lagi) dan Buat Klaster Terkelola ACK.
Klaster ACK telah ditambahkan ke instance ASM Anda. Untuk informasi lebih lanjut, lihat Buat Instance ASM dan Tambahkan Klaster ke Instance ASM.
Langkah 1: Terapkan dua versi aplikasi sampel
Terapkan dua versi aplikasi tcp-echo.
Masuk ke konsol ACK. Di panel navigasi sisi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang diinginkan dan klik namanya. Di panel sisi kiri, pilih .
Di bagian atas halaman Deployments, pilih namespace tempat Anda ingin menerapkan dua versi aplikasi tcp-echo dari daftar drop-down Namespace, lalu klik Create from YAML di pojok kanan atas.
Pilih Custom dari daftar drop-down Sample Template, salin kode YAML berikut ke editor kode Template, lalu klik Create.
Kembali ke halaman Deployments, di mana Anda dapat menemukan dua versi aplikasi tcp-echo.
Buat layanan bernama tcp-echo dan paparkan layanan tersebut.
Masuk ke konsol ACK. Di panel navigasi sisi kiri, klik Clusters.
Di halaman Clusters, temukan klaster yang diinginkan dan klik namanya. Di panel sisi kiri, pilih .
Di bagian atas halaman Services, pilih namespace tempat Anda ingin membuat layanan dari daftar drop-down Namespace, lalu klik Create di pojok kanan atas.
Di kotak dialog Create Service, konfigurasikan parameter berikut dan klik OK.
Parameter
Deskripsi
Name
Nama layanan. Dalam contoh ini, nama diatur menjadi tcp-echo.
Service Type
Tipe layanan, yang menentukan bagaimana layanan dipaparkan. Nilai valid: Cluster IP, Node Port, dan Server Load Balancer.
CatatanKotak centang Headless Service hanya muncul ketika Anda mengatur parameter Service Type ke Cluster IP. Jika Anda memilih kotak centang ini, Anda dapat menggunakan layanan headless untuk berinteraksi dengan mekanisme penemuan layanan lainnya, bukan terikat pada implementasi penemuan layanan di Kubernetes.
Backend
Deployment yang akan dikaitkan dengan layanan. Dalam contoh ini, parameter Name diatur ke app dan parameter Value diatur ke tcp-echo-v1.
CatatanLayanan menggunakan label
appdari Deployment terkait sebagai pemilih untuk menentukan ke Deployment mana trafik akan dirutekan. Deployment tcp-echo-v1 dan tcp-echo-v2 berbagi label app yang sama, yaituapp:tcp-echo. Oleh karena itu, layanan dapat dikaitkan dengan salah satu dari dua Deployment tersebut.External Traffic Policy
Anda dapat memilih Lokal atau Klaster.
CatatanParameter External Traffic Policy hanya muncul ketika Anda mengatur tipe layanan ke Node Port atau Server Load Balancer.
Port Mapping
Dalam contoh ini, parameter Name diatur ke tcp, parameter Service Port dan Container Port diatur ke 9000, dan parameter Protocol diatur ke TCP.
Annotations
Anda dapat menambahkan anotasi ke layanan untuk mengonfigurasi load balancing. Sebagai contoh, anotasi
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20menentukan bahwa bandwidth maksimum layanan adalah 20 Mbit/s. Ini membatasi jumlah trafik yang mengalir melalui layanan. Untuk informasi lebih lanjut tentang parameter ini, lihat Gunakan anotasi untuk mengonfigurasi instance CLB.Label
Anda dapat menambahkan satu atau lebih label ke layanan untuk mengidentifikasi layanan tersebut.
Setelah layanan tcp-echo dibuat, Anda dapat melihat layanan tersebut di halaman Services.
Langkah 2: Konfigurasikan aturan routing
Anda dapat membuat gateway Istio, layanan virtual, dan aturan tujuan untuk instance ASM guna merutekan semua trafik ke versi v1 aplikasi tcp-echo.
Masuk ke konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance ASM atau klik Manage di kolom Actions.
Buat gateway Istio.
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Create, pilih default dari daftar drop-down Namespace, pilih template dari daftar drop-down Template, salin kode YAML berikut ke editor kode YAML, lalu klik Create.
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: tcp-echo-gateway spec: selector: istio: ingressgateway servers: - port: number: 31400 name: tcp protocol: TCP hosts: - "*"
Buat layanan virtual.
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Create, pilih default dari daftar drop-down Namespace, pilih template dari daftar drop-down Template, salin kode YAML berikut ke editor kode YAML, lalu klik Create.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: tcp-echo spec: hosts: - "*" gateways: - tcp-echo-gateway tcp: - match: - port: 31400 route: - destination: host: tcp-echo port: number: 9000 subset: v1
Buat aturan tujuan.
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri. Di halaman yang muncul, klik Create from YAML.
Di halaman Create, pilih default dari daftar drop-down Namespace, pilih template dari daftar drop-down Template, salin kode YAML berikut ke editor kode YAML, lalu klik Create.
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: tcp-echo-destination spec: host: tcp-echo subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2
Langkah 3: Terapkan gateway ingress
Tambahkan port 31400 ke gateway ingress dan peta port tersebut ke port 31400 dari gateway Istio.
Masuk ke konsol ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih .
Di halaman Ingress Gateway, klik Create. Di halaman Buat, konfigurasikan parameter lalu klik Create.
Tabel berikut menjelaskan beberapa parameter. Untuk informasi lebih lanjut, lihat Buat Gateway Ingress.
Parameter
Deskripsi
Cluster
Klaster tempat Anda ingin menerapkan gateway ingress.
CLB Instance Type
Tipe akses instance CLB. Dalam contoh ini, Internet Access dipilih.
Buat Instance CLB Baru atau Gunakan Instance CLB yang Ada
Gunakan Instance CLB yang Ada: Pilih instance CLB yang ada dari daftar drop-down.
Buat Instance CLB: Klik Create a CLB Instance dan pilih spesifikasi instance CLB yang Anda butuhkan dari daftar drop-down.
CatatanKami merekomendasikan agar Anda memilih instance CLB untuk setiap Layanan Kubernetes. Jika beberapa Layanan Kubernetes berbagi instance CLB yang sama, risiko dan batasan berikut ada:
Jika Anda mengonfigurasi Layanan Kubernetes untuk menggunakan instance CLB yang sudah digunakan oleh Layanan Kubernetes lain, pendengar yang ada dari instance CLB secara paksa ditimpa. Ini dapat mengganggu Layanan Kubernetes asli.
Jika Anda membuat instance CLB saat membuat Layanan Kubernetes, instance CLB tidak dapat dibagikan di antara Layanan Kubernetes. Hanya instance CLB yang Anda buat di konsol CLB atau dengan memanggil operasi API yang dapat dibagikan.
Layanan Kubernetes yang berbagi instance CLB yang sama harus menggunakan port mendengarkan frontend yang berbeda. Jika tidak, konflik port mungkin terjadi.
Jika beberapa Layanan Kubernetes berbagi instance CLB yang sama, nama pendengar dan nama grup vServer digunakan sebagai pengenal unik di Kubernetes. Jangan ubah nama pendengar atau grup vServer.
Anda tidak dapat berbagi instance CLB di seluruh klaster.
Port Mapping
Anda dapat mengklik Add Port dan tentukan protokol serta port layanan di baris yang muncul. Dalam contoh ini, protokol diatur ke TCP dan port layanan diatur ke 31400.
Langkah 4: Verifikasi hasilnya
Gunakan klien kubectl untuk memeriksa apakah semua trafik TCP dirutekan ke versi v1 aplikasi tcp-echo.
Gunakan klien kubectl untuk terhubung ke klaster ACK. Untuk informasi lebih lanjut, lihat 3. Konfigurasikan File kubeconfig dan Sambungkan ke Klaster.
Jalankan perintah berikut untuk menanyakan alamat IP dan nomor port layanan tcp-echo:
$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') $ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].port}')Jalankan perintah
telnetuntuk terhubung ke layanan tcp-echo.$ telnet $INGRESS_HOST $INGRESS_PORT Mencoba xxx.xxx.xxx.xxx... Terkoneksi ke xxx.xxx.xxx.xxx. Karakter escape adalah '^]'Masukkan string dan tekan Enter.
Jika string yang dikembalikan memiliki awalan "one", aplikasi tcp-echo telah diterapkan dan semua trafik layanan dirutekan ke versi v1 aplikasi tcp-echo.
Langkah 5: Migrasikan sebagian trafik ke versi tcp-echo-v2
Dalam contoh ini, 20% dari trafik dirutekan ke versi tcp-echo-v2 dan sisanya 80% dirutekan ke versi tcp-echo-v1.
Ubah konfigurasi layanan virtual instance ASM.
Di halaman detail instance ASM, pilih di panel navigasi sisi kiri.
Di halaman VirtualService, temukan layanan tcp-echo dan klik YAML di kolom Actions.
Dalam kotak dialog Edit, salin konten YAML berikut ke editor kode, lalu klik OK.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: tcp-echo spec: hosts: - "*" gateways: - tcp-echo-gateway tcp: - match: - port: 31400 route: - destination: host: tcp-echo port: number: 9000 subset: v1 weight: 80 - destination: host: tcp-echo port: number: 9000 subset: v2 weight: 20
Jalankan perintah berikut untuk mengirim 10 permintaan ke layanan tcp-echo:
$ for i in {1..10}; do \ docker run -e INGRESS_HOST=$INGRESS_HOST -e INGRESS_PORT=$INGRESS_PORT -it --rm busybox sh -c "(date; sleep 1) | nc $INGRESS_HOST $INGRESS_PORT"; \ done one Mon Nov 12 23:38:45 UTC 2018 two Mon Nov 12 23:38:47 UTC 2018 one Mon Nov 12 23:38:50 UTC 2018 one Mon Nov 12 23:38:52 UTC 2018 one Mon Nov 12 23:38:55 UTC 2018 two Mon Nov 12 23:38:57 UTC 2018 one Mon Nov 12 23:39:00 UTC 2018 one Mon Nov 12 23:39:02 UTC 2018 one Mon Nov 12 23:39:05 UTC 2018 one Mon Nov 12 23:39:07 UTC 2018Output di atas menunjukkan bahwa 20% dari trafik dirutekan ke versi tcp-echo-v2.
CatatanJika Anda mengirim 10 permintaan dalam pengujian, trafik mungkin tidak selalu dirutekan ke versi tcp-echo-v1 dan tcp-echo-v2 dengan rasio yang ditentukan. Namun, rasio aktual mendekati 80:20 ketika ukuran sampel meningkat.