Menyeimbangkan beban jaringan di Amazon EKS - Amazon EKS

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 di AWS situs web.

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 di Kubernetes dokumentasi. Penggunaannya tidak tercakup dalam topik ini.

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 di. GitHub

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 versi 2.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 my-cluster dengan nama klaster Anda.

    • Kuncikubernetes.io/cluster/my-cluster

    • Nilaishared atau owned

  • 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.

      • Kuncikubernetes.io/role/internal-elb

      • Nilai1

    • 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

      • Kuncikubernetes.io/role/elb

      • Nilai1

    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 example valuesdengan alamat IP Elastis Anda. Allocation IDs Jumlah Allocation 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 tipeLoadBalancer, 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.

IP targets

Anda dapat menggunakan target IP dengan Pods dikerahkan ke node Amazon EC2 atau Fargate. KubernetesLayanan Anda harus dibuat sebagai tipeLoadBalancer. Untuk informasi selengkapnya, lihat LoadBalancerMengetik Kubernetes dokumentasi.

Untuk membuat penyeimbang beban yang menggunakan target IP, tambahkan anotasi berikut ke manifes layanan dan terapkan layanan Anda. externalNilai untuk aws-load-balancer-type inilah yang menyebabkanAWS Load Balancer Controller, bukan pengontrol penyeimbang beban penyedia AWS cloud, untuk membuat Network Load Balancer. Anda dapat melihat sampel layanan manifes dengan anotasi.

service.beta.kubernetes.io/aws-load-balancer-type: "external" service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
catatan

Jika Anda memuat balancing IPv6Pods, tambahkan anotasi berikut. Anda hanya dapat memuat keseimbangan IPv6 ke target IP, bukan target instance. Tanpa anotasi ini, load balancing selesai. IPv4

service.beta.kubernetes.io/aws-load-balancer-ip-address-type: dualstack

Network Load Balancers dibuat dengan internalaws-load-balancer-scheme, secara default. Anda dapat meluncurkan Network Load Balancers di subnet apa pun di VPC klaster Anda, termasuk subnet yang tidak ditentukan saat membuat klaster.

Kubernetesmemeriksa tabel rute untuk subnet Anda untuk mengidentifikasi apakah mereka publik atau pribadi. Sub-jaringan publik memiliki rute langsung ke internet menggunakan gateway internet, tetapi subnet privat tidak.

Jika Anda ingin membuat Network Load Balancer di subnet publik untuk memuat saldo ke node Amazon EC2 (Fargate hanya dapat bersifat pribadi), tentukan dengan anotasi berikut: internet-facing

service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
catatan

service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip"Anotasi masih didukung untuk kompatibilitas mundur. Namun, sebaiknya gunakan anotasi sebelumnya untuk penyeimbang beban baru, bukan. service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip"

penting

Jangan mengedit anotasi setelah membuat layanan Anda. Jika Anda perlu memodifikasinya, hapus objek layanan dan buat lagi dengan nilai yang diinginkan untuk anotasi ini.

Instance targets

Pengontrol penyeimbang beban penyedia AWS cloud membuat Network Load Balancer hanya dengan target instans. Versi 2.2.0 dan yang lebih baru dari AWS Load Balancer Controller juga membuat Network Load Balancers dengan target instans. Kami merekomendasikan untuk menggunakannya, daripada pengontrol penyeimbang beban penyedia AWS cloud, untuk membuat Network Load Balancer baru. Anda dapat menggunakan target instans Network Load Balancer dengan Pods di-deploy ke node Amazon EC2, tetapi tidak ke Fargate. Untuk memuat lalu lintas jaringan keseimbangan di seluruh Pods dikerahkan ke Fargate, Anda harus menggunakan target IP.

Untuk menerapkan Network Load Balancer ke subnet pribadi, spesifikasi layanan Anda harus memiliki anotasi berikut. Anda dapat melihat sampel layanan manifes dengan anotasi. externalNilai untuk aws-load-balancer-type itulah yang menyebabkan AWS Load Balancer Controller, bukan pengontrol penyeimbang beban penyedia AWS cloud, untuk membuat Network Load Balancer.

service.beta.kubernetes.io/aws-load-balancer-type: "external" service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"

Network Load Balancers dibuat dengan internalaws-load-balancer-scheme, secara default. Untuk Network Load Balancer internal, klaster Amazon EKS Anda harus dikonfigurasi untuk menggunakan setidaknya satu subnet pribadi di VPC Anda. Kubernetesmemeriksa tabel rute untuk subnet Anda untuk mengidentifikasi apakah mereka publik atau pribadi. Sub-jaringan publik memiliki rute langsung ke internet menggunakan gateway internet, tetapi subnet privat tidak.

Jika Anda ingin membuat Network Load Balancer di subnet publik untuk memuat saldo ke node Amazon EC2, tentukan internet-facing dengan anotasi berikut:

service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
penting

Jangan mengedit anotasi setelah membuat layanan Anda. Jika Anda perlu memodifikasinya, hapus objek layanan dan buat lagi dengan nilai yang diinginkan untuk anotasi ini.

(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
  1. 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 dan namespace yang ada di perintah. Ganti example values dengan milik Anda sendiri.

    eksctl create fargateprofile \ --cluster my-cluster \ --region region-code \ --name nlb-sample-app \ --namespace nlb-sample-app
  2. Deploy aplikasi sampel.

    1. Buat namespace untuk aplikasi.

      kubectl create namespace nlb-sample-app
    2. Simpan konten berikut ini ke file bernama sample-deployment.yaml pada komputer Anda.

      apiVersion: 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
    3. Menerapkan manifes ke klaster.

      kubectl apply -f sample-deployment.yaml
  3. Buat layanan dengan Network Load Balancer yang menghadap ke internet yang memuat saldo ke target IP.

    1. Simpan konten berikut ini ke file bernama sample-service.yaml pada komputer Anda. Jika Anda menerapkan ke node Fargate, hapus service.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
    2. Menerapkan manifes ke klaster.

      kubectl apply -f sample-service.yaml
  4. Verifikasi bahwa layanan telah di-deploy.

    kubectl get svc nlb-sample-service -n nlb-sample-app

    Contoh output adalah sebagai berikut.

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample-service LoadBalancer 10.100.240.137 k8s-nlbsampl-nlbsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.region-code.amazonaws.com 80:32400/TCP 16h
    catatan

    Wilayah AWS

  5. 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 bernama k8s-default-samplese-xxxxxxxxxx jika output Anda sama dengan output sebelumnya. Jenis Target adalah IP karena itu ditentukan dalam manifes layanan sampel.

  6. 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 beradahealthy. Target mungkin dalam unhealthy keadaan sebelum berubah menjadi healthy negara.

  7. Kirim lalu lintas ke layanan yang diganti xxxxxxxxxx-xxxxxxxxxxxxxxxx dan us-west-2 dengan nilai yang dikembalikan dalam output untuk langkah sebelumnya untukEXTERNAL-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.com

    Contoh output adalah sebagai berikut.

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    [...]
  8. Setelah selesai menggunakan contoh deployment, service, dan namespace, hapus saja.

    kubectl delete namespace nlb-sample-app