Secara default, layanan dalam kluster Container Service for Kubernetes (ACK) terisolasi dari jaringan eksternal. Untuk mengekspos layanan tersebut kepada pengguna, Anda dapat menggunakan ALB Ingress, yang memanfaatkan Application Load Balancer (ALB) sebagai titik masuk untuk mengelola lalu lintas inbound. ALB menyediakan routing berbasis domain, perlindungan keamanan, dan ketersediaan tinggi.
Cara kerja
|
Batasan tipe layanan
Saat menggunakan plugin jaringan Flannel, layanan backend dari ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.
Langkah 1: Instal ALB Ingress Controller
Saat membuat kluster
Masuk ke Konsol ACK atau , lalu klik Create Kubernetes Cluster.
Pada langkah Component Configurations, temukan bagian Ingress dan pilih ALB Ingress.
Pilih opsi untuk membuat instans ALB baru dan ikuti petunjuk di layar untuk membuat kluster.
ALB Instance
Description
New
Otomatis membuat instans ALB,
AlbConfig, danIngressClass.Instans ALB: Instans ALB standar dengan model bayar sesuai penggunaan (pay-as-you-go) (publik atau privat) akan dibuat di dalam virtual private cloud (VPC) kluster, dengan pendengar default pada port 80 (HTTP).
AlbConfig dan IngressClass: Resource
AlbConfigdanIngressClassyang sesuai akan dibuat secara otomatis di kluster dan dikaitkan dengan instans ALB baru tersebut.
Existing
Opsi ini hanya tersedia jika Anda memilih VPC yang sudah ada untuk jaringan kluster.
Menggunakan instans ALB yang sudah ada dan secara otomatis membuat
AlbConfigdanIngressClassterkait. Instans ALB yang dipilih harus memenuhi kriteria berikut:Edisi: Harus standar atau WAF-enabled.
Jaringan: Harus berada di VPC yang sama dengan kluster.
Asosiasi: Tidak boleh sudah dikaitkan dengan kluster lain.
None
Hanya menginstal ALB Ingress Controller. Anda harus membuat resource AlbConfig dan IngressClass secara manual nanti. Opsi ini cocok untuk menyesuaikan konfigurasi instans ALB.
Untuk kluster yang sudah ada
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Pada halaman Add-ons, klik tab Networking. Temukan ALB Ingress Controller dan klik Install.
Pilih opsi untuk membuat instans ALB baru dan klik OK.
ALB Instance
Description
New
Otomatis membuat instans ALB,
AlbConfig, danIngressClass.Instans ALB: Instans ALB standar dengan model bayar sesuai penggunaan (pay-as-you-go) (publik atau privat) akan dibuat di dalam virtual private cloud (VPC) kluster, dengan pendengar default pada port 80 (HTTP).
AlbConfig dan IngressClass: Resource
AlbConfigdanIngressClassyang sesuai akan dibuat secara otomatis di kluster dan dikaitkan dengan instans ALB baru tersebut.
Existing
Menggunakan instans ALB yang sudah ada dan secara otomatis membuat
AlbConfigdanIngressClassterkait. Instans ALB yang dipilih harus memenuhi kriteria berikut:Edisi: Harus standar atau WAF-enabled.
Jaringan: Harus berada di VPC yang sama dengan kluster.
Asosiasi: Tidak boleh sudah dikaitkan dengan kluster lain.
None
Hanya menginstal ALB Ingress Controller. Anda harus membuat resource AlbConfig dan IngressClass secara manual nanti. Opsi ini cocok untuk menyesuaikan konfigurasi instans ALB.
Langkah 2: Deploy aplikasi contoh
Contoh ini mendeploy aplikasi Nginx bernama coffee sebagai Deployment dan mengeksposnya secara internal melalui Service bernama coffee-svc.
Konsol
Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih .
Klik Create from YAML. Atur Sampel Template ke Custom, salin konten berikut ke editor templat, lalu klik Create.
Pada kotak dialog yang muncul, klik View dan pastikan status pod adalah
Running.
kubectl
Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.
Buat file bernama
coffee-deployment-service.yamldengan konten berikut:Deploy aplikasi.
kubectl apply -f coffee-deployment-service.yamlPastikan pod sedang berjalan.
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
Langkah 3: Buat ALB Ingress
Dengan mengonfigurasi nama domain dan pemetaan path untuk ALB Ingress, Anda dapat mengarahkan permintaan ke ingress-demo.com/coffee ke layanan internal coffee-svc di kluster.
Untuk menggunakan ALB Ingress di kluster khusus ACK, berikan izin akses terlebih dahulu kepada ALB Ingress Controller.
Konsol
Di panel navigasi kiri, pilih . Pilih namespace
defaultdan klik Create Ingress.Konfigurasikan hal berikut dan klik OK.
Name:
coffee-ingressDomain Name:
ingress-demo.comMappings
Path:
/coffeeRule:
PrefixService:
coffee-svcPort:
80Matching rule (pathType)
Description
Prefix
Mencocokkan berdasarkan awalan path URL. Misalnya, aturan dengan path
/coffeeakan mencocokkan permintaan untuk/coffee/1dan/coffee/buy/1, tetapi tidak akan mencocokkan/cofatau/coffeebuy/1.Exact
Mencocokkan path URL secara persis. Untuk aturan dengan path
/coffee, hanya permintaan untuk path persis/coffeeyang akan dicocokkan.ImplementationSpecific
Perilaku pencocokan bergantung pada controller Ingress. Untuk ALB Ingress Controller, tipe ini setara dengan pencocokan
Exact.
Dapatkan Endpoint.
ALB Ingress membutuhkan waktu sekitar 10 detik untuk berlaku. Klik tombol refresh untuk mendapatkan informasi endpoint. Jika informasi endpoint tidak diperbarui setelah waktu yang lama, klik nama Ingress dan buka tab Events untuk troubleshooting.

Uji nama domain dan endpoint. Jika kode status HTTP adalah
200, ALB Ingress telah berhasil dibuat.curl -H "Host:ingress-demo.com" http://<Endpoint address>/coffee -s -o /dev/null -w "%{http_code}\n"
kubectl
Buat file bernama
coffee-ingress.yaml.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 berdasarkan awalan path URL. Misalnya, aturan dengan path
/coffeeakan mencocokkan permintaan untuk/coffee/1dan/coffee/buy/1, tetapi tidak akan mencocokkan/cofatau/coffeebuy/1.Exact
Mencocokkan path URL secara persis. Untuk aturan dengan path
/coffee, hanya permintaan untuk path persis/coffeeyang akan dicocokkan.ImplementationSpecific
Perilaku pencocokan bergantung pada controller Ingress. Untuk ALB Ingress Controller, tipe ini setara dengan pencocokan
Exact.Deploy Ingress.
kubectl apply -f coffee-ingress.yamlAmbil endpoint publik Ingress dari field
ADDRESS. Mungkin diperlukan waktu hingga alamat tersebut ditetapkan.kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'Output yang diharapkan:
alb-******************.cn-wulanchabu.alb.aliyuncsslb.comUji nama domain dan endpoint. Jika kode status HTTP adalah
200, ALB Ingress telah berhasil dibuat.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 managed ACK dan tidak dikenai biaya.
Instans ALB: Setiap objek resource
AlbConfigmembuat instans ALB yang sesuai. Instans ALB ditagih berdasarkan model pay-as-you-go.
Terapkan di produksi
Konfigurasi DNS: Buat rekaman CNAME di penyedia DNS Anda untuk mengarahkan domain bisnis Anda ke endpoint publik instans ALB. Hal ini memisahkan nama domain dari endpoint instans dan memastikan ketersediaan tinggi serta konfigurasi fleksibel untuk endpoint layanan.
Aktifkan HTTPS: Gunakan Layanan Manajemen Sertifikat untuk mengelola sertifikat Anda dan referensikan dalam bagian
tlsresource Ingress Anda guna mengamankan layanan Anda dengan HTTPS.
Kuota dan batasan
Nama resource AlbConfig, Ingress, Service, dan namespace tidak boleh dimulai dengan
aliyun.Untuk batasan kuota ALB Ingress, lihat Metode menghitung kuota ALB.
Untuk ketersediaan ALB, lihat Wilayah dan zona tempat ALB tersedia.
FAQ
Mengapa saya mendapatkan error 503, 502, atau 404 saat mengakses Ingress saya?
Penyebab
Error 503 (Service Temporarily Unavailable)
Tidak ada aturan routing yang sesuai: Path permintaan tidak sesuai dengan aturan routing yang dikonfigurasi di Ingress.
Tidak ada pod backend yang sehat: Semua pod yang terkait dengan layanan tidak siap atau tidak ada. Hal ini menghasilkan objek endpoint kosong.
Error 502 (Bad Gateway)
Pendengar HTTP atau HTTPS menerima permintaan koneksi klien. Jika instans ALB tidak dapat meneruskan permintaan ke pod atau menerima respons dari pod, instans tersebut mengirimkan kode status HTTP 502 Bad Gateway ke klien.
Error 404 (Not Found)
Hal ini biasanya berarti permintaan sesuai dengan aturan routing yang didefinisikan di Ingress, tetapi tidak sesuai dengan URL layanan aktual yang disediakan oleh aplikasi di dalam pod.
Untuk kode error HTTP lainnya, lihat Kode Status ALB.
Solusi
Periksa status Ingress
Jalankan perintah
kubectl describe ingress <ingress-name> -n <namespace>dan periksa bagianEventsuntuk pesan error. Misalnya, jika Anda melihat event serupalistener is not exist in alb, artinya Anda perlu membuat pendengar yang diperlukan untuk resource Ingress diAlbConfig.... 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 endpoint backend
Jalankan perintah
kubectl get endpoints <service-name> -n <namespace>untuk memastikan fieldENDPOINTSberisi setidaknya satu alamat IP dan port pod yang sehat. Jika field tersebut kosong, verifikasi bahwaselectorService sesuai denganlabelspada pod Anda, dan pastikan pod berada dalam statusRunning.Periksa status dan log pod
Pertama, jalankan perintah
kubectl get pod -l <app=your-app> -n <namespace>untuk memeriksa status pod aplikasi Anda. Kemudian, jalankankubectl logs <pod-name> -n <namespace>untuk memeriksa log pod tertentu guna menemukan kegagalan startup atau error pemrosesan permintaan.Uji konektivitas jaringan
Dari pod lain atau langsung dari node, gunakan
curluntuk mengakses ClusterIP Service backend atau IP pod langsung. Hal ini akan memverifikasi bahwa layanan dapat dijangkau dari dalam kluster.
Mengapa HTTPS tidak berfungsi setelah saya mengonfigurasi TLS untuk Ingress?
Penyebab
HTTPS Listener tidak tersedia
Anda telah mengonfigurasi TLS di Ingress, tetapi instans ALB yang mendasarinya tidak dikonfigurasi untuk mendengarkan pada
HTTPS:443.Konfigurasi Secret salah
Secret yang direferensikan di Ingress Anda bukan bertipe
kubernetes.io/tlsatauIngressTLS, atau fielddataditls.crtdantls.keytidak valid atau tidak sesuai.Pembaruan sertifikat belum disinkronkan
Anda memperbarui sertifikat di Layanan Manajemen Sertifikat, tetapi perubahan tersebut belum tersebar ke instans ALB. Hal ini dapat terjadi jika ID sertifikat di
AlbConfigtidak diperbarui atau proses penemuan dan rekonsiliasi otomatis belum selesai. Instans ALB masih mereferensikan sertifikat lama.
Solusi
Verifikasi konfigurasi pendengar ALB
Periksa resource
AlbConfigAnda untuk memastikan pendengar HTTPS pada port 443 telah didefinisikan.kubectl describe albconfig <alb-name> -n <namespace>Cari entri pendengar dengan
spec.listeners.port: 443danspec.listeners.protocol: HTTPS.Periksa anotasi Ingress
Pastikan resource Ingress Anda menyertakan anotasi berikut untuk mengaitkannya dengan pendengar HTTP dan HTTPS:
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]Validasi konfigurasi Secret
Periksa bagian
spec.tlsmanifes Ingress Anda untuk memastikan fieldsecretNamemereferensikan Secret yang benar.Periksa Secret itu sendiri untuk memverifikasi tipe dan integritas datanya:
kubectl get secret <secret-name> -n <namespace> -o yaml
Pastikan tipe-nya adalah
kubernetes.io/tlsdan fieldtls.crtsertatls.keyberisi data yang valid dan terenkripsi base64.
Bagaimana cara mengonfigurasi DNS untuk Ingress saya?
Di konsol manajemen penyedia DNS Anda, tambahkan rekaman CNAME yang mengarahkan hostname yang diinginkan ke alamat endpoint Ingress.
Konfigurasi contoh:
Tipe rekaman:
CNAMEHost:
@(Biasanya merepresentasikan domain root, sepertiingress-demo.com)Nilai: Alamat endpoint Ingress Anda, seperti alamat instans ALB Anda.
Verifikasi konfigurasi.
Setelah rekaman DNS sempat tersebar, buka browser web dan arahkan ke domain Anda
http://ingress-demo.com/coffee. Jika halaman berhasil dimuat, resolusi DNS berfungsi dengan baik.
Gunakan nama domain terdaftar Anda sendiri untuk verifikasi. Jika resolusi nama domain gagal, lihat Troubleshooting cepat untuk kegagalan resolusi nama domain.
Bagaimana cara mengonfigurasi HTTPS untuk Ingress?
Ajukan permohonan ke otoritas sertifikasi (CA), beli sertifikat resmi, dan pastikan sertifikat Anda berstatus issued.
Contoh ini menunjukkan cara mengunduh file sertifikat berformat PEM untuk nama domain
ingress-demo.com. Jenis server diatur ke other.Buat Secret Kubernetes untuk sertifikat tersebut. Anda harus menyimpan sertifikat dan kunci privat Anda dalam Secret Kubernetes agar controller Ingress dapat mengaksesnya.
Pada halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih .
Pada halaman Secrets, pilih namespace
defaultdan klik Create di pojok kiri atas. Tambahkan konfigurasi berikut dan klik OK.Name:
ingress-tlsType: TLS Certificate
Certificates: Tempelkan seluruh isi file sertifikat Anda (
.pem).Key: Tempelkan seluruh isi file kunci privat Anda (
.key).

Tambahkan pendengar HTTPS ke
AlbConfigAnda.Di panel navigasi kiri, pilih . Pada tab Resource Objects, cari dan klik
AlbConfig.Temukan resource
AlbConfigtarget Anda (misalnyaalb). Di kolom Actions, klik Edit YAML.Tambahkan pendengar baru untuk HTTPS pada port 443 ke bagian
spec.listeners:
Klik OK untuk menerapkan perubahan.
Perbarui Ingress untuk mengaktifkan TLS.
Di panel navigasi kiri, pilih . Di kolom Actions Ingress target, klik Update.
Tambahkan konfigurasi berikut dan klik OK.
Aktifkan TLS Settings
Domain Name:
ingress-demo.comSecret:
ingress-tls
Annotations:
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]
Buka browser web dan arahkan ke
https://ingress-demo.com/coffee. Koneksi sekarang harus aman dan menggunakan HTTPS.
Gunakan domain terdaftar Anda sendiri untuk verifikasi.
Untuk informasi lebih lanjut, lihat Konfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.
Bagaimana cara membuat AlbConfig dan IngressClass secara manual?
Buat AlbConfig
Masuk ke Konsol VPC. Identifikasi dan catat ID minimal dua vSwitch yang berada di zona ketersediaan berbeda dalam VPC kluster Anda.
Zona Ketersediaan vSwitch yang dipilih harus berada di Wilayah dan zona.
Buat file bernama
albconfig.yamldengan konten berikut. Ganti placeholderzoneMappings.vSwitchIddengan ID aktual yang telah Anda catat pada langkah sebelumnya.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb # Jangan membuat beberapa resource AlbConfig dengan nama yang sama (alb) spec: config: name: alb-test addressType: Internet zoneMappings: - vSwitchId: vsw-****cg2a9g71hx8go**** # Ganti dengan ID vSwitch Anda yang sebenarnya - vSwitchId: vsw-****un9tql5t8nh15**** # Ganti dengan ID vSwitch Anda yang sebenarnya listeners: - port: 80 protocol: HTTPJalankan perintah berikut untuk membuat resource
AlbConfigdi kluster Anda:kubectl apply -f albconfig.yaml
Untuk instruksi lebih rinci, lihat Buat AlbConfig.
Buat IngressClass
Resource IngressClass mengaitkan AlbConfig dengan resource Ingress Anda. Dengan menyetel ingressClassName: alb dalam manifes Ingress, Anda menginstruksikan controller untuk menggunakan konfigurasi yang didefinisikan oleh IngressClass bernama alb.
Buat file bernama
ingressclass.yamldengan konten berikut.Field
spec.parameters.nameharus sesuai denganmetadata.nameresourceAlbConfigAnda (dalam kasus ini,alb).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 AlbConfigJalankan perintah berikut untuk membuat
IngressClass:kubectl apply -f ingressclass.yaml
Untuk panduan terperinci, lihat Gunakan IngressClass untuk mengaitkan AlbConfig dengan Ingress.
Referensi
Fitur lanjutan layanan ALB Ingress