Secara default, layanan dalam kluster ACK terisolasi dari jaringan eksternal. ALB Ingress mengekspos layanan tersebut dengan menggunakan Application Load Balancer (ALB) sebagai titik masuk untuk lalu lintas eksternal. ALB menyediakan routing berbasis domain, keamanan, dan ketersediaan tinggi.
Cara kerja
|
|
Batasan tipe layanan
Saat menggunakan plugin jaringan Flannel, layanan backend untuk ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.
Instal ALB Ingress Controller
Saat pembuatan kluster
-
Masuk ke Konsol ACK dan klik Create Kubernetes Cluster.
-
Pada langkah Component Configuration, buka bagian Ingress dan pilih ALB Ingress.
-
Contoh ini menggunakan opsi New. Ikuti petunjuk di layar untuk membuat kluster.
ALB Instance
Description
New
Otomatis membuat instans ALB, AlbConfig, dan IngressClass.
-
Instans ALB: Secara otomatis membuat instans ALB publik atau privat standar dengan model bayar sesuai penggunaan di VPC kluster dan mengonfigurasi pendengar
HTTP:80. -
AlbConfig dan IngressClass: Secara otomatis membuat resource AlbConfig dan IngressClass yang sesuai di kluster dan mengasosiasikannya dengan instans ALB.
Select Existing VPC
Opsi ini hanya tersedia jika kluster dikonfigurasi untuk menggunakan Virtual Private Cloud (VPC) yang sudah ada.
Menggunakan instans ALB yang sudah ada dan secara otomatis membuat AlbConfig serta IngressClass. Instans ALB yang ditentukan harus merupakan edisi Standard atau WAF-enhanced, berada di VPC yang sama dengan kluster, dan belum diasosiasikan dengan kluster lain.
None
Hanya menginstal komponen ALB Ingress Controller. Anda harus membuat AlbConfig dan IngressClass secara manual nanti. Ini cocok untuk skenario di mana Anda perlu menyesuaikan konfigurasi instans ALB.
-
Untuk kluster yang sudah ada
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.
-
Gunakan kotak pencarian atau klik tab Networking untuk menemukan komponen tersebut. Di kartu komponen ALB Ingress Controller, klik Install di pojok kanan bawah.
-
Contoh ini menggunakan opsi New. Klik OK.
ALB Instance
Description
New
Otomatis membuat instans ALB, AlbConfig, dan IngressClass.
-
Instans ALB: Secara otomatis membuat instans ALB publik atau privat standar dengan model bayar sesuai penggunaan di VPC kluster dan mengonfigurasi pendengar
HTTP:80. -
AlbConfig dan IngressClass: Secara otomatis membuat resource AlbConfig dan IngressClass yang sesuai di kluster dan mengasosiasikannya dengan instans ALB.
Existing
Menggunakan instans ALB yang sudah ada dan secara otomatis membuat AlbConfig serta IngressClass. Instans ALB yang ditentukan harus merupakan edisi Standard atau WAF-enhanced, berada di VPC yang sama dengan kluster, dan belum diasosiasikan dengan kluster lain.
None
Hanya menginstal komponen ALB Ingress Controller. Anda harus membuat AlbConfig dan IngressClass secara manual nanti. Ini cocok untuk skenario saat Anda perlu menyesuaikan konfigurasi instans ALB.
-
Buat aplikasi contoh
Aplikasi contoh ini menyebarkan Deployment bernama coffee dan layanan (Service) terkait bernama coffee-svc.
Konsol
-
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Klik Create from YAML. Pilih Custom dari daftar drop-down Sampel Template. Lalu, salin konten berikut ke editor templat dan klik Create.
-
Di kotak dialog konfirmasi, klik View dan verifikasi bahwa status Pod adalah
Running.
kubectl
-
Buat file bernama
coffee-deployment-service.yamlyang berisi konten berikut. -
Buat Deployment dan Service untuk aplikasi contoh.
kubectl apply -f coffee-deployment-service.yaml -
Verifikasi bahwa status Pod adalah
Running.kubectl get pod -l app=coffeeOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE coffee-84bd6*****-***** 1/1 Running 0 4m22s coffee-84bd6*****-***** 1/1 Running 0 4m22s
Buat ALB Ingress
Konfigurasikan nama domain dan pemetaan path untuk ALB Ingress agar mengarahkan permintaan untuk ingress-demo.com/coffee ke layanan coffee-svc di dalam kluster.
Untuk menggunakan ALB Ingress di kluster khusus ACK, Anda harus memberikan izin akses kepada ALB Ingress Controller.
Konsol
-
Di panel navigasi kiri, pilih . Pilih namespace
defaultdan klik Create Ingress. -
Tentukan parameter Ingress berikut dan klik OK.
-
Name:
coffee-ingress -
Domain Name:
ingress-demo.com -
Mappings: Path:
/coffee, Match Rule:Prefix, Service:coffee-svc, Port:80.Matching rule (pathType)
Description
Prefix
Mencocokkan path permintaan berdasarkan awalannya. Misalnya, permintaan untuk
/coffee/1atau/coffee/buy/1akan dicocokkan, tetapi permintaan untuk/cofatau/coffeebuy/1tidak.Exact
Mencocokkan path permintaan secara tepat. Hanya permintaan untuk
/coffeeyang dicocokkan.ImplementationSpecific
Perilaku pencocokan bergantung pada implementasi controller Ingress. Untuk ALB Ingress Controller, tipe ini setara dengan pencocokan Exact.
-
-
Dapatkan alamat Endpoint.
ALB Ingress membutuhkan waktu sekitar 10 detik untuk berlaku. Anda dapat mengklik tombol refresh untuk mendapatkan informasi endpoint. Jika endpoint tidak diperbarui setelah waktu yang lama, klik nama Ingress dan buka tab Events untuk troubleshooting masalah.
Di kolom Endpoint daftar Ingress, temukan alamat endpoint ALB, yang memiliki format serupa dengan
alb-<instance_id>.cn-wulanchabu.alb.aliyuncsslb.com. -
Uji akses ke domain dan endpoint. Kode status HTTP
200menunjukkan bahwa ALB Ingress berfungsi dengan benar.curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"
kubectl
-
Buat file bernama
coffee-ingress.yamldengan konten berikut. Lalu, jalankan perintahkubectl apply -f coffee-ingress.yamluntuk membuat ALB Ingress.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: coffee-ingress namespace: default spec: ingressClassName: alb rules: - host: ingress-demo.com http: paths: - path: /coffee backend: service: name: coffee-svc port: number: 80 pathType: PrefixMatching rule (pathType)
Description
Prefix
Mencocokkan path permintaan berdasarkan awalannya. Misalnya, permintaan untuk
/coffee/1atau/coffee/buy/1akan dicocokkan, tetapi permintaan untuk/cofatau/coffeebuy/1tidak.Exact
Mencocokkan path permintaan secara tepat. Hanya permintaan untuk
/coffeeyang dicocokkan.ImplementationSpecific
Perilaku pencocokan bergantung pada implementasi controller Ingress. Untuk ALB Ingress Controller, tipe ini setara dengan pencocokan Exact.
-
Lihat Ingress dan dapatkan alamat endpoint dari field
ADDRESS.kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'Output yang diharapkan:
alb-******************.cn-wulanchabu.alb.aliyuncsslb.com -
Uji akses ke domain dan endpoint. Kode status HTTP
200menunjukkan bahwa ALB Ingress berfungsi dengan benar.curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"
Penagihan
-
ALB Ingress Controller: Ini adalah komponen terkelola ACK dan tidak dikenai biaya.
-
Instans ALB: Setiap resource objek
AlbConfigmembuat instans ALB yang sesuai. Instans ALB menggunakan penagihan pay-as-you-go.
Deployment produksi
-
Konfigurasikan DNS: Buat rekaman CNAME untuk memetakan domain layanan Anda ke titik akhir publik instans ALB. Hal ini memisahkan domain dari titik akhir instans, sehingga memastikan titik masuk layanan yang sangat tersedia dan fleksibel.
-
Aktifkan HTTPS: Gunakan Layanan Manajemen Sertifikat untuk mengelola sertifikat Anda secara terpusat, dan referensikan secara deklaratif di field
tlsresource Ingress untuk mengamankan lalu lintas layanan dengan HTTPS.
Kuota dan batasan
-
Nama resource AlbConfig, Ingress, Service, dan namespace tidak boleh dimulai dengan
aliyun. -
Untuk informasi tentang batasan kuota ALB Ingress, lihat Perhitungan kuota ALB.
-
Untuk wilayah dan zona ketersediaan yang didukung oleh ALB Ingress, lihat Wilayah dan zona yang didukung oleh ALB.
FAQ
Mengapa Ingress mengembalikan kode error HTTP?
Penyebab
-
Error 503 (Service Temporarily Unavailable)
-
Tidak ada aturan routing yang sesuai: Path permintaan tidak sesuai dengan aturan routing apa pun yang dikonfigurasi di Ingress.
-
Tidak ada pod backend yang sehat: Layanan terkait tidak memiliki pod yang siap, sehingga menghasilkan objek endpoints kosong.
-
-
Error 502 (Bad Gateway)
Setelah pendengar HTTP atau HTTPS menerima permintaan koneksi klien, ALB mengirim kode status HTTP 502 Bad Gateway ke klien karena gagal meneruskan permintaan ke Pod atau menerima respons dari Pod.
-
Error 404 (Not Found)
Hal ini biasanya terjadi ketika permintaan sesuai dengan aturan routing Ingress, tetapi URL-nya tidak sesuai dengan path layanan aplikasi di pod backend.
-
Error 400 (Bad Request)
Hal ini dapat terjadi karena beberapa alasan, seperti mengirim permintaan HTTP ke pendengar HTTPS.
Untuk informasi lebih lanjut tentang kode error HTTP, lihat Kode status ALB.
Solusi
-
Periksa status Ingress: Jalankan perintah
kubectl describe ingress <ingress-name> -n <namespace>dan periksa bagian Events untuk pesan error. Jika muncul event sepertilistener is not exist in alb, tambahkan konfigurasi pendengar yang diperlukan ke AlbConfig Anda.... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedBuildModel **** ingress listener is not exist in alb, port: 443, protocol: HTTPS Warning FailedBuildModel **** ingress listener not found for (443/HTTPS), with ingresses 1 ... -
Periksa endpoints backend: Jalankan perintah
kubectl get endpoints <service-name> -n <namespace>untuk memastikan fieldENDPOINTSmencantumkan setidaknya satu alamat IP dan port pod yang sehat. Jika kosong, verifikasi bahwaselectorlayanan sesuai denganlabelspod, dan bahwa pod berada dalam statusRunning. -
Periksa status dan log pod: Jalankan
kubectl get pod -l <app=your-app> -n <namespace>untuk melihat status pod. Lalu, gunakan nama pod untuk menjalankankubectl logs <pod-name> -n <namespace>dan periksa log aplikasi untuk kegagalan startup atau error pemrosesan permintaan. -
Uji konektivitas jaringan: Dari dalam pod atau dari node, gunakan
curluntuk mengakses ClusterIP layanan backend atau IP pod guna memverifikasi bahwa layanan dapat dijangkau di dalam kluster.
Mengapa HTTPS tidak dapat diakses setelah konfigurasi TLS?
Penyebab
-
Instans ALB tidak mendengarkan di port 443: Anda telah mengonfigurasi TLS untuk Ingress, tetapi pendengar
HTTPS:443yang sesuai belum dibuat. -
Konfigurasi sertifikat salah: Tipe Secret bukan
kubernetes.io/tlsatauIngressTLS, atau kontentls.crtdantls.keydi fielddatasalah atau tidak cocok. -
Sertifikat kedaluwarsa: Instans ALB mungkin menggunakan sertifikat lama. Hal ini terjadi jika Anda memperbarui sertifikat di Alibaba Cloud Certificate Management Service tetapi tidak memperbarui ID sertifikat di AlbConfig Anda, atau jika penemuan otomatis dan rekonsiliasi gagal dipicu.
Solusi
-
Periksa port pendengar: Jalankan perintah
kubectl describe albconfig <alb-name> -n <namespace>untuk memverifikasi bahwa konfigurasispec.listeners.port: 443danspec.listeners.protocol: HTTPSada. -
Periksa konfigurasi Ingress: Verifikasi bahwa konfigurasi Ingress mencakup anotasi
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]. Anotasi ini mengasosiasikan Ingress dengan pendengar HTTP dan HTTPS. -
Periksa konfigurasi Secret: Di konfigurasi Ingress, periksa field
secretNamedarispec.tlsuntuk memastikan Secret yang benar dirujuk. Jalankan perintahkubectl get secret <secret-name> -n <namespace> -o yamluntuk memastikan tipe Secret dan integritas data.
Bagaimana cara mengonfigurasi resolusi nama domain Ingress?
-
Misalnya, tambahkan rekaman DNS dengan tipe catatan
CNAME, rekaman host@(yang mewakili domain root, sepertiingress-demo.com), dan nilai catatan sebagai alamat endpoint Ingress. -
Di browser, buka http://ingress-demo.com/coffee untuk memverifikasi bahwa resolusi nama domain berfungsi.
Setelah akses berhasil, halaman uji NGINX dikembalikan, menampilkan informasi seperti Server address, Server name, Date, dan URI (dengan nilai
/coffee) dari pod backend. Hal ini menunjukkan bahwa Ingress telah mengarahkan permintaan ke pod backend dengan benar.Untuk verifikasi, ganti contoh dengan nama domain yang Anda daftarkan. Jika resolusi nama domain gagal, lihat Troubleshooting cepat untuk kegagalan resolusi nama domain.
Bagaimana cara mengonfigurasi HTTPS untuk Ingress?
-
Beli sertifikat resmi, dan ajukan sertifikat. Pastikan sertifikat yang ingin Anda gunakan berada dalam status Issued.
-
Contoh ini menunjukkan cara mengunduh file sertifikat berformat PEM untuk domain
ingress-demo.com, dengan tipe server diatur ke Other. -
Buat Secret untuk menyimpan file sertifikat.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Di halaman Secrets, pilih namespace
defaultlalu klik Create di sebelah kiri. Tambahkan konfigurasi berikut dan klik OK.-
Name:
ingress-tls -
Type: TLS Certificate
-
Certificates: Konten lengkap file sertifikat (.pem) yang telah diunduh dan diekstrak.
-
Key: Konten lengkap file kunci privat (.key) yang telah diunduh dan diekstrak.
-
-
Perbarui AlbConfig untuk menambahkan pendengar
HTTPS:443untuk instans ALB.-
Di panel navigasi kiri, pilih . Di tab Resource Objects, cari AlbConfig, lalu klik hasil pencarian tersebut.
-
Di daftar objek resource AlbConfig, temukan resource target
albdan klik Edit YAML di kolom Actions. -
Tambahkan field
spec.listeners.port: 443danspec.listeners.protocol: HTTPS, lalu klik OK.spec: config: addressAllocatedMode: Fixed addressType: Internet zoneMappings: - vSwitchId: vsw-xxx - vSwitchId: vsw-xxx listeners: - port: 80 protocol: HTTP - port: 443 protocol: HTTPS
-
-
Perbarui Ingress untuk menambahkan konfigurasi TLS dan mengasosiasikannya dengan pendengar
HTTPS:443.-
Di panel navigasi kiri, pilih . Di kolom Actions Ingress target, klik Update.
-
Tambahkan konfigurasi berikut dan klik OK.
-
TLS Settings: Enabled
-
Domain Name:
ingress-demo.com -
Secrets:
ingress-tls -
Annotations:
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]
-
-
-
Di browser, buka
https://ingress-demo.com/coffeeuntuk memverifikasi akses HTTPS.Halaman menampilkan logo NGINX dan informasi respons server. Server address, Server name, dan URI (dengan nilai
/coffee) dikembalikan sesuai harapan. Hal ini mengonfirmasi bahwa HTTPS dikonfigurasi dengan benar dan Ingress mengarahkan permintaan ke pod backend coffee.Untuk verifikasi, ganti contoh dengan nama domain yang Anda daftarkan.
Untuk informasi lebih lanjut tentang cara mengonfigurasi sertifikat HTTPS, lihat Mengonfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.
Bagaimana cara membuat AlbConfig dan IngressClass secara manual?
Buat AlbConfig
-
Masuk ke Konsol VPC dan catat ID minimal dua vSwitch yang berada di zona ketersediaan berbeda dalam VPC tempat kluster ditempatkan.
Zona ketersediaan vSwitch yang dikonfigurasi harus didukung oleh ALB. Untuk informasi lebih lanjut, lihat Wilayah dan zona ALB.
-
Ganti
zoneMappings.vSwitchIddalam kode berikut dengan ID vSwitch yang Anda peroleh pada langkah sebelumnya. Simpan konten ke file bernama albconfig.yaml dan jalankankubectl apply -f albconfig.yamluntuk membuat AlbConfig.Untuk langkah-langkah lebih rinci, lihat Buat AlbConfig.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb # Jangan membuat resource AlbConfig lain dengan nama yang sama. spec: config: name: alb-test addressType: Internet zoneMappings: - vSwitchId: vsw-****cg2a9g71hx8go**** # Ganti dengan ID vSwitch aktual Anda. - vSwitchId: vsw-****un9tql5t8nh15**** # Ganti dengan ID vSwitch aktual Anda. listeners: - port: 80 protocol: HTTP
Buat IngressClass
Resource IngressClass mengasosiasikan AlbConfig dengan resource Ingress. Saat Anda menentukan ingressClassName: alb dalam Ingress, resource tersebut menggunakan AlbConfig yang didefinisikan dalam IngressClass alb.
Simpan konten berikut ke file bernama IngressClass.yaml, lalu jalankan kubectl apply -f IngressClass.yaml untuk membuat IngressClass.
Fieldspec.parameters.nameharus diatur ke nama AlbConfig. AlbConfig default yang dibuat saat Anda menginstal komponen diberi namaalb. Untuk informasi lebih lanjut, lihat Gunakan IngressClass untuk mengasosiasikan AlbConfig dengan Ingress.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: alb # Ini harus sesuai dengan nama resource AlbConfig.
Dokumentasi terkait
Penggunaan ALB Ingress Tingkat Lanjut