Bantu tingkatkan halaman ini
Ingin berkontribusi pada panduan pengguna ini? Gulir ke bagian bawah halaman ini dan pilih Edit halaman ini GitHub. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyeimbangkan beban jaringan di Amazon EKS
Lalu lintas jaringan seimbang beban L4
pada model OSI. Untuk memuat lalu lintas aplikasi keseimbangan diL7
, Anda menerapkan Kubernetesingress
, yang menyediakan AWS Application Load Balancer. Untuk informasi selengkapnya, lihat Penyeimbangan beban aplikasi pada Amazon EKS. Untuk mempelajari lebih lanjut tentang perbedaan antara kedua jenis load balancing, lihat fitur Elastic Load Balancing
Saat Anda membuat tipe Kubernetes Service
ofLoadBalancer
, pengontrol penyeimbang beban penyedia AWS cloud membuat AWS Classic Load Balancer secara default, tetapi juga dapat membuat AWS Network Load Balancer. Pengontrol ini hanya menerima perbaikan bug kritis di masa mendatang. Untuk informasi selengkapnya tentang penggunaan penyeimbang beban penyedia AWS AWS cloud, lihat pengontrol penyeimbang beban penyedia cloud
Kami menyarankan Anda menggunakan versi 2.7.2
atau yang lebih baru AWS Load Balancer Controllerdaripada pengontrol penyeimbang beban penyedia AWS
cloud. AWS Load Balancer ControllerIni membuat AWS Network Load Balancers, tetapi tidak membuat AWS Classic Load Balancer. Sisa topik ini adalah tentang menggunakan AWS Load Balancer Controller.
AWS Network Load Balancer dapat memuat lalu lintas jaringan keseimbangan untuk Pods digunakan ke IP Amazon EC2 dan target instans atau ke target IP. AWS Fargate Untuk informasi selengkapnya, lihat AWS Load Balancer Controller
Prasyarat
Sebelum Anda dapat memuat lalu lintas jaringan keseimbangan menggunakanAWS Load Balancer Controller, Anda harus memenuhi persyaratan berikut.
-
Memiliki klaster yang ada. Jika Anda tidak memiliki klaster yang ada, lihat Memulai dengan Amazon EKS. Jika Anda perlu memperbarui versi klaster yang ada, lihat Memperbarui Kubernetes versi cluster Amazon EKS.
-
Miliki yang AWS Load Balancer Controller diterapkan di cluster Anda. Untuk informasi selengkapnya, lihat Apa itu AWS Load Balancer Controller?. Kami merekomendasikan versi
2.7.2
atau yang lebih baru. -
Setidaknya satu subnet. Jika beberapa subnet yang diberi tag ditemukan di Availability Zone, controller memilih subnet pertama yang subnetnya ID didahulukan secara leksikografis. Subnet harus memiliki setidaknya delapan alamat IP yang tersedia.
-
Jika Anda menggunakan AWS Load Balancer Controller versi
2.1.1
atau sebelumnya, subnet harus diberi tag sebagai berikut. Jika menggunakan versi2.1.2
atau yang lebih baru, tag ini opsional. Anda mungkin ingin menandai subnet jika Anda memiliki beberapa cluster yang berjalan di VPC yang sama, atau beberapa AWS layanan berbagi subnet di VPC, dan ingin lebih banyak kontrol atas tempat penyeimbang beban disediakan untuk setiap cluster. Jika Anda secara eksplisit menentukan ID subnet sebagai anotasi pada objek layanan, maka Kubernetes dan AWS Load Balancer Controller gunakan subnet tersebut secara langsung untuk membuat penyeimbang beban. Penandaan subnet tidak diperlukan jika Anda memilih untuk menggunakan metode ini untuk menyediakan penyeimbang beban dan Anda dapat melewati persyaratan penandaan subnet pribadi dan publik berikut. Ganti
dengan nama klaster Anda.my-cluster
-
Kunci –
kubernetes.io/cluster/
my-cluster
-
Nilai –
shared
atauowned
-
-
Subnet publik dan pribadi Anda harus memenuhi persyaratan berikut, kecuali jika Anda secara eksplisit menentukan ID subnet sebagai anotasi pada objek layanan atau ingress. Jika Anda menyediakan penyeimbang beban dengan secara eksplisit menentukan ID subnet sebagai anotasi pada objek layanan atau ingress, maka AWS Load Balancer Controller gunakan subnet tersebut secara langsung untuk membuat penyeimbang beban Kubernetes dan tag berikut tidak diperlukan.
-
Subnet pribadi — Harus ditandai dalam format berikut. Hal ini agar Kubernetes dan AWS Load Balancer Controller tahu bahwa subnet dapat digunakan untuk penyeimbang beban internal. Jika Anda menggunakan
eksctl
atau AWS AWS CloudFormation template Amazon EKS untuk membuat VPC Anda setelah 26 Maret 2020, maka subnet diberi tag dengan tepat saat dibuat. Untuk informasi selengkapnya tentang Amazon EKS AWS AWS CloudFormation template-template VPC, lihat Membuat VPC untuk klaster Amazon EKS Anda.-
Kunci –
kubernetes.io/role/internal-elb
-
Nilai –
1
-
-
Subnet publik — Harus ditandai dalam format berikut. Ini agar Kubernetes tahu untuk hanya menggunakan subnet tersebut untuk penyeimbang beban eksternal alih-alih memilih subnet publik di setiap Availability Zone (berdasarkan urutan leksikografis ID subnet). Jika Anda menggunakan
eksctl
atau AWS CloudFormation template Amazon EKS untuk membuat VPC Anda setelah 26 Maret 2020, maka subnet diberi tag dengan tepat saat dibuat. Untuk informasi selengkapnya tentang template AWS CloudFormation VPC Amazon EKS, lihat. Membuat VPC untuk klaster Amazon EKS Anda-
Kunci –
kubernetes.io/role/elb
-
Nilai –
1
-
Jika tag peran subnet tidak ditambahkan secara eksplisit, pengontrol Kubernetes layanan memeriksa tabel rute subnet VPC klaster Anda untuk menentukan apakah subnet bersifat pribadi atau publik. Kami menyarankan agar Anda tidak mengandalkan perilaku ini, dan sebagai gantinya secara eksplisit menambahkan tag peran pribadi atau publik. AWS Load Balancer ControllerTidak memeriksa tabel rute, dan membutuhkan tag pribadi dan publik untuk hadir untuk penemuan otomatis yang sukses.
-
Pertimbangan
-
Konfigurasi penyeimbang beban Anda dikendalikan oleh anotasi yang ditambahkan ke manifes untuk layanan Anda. Anotasi layanan berbeda saat menggunakan AWS Load Balancer Controller daripada saat menggunakan pengontrol penyeimbang beban penyedia AWS cloud. Pastikan untuk meninjau anotasi
untuk AWS Load Balancer Controller sebelum menerapkan layanan. -
Saat menggunakan Amazon VPC CNI plugin for Kubernetes, saldo AWS Load Balancer Controller dapat memuat ke IP Amazon EC2 atau target instans dan target IP Fargate. Saat menggunakan plugin CNI yang kompatibel dengan Alternatif, pengontrol hanya dapat memuat keseimbangan ke target instance. Untuk informasi selengkapnya tentang jenis target Network Load Balancer, lihat Jenis target di Panduan Pengguna untuk Network Load Balancers
-
Jika Anda ingin menambahkan tag ke penyeimbang beban saat atau setelah dibuat, tambahkan anotasi berikut dalam spesifikasi layanan Anda. Untuk informasi selengkapnya, lihat Tag AWS Sumber Daya
dalam AWS Load Balancer Controller dokumentasi. service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags
-
Anda dapat menetapkan Alamat IP Elastis ke Network Load Balancer dengan menambahkan anotasi berikut. Ganti
dengan alamat IP Elastis Anda.example values
Allocation IDs
JumlahAllocation IDs
harus sesuai dengan jumlah subnet yang digunakan untuk penyeimbang beban. Untuk informasi lebih lanjut, lihat AWS Load Balancer Controllerdokumentasi. service.beta.kubernetes.io/aws-load-balancer-eip-allocations: eipalloc-
xxxxxxxxxxxxxxxxx
,eipalloc-yyyyyyyyyyyyyyyyy
-
Amazon EKS menambahkan satu aturan masuk ke grup keamanan node untuk lalu lintas klien dan satu aturan untuk setiap subnet penyeimbang beban di VPC untuk pemeriksaan kesehatan untuk setiap Network Load Balancer yang Anda buat. Deployment layanan jenis
LoadBalancer
bisa gagal jika Amazon EKS mencoba untuk membuat aturan yang melebihi kuota untuk jumlah maksimum aturan yang diperbolehkan untuk grup keamanan. Untuk informasi selengkapnya, lihat Grup keamanan untuk Amazon VPC Anda di Panduan Pengguna Amazon VPC. Pertimbangkan opsi berikut untuk meminimalkan kemungkinan melebihi jumlah aturan maksimum untuk grup keamanan:-
Meminta peningkatan aturan Anda per kuota grup keamanan. Untuk informasi selengkapnya, lihat Permintaan peningkatan kuota dalam Panduan Pengguna Service Quotas.
-
Gunakan target IP, bukan target instance. Dengan target IP, Anda dapat berbagi aturan untuk port target yang sama. Anda dapat menentukan subnet penyeimbang beban secara manual dengan anotasi. Untuk informasi selengkapnya, lihat Anotasi
diGitHub. -
Gunakan ingress, bukan layanan tipe
LoadBalancer
, untuk mengirim lalu lintas ke layanan Anda. AWS Application Load Balancer membutuhkan aturan yang lebih sedikit daripada Network Load Balancer. Anda dapat berbagi ALB di beberapa ingress. Untuk informasi selengkapnya, lihat Penyeimbangan beban aplikasi pada Amazon EKS. Anda tidak dapat membagikan Network Load Balancer di beberapa layanan. -
Deploy klaster Anda ke beberapa akun.
-
-
Jika Anda Pods berjalan Windows di kluster Amazon EKS, satu layanan dengan penyeimbang beban dapat mendukung hingga 1024 back-end. Pods Masing-masing Pod memiliki alamat IP uniknya sendiri.
-
Kami merekomendasikan hanya membuat Network Load Balancers baru dengan. AWS Load Balancer Controller Mencoba mengganti Network Load Balancer yang ada yang dibuat dengan pengontrol penyeimbang beban penyedia AWS cloud dapat menghasilkan beberapa Network Load Balancer yang dapat menyebabkan downtime aplikasi.
Buat penyeimbang beban jaringan
Anda dapat membuat penyeimbang beban jaringan dengan IP atau target instans.
(Opsional) Deploy aplikasi sampel
Prasyarat
-
Setidaknya satu subnet publik atau pribadi di VPC cluster Anda.
-
Miliki yang AWS Load Balancer Controller diterapkan di cluster Anda. Untuk informasi selengkapnya, lihat Apa itu AWS Load Balancer Controller?. Kami merekomendasikan versi
2.7.2
atau yang lebih baru.
Untuk menggunakan aplikasi sampel
-
Jika Anda menerapkan ke Fargate, pastikan Anda memiliki subnet pribadi yang tersedia di VPC Anda dan buat profil Fargate. Jika Anda tidak menerapkan ke Fargate, lewati langkah ini. Anda dapat membuat profil dengan menjalankan perintah berikut atau AWS Management Consolemenggunakan nilai yang sama untuk
name
dannamespace
yang ada di perintah. Ganti
dengan milik Anda sendiri.example values
eksctl create fargateprofile \ --cluster
\my-cluster
\ --regionregion-code
\ --namenlb-sample-app
--namespace nlb-sample-app
-
Deploy aplikasi sampel.
-
Buat namespace untuk aplikasi.
kubectl create namespace
nlb-sample-app
-
Simpan konten berikut ini ke file bernama
pada komputer Anda.sample-deployment
.yamlapiVersion: apps/v1 kind: Deployment metadata: name:
nlb-sample-app
namespace:nlb-sample-app
spec: replicas:3
selector: matchLabels: app:nginx
template: metadata: labels: app:nginx
spec: containers: - name:nginx
image:public.ecr.aws/nginx/nginx:1.23
ports: - name:tcp
containerPort:80
-
Menerapkan manifes ke klaster.
kubectl apply -f
sample-deployment
.yaml
-
-
Buat layanan dengan Network Load Balancer yang menghadap ke internet yang memuat saldo ke target IP.
-
Simpan konten berikut ini ke file bernama
pada komputer Anda. Jika Anda menerapkan ke node Fargate, hapussample-service
.yamlservice.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
baris.apiVersion: v1 kind: Service metadata: name:
nlb-sample-service
namespace:nlb-sample-app
annotations: service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing spec: ports: - port:80
targetPort:80
protocol:TCP
type: LoadBalancer selector: app:nginx
-
Menerapkan manifes ke klaster.
kubectl apply -f
sample-service
.yaml
-
-
Verifikasi bahwa layanan telah di-deploy.
kubectl get svc
nlb-sample-service
-nnlb-sample-app
Contoh output adalah sebagai berikut.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sample-service
LoadBalancer10.100.240.137
k8s-nlbsampl
-nlbsampl
-xxxxxxxxxx
-xxxxxxxxxxxxxxxx
.elb.region-code
.amazonaws.com80
:32400
/TCP
16hcatatan
Wilayah AWS
-
Buka Amazon EC2 AWS Management Console
. Pilih Grup Target (di bawah Load Balancing) di panel navigasi kiri. Di kolom Nama, pilih nama grup target di mana nilai di kolom Load balancer cocok dengan sebagian nama di EXTERNAL-IP
kolom output pada langkah sebelumnya. Misalnya, Anda akan memilih grup target bernamak8s-default-samplese-
jika output Anda sama dengan output sebelumnya. Jenis Target adalahxxxxxxxxxx
IP
karena itu ditentukan dalam manifes layanan sampel. -
Pilih Grup target Anda, kemudian pilih tab Target. Di bawah Target terdaftar, Anda akan melihat tiga alamat IP replika tiga yang di-deploy di langkah sebelumnya. Tunggu sampai status semua target baik sebelum melanjutkan. Mungkin perlu beberapa menit sebelum semua target berada
healthy
. Target mungkin dalamunhealthy
keadaan sebelum berubah menjadihealthy
negara. -
Kirim lalu lintas ke layanan yang diganti
danxxxxxxxxxx-xxxxxxxxxxxxxxxx
dengan nilai yang dikembalikan dalam output untuk langkah sebelumnya untukus-west-2
EXTERNAL-IP
. Jika Anda menerapkan ke subnet pribadi, maka Anda harus melihat halaman dari perangkat dalam VPC Anda, seperti host bastion. Untuk informasi selengkapnya, lihat Host Linux Bastion di AWS. curl k8s-default-samplese-
xxxxxxxxxx-xxxxxxxxxxxxxxxx
.elb.region-code
.amazonaws.comContoh output adalah sebagai berikut.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
Setelah selesai menggunakan contoh deployment, service, dan namespace, hapus saja.
kubectl delete namespace
nlb-sample-app