Topik ini menjawab pertanyaan yang sering diajukan (FAQ) tentang layanan di Container Service for Kubernetes (ACK) serta menyediakan solusi untuk masalah umum, seperti ketidakaksesan alamat IP Server Load Balancer (SLB) dari dalam kluster, kegagalan saat menggunakan kembali instance SLB yang ada, dan penanganan kegagalan peningkatan Cloud Controller Manager (CCM).
Indeks
Pertanyaan terkait SLB
Cara memilih antara kebijakan lalu lintas eksternal Local dan Cluster saat membuat layanan
Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?
Apa yang harus dilakukan jika instance SLB tetap berada dalam status Pending selama pembuatan
Apa yang harus dilakukan jika kelompok vServer SLB tidak diperbarui
Mengapa alamat IP SLB tidak dapat diakses dari dalam kluster?
Apa yang harus dilakukan jika saya tidak sengaja menghapus instance SLB
Cara mengaktifkan penggantian nama SLB untuk versi CCM yang lebih lama
Bagaimana bobot node diatur secara otomatis dalam mode Local?
Cara mengkueri alamat IP, nama, dan jenis semua instance SLB dalam kluster
FAQ tentang penggunaan kembali instance SLB yang ada
Pertanyaan lainnya
Pertanyaan terkait SLB
Tujuan spesifik instance SLB dalam kluster ACK
Jika Anda menginstal komponen Nginx Ingress saat membuat kluster Kubernetes, kluster tersebut membuat dua instance SLB secara default.
Kedua instance SLB tersebut memiliki tujuan sebagai berikut:
SLB API Server: Instance SLB ini merupakan titik akhir akses untuk API Server. Semua permintaan akses ke kluster harus melewati instance SLB ini. Instance ini mendengarkan pada port TCP 6443. Server backend-nya adalah pod API Server atau instance ECS master.
SLB Nginx Ingress Controller: Instance SLB ini dikaitkan dengan layanan
nginx-ingress-controllerdi namespace kube-system. Kelompok vServer secara dinamis mengikat pod Nginx Ingress Controller untuk melakukan load balancing dan meneruskan permintaan eksternal. Instance ini mendengarkan pada port 80 dan 443 melalui TCP.
Cara memilih antara kebijakan lalu lintas eksternal Local dan Cluster saat membuat layanan
Kebijakan lalu lintas eksternal Local dan Cluster menyediakan fitur berbeda untuk plug-in jaringan yang berbeda. Untuk informasi selengkapnya tentang perbedaan antara kebijakan lalu lintas eksternal Local dan Cluster, lihat Kebijakan lalu lintas eksternal.
Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?
Jika tidak ada informasi peristiwa yang ditampilkan setelah Anda menjalankan perintah kubectl -n {your-namespace} describe svc {your-svc-name}, periksa versi komponen CCM Anda.
Versi sebelum v1.9.3.276-g372aa98-aliyun: Komponen CCM tidak menampilkan peristiwa untuk sinkronisasi layanan dan LoadBalancer. Tingkatkan komponen tersebut. Untuk informasi selengkapnya tentang cara melihat dan meningkatkan versi CCM, lihat Tingkatkan komponen CCM.
Untuk versi v1.9.3.276-g372aa98-aliyun dan yang lebih baru, Anda dapat mengajukan tiket.
Apa yang harus dilakukan jika instance SLB tetap berada dalam status Pending selama pembuatan
Jalankan perintah
kubectl -n {your-namespace} describe svc {your-svc-name}untuk melihat informasi peristiwa.Selesaikan kesalahan yang dilaporkan dalam peristiwa tersebut. Untuk informasi tentang cara menangani berbagai pesan kesalahan dalam peristiwa, lihat Peristiwa kesalahan dan solusinya.
Jika tidak ada pesan kesalahan yang ditampilkan, lihat Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?.
Apa yang harus dilakukan jika kelompok vServer SLB tidak diperbarui
Jalankan perintah
kubectl -n {your-namespace} describe svc {your-svc-name}untuk melihat informasi peristiwa.Selesaikan kesalahan yang dilaporkan dalam peristiwa tersebut. Untuk informasi tentang cara menangani berbagai pesan kesalahan dalam peristiwa, lihat Peristiwa kesalahan dan solusinya.
Jika tidak ada pesan kesalahan yang ditampilkan, lihat Mengapa peristiwa untuk proses sinkronisasi layanan dan LoadBalancer tidak terlihat?.
Apa yang harus dilakukan jika anotasi layanan tidak berlaku
Periksa pesan kesalahan.
Jalankan perintah
kubectl -n {your-namespace} describe svc {your-svc-name}untuk melihat informasi peristiwa.Selesaikan kesalahan yang dilaporkan dalam peristiwa tersebut. Untuk informasi tentang cara menangani berbagai pesan kesalahan dalam peristiwa, lihat Peristiwa kesalahan dan solusinya.
Jika tidak ada pesan kesalahan yang ditampilkan, selesaikan masalah berdasarkan salah satu skenario berikut:
Pastikan versi CCM Anda memenuhi persyaratan versi untuk anotasi tersebut. Untuk informasi selengkapnya tentang pemetaan antara anotasi dan versi CCM, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).
Masuk ke Konsol Manajemen Container Service. Pada halaman Services, klik nama layanan target dan pastikan bahwa Layanan memiliki anotasi yang sesuai. Jika Layanan tidak memiliki anotasi, konfigurasikan anotasi tersebut.
Untuk informasi selengkapnya tentang cara menambahkan anotasi, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).
Untuk informasi selengkapnya tentang cara melihat daftar layanan, lihat Kelola layanan.
Periksa apakah anotasi dikonfigurasi dengan benar.
Mengapa konfigurasi instance SLB saya dimodifikasi?
CCM menggunakan API deklaratif dan secara otomatis memperbarui konfigurasi SLB berdasarkan konfigurasi layanan dalam kondisi tertentu. Setiap konfigurasi yang Anda modifikasi di konsol SLB berisiko ditimpa. Kami menyarankan agar Anda mengonfigurasi instance SLB menggunakan anotasi. Untuk informasi selengkapnya tentang cara menggunakan anotasi, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).
Jangan memodifikasi secara manual konfigurasi apa pun dari instance SLB yang dibuat dan dikelola oleh Kubernetes di konsol SLB. Jika tidak, konfigurasi mungkin hilang dan layanan menjadi tidak dapat diakses.
Mengapa alamat IP SLB tidak dapat diakses dari dalam kluster?
Skenario 1: Jika Anda menggunakan alamat IP pribadi untuk instance SLB yang tidak dibuat oleh layanan, akses dari dalam kluster mungkin gagal. Kegagalan ini terjadi jika pod yang mengakses instance SLB berada di node yang sama dengan pod backend.
Untuk layanan load balancing lapisan 4, instance ECS tidak dapat bertindak sebagai server backend sekaligus klien yang mengakses layanan. Untuk mengatasi masalah ini dan mencegah klien dan tujuan berada di node yang sama, gunakan salah satu metode berikut.
Ubah alamat IP SLB menjadi alamat IP publik.
Buat instance SLB menggunakan layanan dan atur kebijakan lalu lintas eksternal ke Cluster. Dalam kasus ini, kube-proxy mencegat lalu lintas yang dikirim ke instance SLB dari dalam kluster, sehingga menghindari batasan SLB.
Skenario 2: Anda mengatur kebijakan lalu lintas eksternal ke Local saat mengekspos layanan. Hal ini menyebabkan akses ke alamat IP SLB dari dalam kluster gagal.
Untuk informasi selengkapnya tentang penyebab dan solusi masalah ini, lihat Bagaimana cara mengatasi masalah di mana alamat SLB yang diekspos oleh layanan LoadBalancer tidak dapat diakses dari dalam kluster Kubernetes?.
Bagaimana cara mengatasi masalah di mana alamat SLB yang diekspos oleh layanan LoadBalancer tidak dapat diakses dari dalam kluster Kubernetes?
Deskripsi masalah
Dalam kluster Kubernetes, beberapa node dapat mengakses instance SLB dengan kebijakan lalu lintas eksternal Local yang diekspos oleh kluster, tetapi node lain tidak dapat. Masalah ini sering terjadi pada Ingress.
Penyebab
Instance SLB dikonfigurasi dengan externalTrafficPolicy: Local. Dengan kebijakan ini, alamat SLB hanya dapat diakses dari node yang meng-host pod backend yang sesuai. Karena alamat SLB ditujukan untuk penggunaan eksternal, jika node atau pod dalam kluster mencoba mengaksesnya, permintaan tidak dikirim ke instance SLB. Sebaliknya, kube-proxy mencegat permintaan dan meneruskannya berdasarkan aturan routing lokal (iptables atau IPVS).
Jika node tempat pod klien berada tidak meng-host pod backend untuk layanan tersebut, koneksi jaringan gagal. Jika node tersebut meng-host pod backend, layanan dapat diakses seperti yang diharapkan. Untuk informasi selengkapnya tentang masalah ini, lihat kube-proxy menambahkan alamat external-lb ke aturan iptables node lokal.
Solusi
Anda dapat menggunakan salah satu metode berikut untuk mengatasi masalah ini. Kami menyarankan agar Anda menggunakan metode pertama.
Akses layanan internal dari dalam kluster Kubernetes menggunakan alamat ClusterIP atau nama layanan mereka. Nama layanan untuk Ingress adalah
nginx-ingress-lb.kube-system.Ubah externalTrafficPolicy layanan LoadBalancer menjadi Cluster. Metode ini memastikan bahwa lalu lintas dapat diteruskan ke pod di semua node. Namun, hal ini menyebabkan kehilangan alamat IP sumber karena kluster melakukan source network address translation (SNAT). Artinya, aplikasi backend tidak dapat mengambil alamat IP asli klien. Jalankan perintah berikut untuk memodifikasi layanan Ingress:
kubectl edit svc nginx-ingress-lb -n kube-systemJika Anda menggunakan kluster Terway dengan ENI atau beberapa alamat IP per ENI, ubah externalTrafficPolicy layanan LoadBalancer menjadi Cluster dan tambahkan anotasi untuk eni passthrough, seperti
annotation: service.beta.kubernetes.io/backend-type: "eni". Blok kode berikut menunjukkan formatnya. Metode ini mempertahankan alamat IP sumber dan memungkinkan akses dari dalam kluster. Untuk informasi selengkapnya, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/backend-type: eni labels: app: nginx-ingress-lb name: nginx-ingress-lb namespace: kube-system spec: externalTrafficPolicy: Cluster
Kapan instance SLB dihapus secara otomatis?
Kebijakan penghapusan otomatis instance SLB bergantung pada apakah instance SLB tersebut dibuat secara otomatis oleh CCM. Tabel berikut menjelaskan kebijakan penghapusan tersebut.
Operasi layanan | Instance SLB yang dibuat otomatis oleh CCM | Instance SLB yang digunakan kembali |
Hapus layanan | Instance SLB dihapus. | Instance SLB dipertahankan. |
Ubah tipe layanan dari LoadBalancer ke tipe lain | Hapus instance SLB | Instance SLB dipertahankan. |
Apakah menghapus layanan juga menghapus instance SLB?
Jika Anda menggunakan kembali instance SLB yang ada (layanan memiliki anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-slb-id}), menghapus layanan tidak akan menghapus instance SLB. Jika tidak, menghapus layanan juga akan menghapus instance SLB yang sesuai.
Jika Anda mengubah tipe layanan (misalnya, dari LoadBalancer ke NodePort), instance SLB yang sesuai yang dibuat otomatis oleh CCM juga akan dihapus.
Jangan mengedit layanan secara manual untuk mengubah instance SLB yang dibuat otomatis oleh CCM menjadi instance SLB yang digunakan kembali. Hal ini memutuskan asosiasi layanan dari instance SLB yang dibuat otomatis. Saat Anda menghapus layanan, instance SLB yang sesuai tidak dapat dihapus secara otomatis.
Apa yang harus dilakukan jika saya tidak sengaja menghapus instance SLB
Skenario 1: Apa yang harus dilakukan jika Anda tidak sengaja menghapus instance SLB API Server
Instance tersebut tidak dapat dipulihkan. Anda harus membuat ulang kluster. Untuk informasi selengkapnya, lihat Buat kluster ACK Pro.
Skenario 2: Apa yang harus dilakukan jika Anda tidak sengaja menghapus instance SLB Ingress
Langkah-langkah berikut menggunakan Nginx Ingress sebagai contoh untuk menunjukkan cara membuat ulang instance SLB.
Masuk ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di bagian atas halaman Service, pilih kube-system dari daftar drop-down Namespace.
Dalam daftar layanan, temukan layanan target nginx-ingress-lb, klik YAML Edit di kolom Actions, hapus bidang
status.loadBalancerdan isinya, lalu klik OK untuk memicu CCM membuat ulang SLB.Jika nginx-ingress-lb tidak muncul dalam daftar layanan, klik Create From YAML di pojok kiri atas halaman dan gunakan templat berikut untuk membuat Layanan bernama nginx-ingress-lb.
apiVersion: v1 kind: Service metadata: labels: app: nginx-ingress-lb name: nginx-ingress-lb namespace: kube-system spec: externalTrafficPolicy: Local ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 selector: app: ingress-nginx type: LoadBalancer
Skenario 3: Apa yang harus dilakukan jika Anda tidak sengaja menghapus instance SLB khusus aplikasi
Jika layanan yang sesuai dengan instance SLB tidak lagi diperlukan, hapus layanan tersebut.
Jika layanan yang sesuai masih digunakan, lakukan langkah-langkah berikut:
Masuk ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Dari daftar drop-down Namespace di bagian atas halaman Service, klik All Namespaces, lalu temukan layanan Anda dalam daftar layanan.
Di kolom YAML Edit untuk layanan target, klik YAML Edit, hapus konten status, dan klik Update untuk memungkinkan CCM membuat ulang SLB.
Cara mengaktifkan penggantian nama SLB untuk versi CCM yang lebih lama
Instance SLB yang dibuat oleh Cloud Controller Manager (CCM) v1.9.3.10 dan yang lebih baru secara otomatis diberi tag untuk mendukung penggantian nama. Untuk instance SLB yang dibuat oleh versi v1.9.3.10 dan sebelumnya, Anda harus menambahkan tag tertentu secara manual untuk mengaktifkan penggantian nama.
Menambahkan tag secara manual untuk mengaktifkan penggantian nama hanya diperlukan untuk instance SLB yang dibuat oleh CCM v1.9.3.10 dan sebelumnya.
Tipe layanan harus LoadBalancer.
Masuk ke node master kluster Kubernetes. Untuk informasi selengkapnya, lihat Hubungkan ke kluster ACK menggunakan kubectl.
Jalankan perintah
kubectl get svc -n ${namespace} ${service}untuk melihat tipe layanan dan alamat IP.
CatatanGanti namespace dan service dengan namespace dan nama layanan kluster Anda.
Jalankan perintah berikut untuk menghasilkan tag yang diperlukan untuk instance SLB.
kubectl get svc -n ${namespace} ${service} -o jsonpath="{.metadata.uid}"|awk -F "-" '{print "kubernetes.do.not.delete: "substr("a"$1$2$3$4$5,1,32)}'
Masuk ke konsol Server Load Balancer. Berdasarkan alamat IP yang diambil pada Langkah 2, cari instance SLB di wilayah yang sesuai.
Tambahkan tag ke instance SLB menggunakan kunci dan nilai yang dihasilkan pada Langkah 3. Kunci dan nilai tersebut sesuai dengan 1 dan 2 pada gambar di atas. Untuk informasi selengkapnya, lihat Buat dan kelola instance CLB.
Bagaimana bobot node diatur secara otomatis dalam mode Local?
Bagian ini menggunakan skenario di mana pod aplikasi (app=nginx) diterapkan pada tiga instance ECS dan diekspos melalui Layanan A untuk menjelaskan cara menghitung bobot node dalam mode Local.

Versi v1.9.3.276-g372aa98-aliyun dan yang lebih baru
Karena masalah presisi dalam perhitungan bobot, ketidakseimbangan beban kecil mungkin masih terjadi di antara pod. Di CCM v1.9.3.276-g372aa98-aliyun dan yang lebih baru, CCM mengatur bobot node menjadi jumlah pod yang diterapkan pada node tersebut. Seperti yang ditunjukkan pada gambar berikut, bobot ketiga instance ECS adalah 1, 2, dan 3. Lalu lintas didistribusikan ke ketiga instance ECS dengan rasio 1:2:3, menghasilkan beban yang lebih seimbang di seluruh pod.
Rumusnya adalah sebagai berikut:

Versi setelah v1.9.3.164-g2105d2e-aliyun dan sebelum v1.9.3.276-g372aa98-aliyun
Versi sebelum v1.9.3.164-g2105d2e-aliyun
Cara mengkueri alamat IP, nama, dan jenis semua instance SLB dalam kluster?
Jalankan perintah berikut untuk mengambil nama, alamat IP, dan tipe alamat setiap layanan LoadBalancer di semua namespace.
kubectl get services -A -ojson | jq '.items[] | select(.spec.type == "LoadBalancer") | {name: .metadata.name, namespace: .metadata.namespace, ip: .status.loadBalancer.ingress[0].ip, lb_type: .metadata.annotations."service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"}'Output yang diharapkan adalah sebagai berikut:
{ "name": "test", "namespace": "default", "ip": "192.168.*.*", "lb_type": "intranet" } { "name": "nginx-ingress-lb", "namespace": "kube-system", "ip": "47.97.*.*", "lb_type": "null" }
Bagaimana cara memastikan bahwa LoadBalancer dapat menutup koneksi yang ada secara elegan saat server backend layanan LoadBalancer diganti?
Anda dapat mengonfigurasi pengurasan koneksi menggunakan anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain dan service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout. Setelah server backend dihapus dari layanan, LoadBalancer terus memproses koneksi yang ada dalam periode drain-timeout. Untuk informasi selengkapnya, lihat Aktifkan pengurasan koneksi untuk pendengar.
FAQ tentang penggunaan kembali instance SLB yang ada
Mengapa penggunaan kembali instance SLB yang ada gagal?
Periksa versi CCM. Versi CCM sebelum v1.9.3.105-gfd4e547-aliyun tidak mendukung penggunaan kembali instance SLB. Untuk informasi selengkapnya tentang cara melihat dan meningkatkan versi CCM, lihat Tingkatkan komponen CCM.
Periksa apakah instance SLB yang ingin Anda gunakan kembali dibuat oleh kluster. Anda tidak dapat menggunakan kembali instance SLB yang dibuat oleh kluster.
Periksa apakah instance SLB tersebut adalah instance SLB untuk API Server. Anda tidak dapat menggunakan kembali instance SLB untuk API Server.
Jika Anda ingin menggunakan kembali instance SLB akses internal, pastikan bahwa instance SLB dan kluster berada dalam VPC yang sama. Anda tidak dapat menggunakan kembali instance SLB lintas VPC.
Mengapa pendengar tidak dikonfigurasi saat saya menggunakan kembali instance SLB yang ada?
Periksa apakah anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners diatur ke "true". Jika anotasi ini tidak dikonfigurasi, pendengar tidak akan dibuat secara otomatis.
Secara default, penggunaan kembali instance CLB yang ada tidak menimpa pendengarnya karena alasan berikut:
Jika pendengar instance CLB yang ada terikat ke layanan, memaksa menimpanya dapat menyebabkan gangguan layanan.
CCM mendukung konfigurasi backend terbatas dan tidak dapat menangani konfigurasi kompleks. Jika Anda memiliki kebutuhan konfigurasi backend yang kompleks, Anda dapat mengonfigurasi pendengar di konsol tanpa menimpa yang sudah ada.
Karena alasan ini, kami menyarankan agar Anda tidak memaksa menimpa pendengar. Anda dapat memaksa menimpa pendengar jika port pendengar instance CLB yang ada tidak lagi digunakan.
Pertanyaan lainnya
Apa yang harus dilakukan jika peningkatan CCM gagal
Untuk informasi selengkapnya tentang cara mengatasi kegagalan peningkatan komponen CCM, lihat Pemeriksaan peningkatan Cloud Controller Manager (CCM) gagal.
Pesan kesalahan layanan dan solusinya
Tabel berikut menjelaskan solusi untuk berbagai pesan kesalahan.
Pesan kesalahan | Deskripsi dan solusi |
| Jumlah server backend untuk instance CLB telah mencapai batas kuota. Solusi: Optimalkan penggunaan kuota Anda dengan salah satu cara berikut:
|
| Instance CLB bersama tidak mendukung ENI. Solusi: Jika backend CLB menggunakan ENI, Anda harus memilih instance CLB berkinerja-tinggi. Anda dapat menambahkan anotasi Penting Pastikan anotasi tersebut kompatibel dengan versi CCM Anda. Untuk informasi selengkapnya tentang pemetaan antara anotasi dan versi CCM, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB). |
| Instance CLB tidak memiliki server backend. Periksa apakah layanan dikaitkan dengan pod dan apakah pod berjalan sebagaimana mestinya. Solusi:
|
| Instance CLB tidak dapat dikaitkan berdasarkan layanan. Solusi: Masuk ke konsol Server Load Balancer. Di wilayah tempat layanan berada, cari instance CLB berdasarkan
|
| Akun Anda memiliki pembayaran tertunda. |
| Saldo akun Anda tidak mencukupi. |
| OpenAPI CLB sedang mengalami pengendalian aliran. Solusi:
|
| Pendengar yang dikaitkan dengan kelompok vServer tidak dapat dihapus. Solusi:
|
| Kesalahan ini terjadi jika Anda menggunakan kembali instance CLB akses internal yang tidak berada dalam VPC yang sama dengan kluster. Solusi: Pastikan bahwa instance CLB dan kluster Anda berada dalam VPC yang sama. |
| Jumlah alamat IP yang tersedia di vSwitch tidak mencukupi. Solusi: Gunakan |
| Mode ENI tidak mendukung nilai string untuk Solusi: Ubah nilai bidang |
| Versi CCM yang lebih lama membuat instance CLB bersama secara default. Namun, instance CLB bersama telah dihentikan. Solusi: Tingkatkan komponen CCM. |
| Grup sumber daya instance CLB tidak dapat diubah setelah instance dibuat. Solusi: Hapus anotasi |
| Alamat IP ENI yang ditentukan tidak dapat ditemukan di VPC. Solusi: Periksa apakah anotasi |
| Metode penagihan instance CLB tidak dapat diubah dari bayar sesuai penggunaan menjadi bayar berdasarkan spesifikasi. Solusi:
|
| Kesalahan ini terjadi saat instance CLB yang dibuat oleh CCM digunakan kembali. Solusi:
|
| Tipe instance CLB tidak dapat diubah setelah instance dibuat. Kesalahan ini terjadi jika Anda mengubah tipe CLB setelah membuat layanan. Solusi: Hapus dan buat ulang layanan. |
| Layanan sudah terpasang ke instance CLB dan tidak dapat dipasang ke instance lain. Solusi: Anda tidak dapat menggunakan kembali instance CLB yang ada dengan mengubah ID CLB dalam anotasi |
Cara mengonfigurasi pendengar untuk layanan NodePort
CCM hanya mendukung konfigurasi pendengar untuk layanan LoadBalancer. Anda perlu mengubah tipe layanan dari NodePort menjadi LoadBalancer.
Cara mengakses layanan NodePort
Untuk mengakses Layanan dari dalam kluster (pada node kluster), Anda dapat menggunakan ClusterIP + Port atau IP Node + NodePort Layanan. Nomor port default yang diekspos oleh Layanan NodePort lebih besar dari 30000.
Untuk mengakses Layanan dari luar kluster (di luar node kluster), Anda dapat menggunakan alamat IP node dan NodePort Layanan. Nomor port default yang diekspos oleh Layanan NodePort lebih besar dari 30000.
Untuk mengakses layanan dari luar VPC (dari VPC lain atau Internet), Anda perlu mengekspos layanan LoadBalancer lalu mengakses layanan melalui titik akhir eksternalnya.
CatatanJika Anda mengatur kebijakan lalu lintas eksternal layanan Anda ke Local, pastikan bahwa node yang Anda akses meng-host pod backend layanan tersebut. Untuk informasi selengkapnya tentang kebijakan lalu lintas eksternal, lihat Kebijakan lalu lintas eksternal.
Cara mengonfigurasi rentang NodePort dengan benar
Di Kubernetes, API Server menyediakan parameter ServiceNodePortRange ( --service-node-port-range parameter baris perintah). Parameter ini membatasi rentang NodePort yang dapat didengarkan oleh layanan NodePort atau LoadBalancer. Nilai defaultnya adalah 30000 hingga 32767. Di kluster ACK Pro, Anda dapat memodifikasi rentang port ini dengan menyesuaikan parameter lapisan kontrol. Untuk informasi selengkapnya, lihat Sesuaikan parameter lapisan kontrol untuk kluster ACK Pro.
Anda harus sangat berhati-hati saat memodifikasi rentang NodePort. Pastikan bahwa rentang NodePort tidak bertentangan dengan rentang port yang ditentukan oleh parameter kernel
net.ipv4.ip_local_port_rangepada node kluster. Parameter kernelip_local_port_rangemengontrol rentang nomor port lokal yang dapat digunakan oleh aplikasi apa pun di sistem Linux. Nilai defaultip_local_port_rangeadalah 32768 hingga 60999.Dengan konfigurasi default kluster ACK Anda, parameter ServiceNodePortRange dan parameter
ip_local_port_rangetidak bertentangan. Jika Anda sebelumnya telah menyesuaikan salah satu parameter ini untuk meningkatkan batas port, sehingga rentangnya tumpang tindih, pengecualian jaringan sporadis dapat terjadi pada node. Dalam kasus parah, hal ini dapat menyebabkan kegagalan pemeriksaan kesehatan bisnis dan node kluster offline. Kami menyarankan agar Anda mengembalikan nilai default atau menyesuaikan kedua rentang port tersebut agar tidak tumpang tindih sama sekali.Setelah Anda menyesuaikan rentang port, beberapa layanan NodePort atau LoadBalancer di kluster mungkin masih menggunakan port dalam rentang parameter
ip_local_port_rangesebagai NodePort. Anda perlu mengonfigurasi ulang layanan ini untuk menghindari konflik. Anda dapat menjalankan perintahkubectl edit <service-name>untuk langsung mengubah nilai bidangspec.ports.nodePortmenjadi NodePort yang tidak digunakan.
Cara menambahkan izin yang diperlukan saat Anda meningkatkan komponen CCM ke versi yang lebih baru di kluster khusus ACK
Untuk meningkatkan kinerja, versi CCM yang lebih baru secara bertahap memperkenalkan API Alibaba Cloud yang memerlukan izin RAM tambahan (misalnya, v2.11.2 untuk manajemen rute di jaringan Flannel dan v2.12.1 untuk manajemen batch NLB).
Oleh karena itu, jika Anda ingin meningkatkan komponen ke v2.11.2 atau yang lebih baru di kluster khusus ACK, Anda harus memberikan izin yang diperlukan ke peran RAM-nya sebelum peningkatan untuk memastikan komponen berfungsi sebagaimana mestinya.
Masuk ke konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster target dan klik namanya. Di panel navigasi kiri, klik Cluster Information.
Klik tab Basic Information. Di area Cluster Resources, klik nama peran untuk Master RAM Role.
Pada halaman detail peran di konsol Resource Access Management, klik Permission Management, temukan kebijakan kustom yang namanya dimulai dengan
k8sMasterRolePolicy-Ccm-dalam daftar kebijakan, lalu klik nama kebijakan tersebut untuk membuka halaman manajemen kebijakan akses.Untuk kluster yang dibuat pada waktu yang lebih awal, kebijakan tersebut mungkin tidak ada. Anda dapat memilih kebijakan kustom yang namanya dimulai dengan
k8sMasterRolePolicy-.Klik Edit Policy dan tambahkan izin
nlb:ListAsynJobske izin NLB.
Jika Anda menggunakan kluster Flannel, Anda juga harus menambahkan izin vpc:CreateRouteEntries dan vpc:DeleteRouteEntries ke izin terkait VPC.

Setelah Anda menambahkan izin, kirimkan kebijakan tersebut sesuai petunjuk di halaman. Setelah perubahan disimpan, Anda dapat meningkatkan komponen CCM.


