Bantu tingkatkan halaman ini
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan Layanan tipe LoadBalancer untuk node hibrida
Topik ini menjelaskan cara mengonfigurasi load balancing Layer 4 (L4) untuk aplikasi yang berjalan di Amazon EKS Hybrid Nodes. Jenis layanan Kubernetes LoadBalancer digunakan untuk mengekspos aplikasi Kubernetes di luar klaster. Layanan jenis LoadBalancer biasanya digunakan dengan infrastruktur penyeimbang beban fisik di cloud atau lingkungan lokal untuk melayani lalu lintas beban kerja. Infrastruktur penyeimbang beban ini biasanya disediakan dengan pengontrol khusus lingkungan.
AWS mendukung AWS Network Load Balancer (NLB) dan Cilium untuk jenis LoadBalancer Layanan yang berjalan pada EKS Hybrid Nodes. Keputusan untuk menggunakan NLB atau Cilium didasarkan pada sumber lalu lintas aplikasi. Jika lalu lintas aplikasi berasal dari AWS Region, AWS rekomendasikan untuk menggunakan AWS NLB dan Load Balancer AWS Controller. Jika lalu lintas aplikasi berasal dari lingkungan lokal atau edge lokal, AWS rekomendasikan untuk menggunakan kemampuan load balancing bawaan Cilium, yang dapat digunakan dengan atau tanpa infrastruktur penyeimbang beban di lingkungan Anda.
Untuk penyeimbangan beban lalu lintas aplikasi Layer 7 (L7), lihat. Konfigurasikan Ingress Kubernetes untuk node hybrid Untuk informasi umum tentang Load Balancing dengan EKS, lihat Praktik Terbaik untuk Load Balancing.
AWS Network Load Balancer
Anda dapat menggunakan AWS Load Balancer Controller dan NLB dengan tipe target ip untuk beban kerja yang berjalan pada node hybrid. Saat menggunakan tipe targetip, NLB meneruskan lalu lintas langsung ke pod, melewati jalur jaringan Layer Service. Agar NLB dapat mencapai target IP pod pada node hibrid, pod lokal Anda CIDRs harus dapat dirutekan di jaringan lokal Anda. Selain itu, AWS Load Balancer Controller menggunakan webhook dan memerlukan komunikasi langsung dari bidang kontrol EKS. Untuk informasi selengkapnya, lihat Konfigurasikan webhook untuk node hybrid.
-
Lihat Rute lalu lintas TCP dan UDP dengan Network Load Balancers persyaratan konfigurasi subnet, Instal AWS Load Balancer Controller dengan Helm dan Praktik Terbaik untuk Load Balancing untuk informasi tambahan tentang AWS Network Load Balancer dan Load Balancer Controller AWS .
-
Lihat konfigurasi AWS Load Balancer Controller NLB untuk konfigurasi yang
dapat diterapkan ke Layanan bertipe dengan Network Load Balancer. LoadBalancerAWS
Prasyarat
-
Cilium dipasang mengikuti instruksi di. Konfigurasikan CNI untuk node hybrid
-
Cilium BGP Control Plane diaktifkan mengikuti instruksi di. Konfigurasikan Cilium BGP untuk node hybrid Jika Anda tidak ingin menggunakan BGP, Anda harus menggunakan metode alternatif untuk membuat pod lokal CIDRs dapat dirutekan di jaringan lokal, lihat untuk informasi selengkapnya. Pod jarak jauh yang dapat dirutekan CIDRs
-
Helm diinstal di lingkungan baris perintah Anda, lihat instruksi Setup Helm.
-
eksctl diinstal di lingkungan baris perintah Anda, lihat Menyiapkan instruksi eksctl.
Prosedur
-
Unduh kebijakan IAM untuk AWS Load Balancer Controller yang memungkinkannya melakukan panggilan atas nama AWS APIs Anda.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json -
Buat kebijakan IAM menggunakan kebijakan yang diunduh di langkah sebelumnya.
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json -
Ganti nilai untuk nama cluster (
CLUSTER_NAME), AWS Region (AWS_REGION), dan ID AWS akun (AWS_ACCOUNT_ID) dengan pengaturan Anda dan jalankan perintah berikut.eksctl create iamserviceaccount \ --cluster=CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --region AWS_REGION \ --approve -
Tambahkan repositori bagan Helm eks-charts. AWS mempertahankan repositori ini aktif. GitHub
helm repo add eks https://aws.github.io/eks-charts -
Perbarui repositori Helm lokal Anda untuk memastikan bahwa Anda memiliki bagan terbaru.
helm repo update eks -
Instal AWS Load Balancer Controller. Ganti nilai untuk nama cluster (
CLUSTER_NAME), AWS Region (AWS_REGION), VPC ID (VPC_ID), dan Load AWS Balancer Controller Helm chart versionAWS_LBC_HELM_VERSION() dengan pengaturan Anda. Anda dapat menemukan bagan Helm versi terbaru dengan menjalankanhelm search repo eks/aws-load-balancer-controller --versions. Jika Anda menjalankan cluster mode campuran dengan node hybrid dan node di AWS Cloud, Anda dapat menjalankan AWS Load Balancer Controller pada node cloud mengikuti instruksi di. AWS Pengontrol Load Balancerhelm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --versionAWS_LBC_HELM_VERSION\ --set clusterName=CLUSTER_NAME\ --set region=AWS_REGION\ --set vpcId=VPC_ID\ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller -
Verifikasi bahwa AWS Load Balancer Controller berhasil diinstal.
kubectl get -n kube-system deployment aws-load-balancer-controllerNAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s -
Tentukan contoh aplikasi dalam file bernama
tcp-sample-app.yaml. Contoh di bawah ini menggunakan penyebaran NGINX sederhana dengan port TCP.apiVersion: apps/v1 kind: Deployment metadata: name: tcp-sample-app namespace: default 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 -
Terapkan penerapan ke cluster Anda.
kubectl apply -f tcp-sample-app.yaml -
Tentukan jenis Layanan LoadBalancer untuk penyebaran dalam file bernama
tcp-sample-service.yaml.apiVersion: v1 kind: Service metadata: name: tcp-sample-service namespace: default 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 -
Terapkan konfigurasi Layanan ke klaster Anda.
kubectl apply -f tcp-sample-service.yaml -
Penyediaan NLB untuk Layanan dapat memakan waktu beberapa menit. Setelah NLB disediakan, Layanan akan memiliki alamat yang ditetapkan untuk itu yang sesuai dengan nama DNS dari penyebaran NLB.
kubectl get svc tcp-sample-serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tcp-sample-service LoadBalancer 172.16.115.212 k8s-default-tcpsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.<region>.amazonaws.com 80:30396/TCP 8s -
Akses Layanan menggunakan alamat NLB.
curl k8s-default-tcpsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.<region>.amazonaws.com.rproxy.govskope.caContoh output di bawah ini.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...] -
Bersihkan sumber daya yang Anda buat.
kubectl delete -f tcp-sample-service.yaml kubectl delete -f tcp-sample-app.yaml
Penyeimbangan beban dalam cluster silia
Cilium dapat digunakan sebagai penyeimbang beban in-cluster untuk beban kerja yang berjalan di EKS Hybrid Nodes, yang dapat berguna untuk lingkungan yang tidak memiliki infrastruktur penyeimbang beban. Kemampuan load balancing Cilium dibangun di atas kombinasi fitur Cilium termasuk penggantian kube-proxy, Load Balancer IP Address Management (IPAM), dan BGP Control Plane. Tanggung jawab fitur-fitur ini dirinci di bawah ini:
-
Cilium kube-proxy replacement: Menangani routing lalu lintas Service ke pod backend.
-
Cilium Load Balancer IPAM: Mengelola alamat IP yang dapat ditetapkan ke Layanan jenis.
LoadBalancer -
Cilium BGP Control Plane: Mengiklankan alamat IP yang dialokasikan oleh Load Balancer IPAM ke jaringan lokal.
Jika Anda tidak menggunakan pengganti kube-proxy Cilium, Anda masih dapat menggunakan Cilium Load Balancer IPAM dan BGP Control Plane untuk mengalokasikan dan menetapkan alamat IP untuk jenis Layanan. LoadBalancer Jika Anda tidak menggunakan pengganti kube-proxy Cilium, load balancing untuk Services ke pod backend ditangani oleh kube-proxy dan aturan iptables secara default di EKS.
Prasyarat
-
Cilium diinstal mengikuti instruksi Konfigurasikan CNI untuk node hybrid dengan atau tanpa penggantian kube-proxy diaktifkan. Penggantian kube-proxy Cilium memerlukan menjalankan sistem operasi dengan kernel Linux setidaknya terbaru seperti v4.19.57, v5.1.16, atau v5.2.0. Semua versi terbaru dari sistem operasi yang didukung untuk digunakan dengan node hybrid memenuhi kriteria ini, dengan pengecualian Red Hat Enterprise Linux (RHEL) 8.x.
-
Cilium BGP Control Plane diaktifkan mengikuti instruksi di. Konfigurasikan Cilium BGP untuk node hybrid Jika Anda tidak ingin menggunakan BGP, Anda harus menggunakan metode alternatif untuk membuat pod lokal CIDRs dapat dirutekan di jaringan lokal, lihat untuk informasi selengkapnya. Pod jarak jauh yang dapat dirutekan CIDRs
-
Helm diinstal di lingkungan baris perintah Anda, lihat instruksi Setup Helm.
Prosedur
-
Buat file bernama
cilium-lbip-pool-loadbalancer.yamldenganCiliumLoadBalancerIPPoolsumber daya untuk mengonfigurasi rentang alamat IP Load Balancer untuk jenis Layanan Anda. LoadBalancer-
Ganti
LB_IP_CIDRdengan rentang alamat IP yang akan digunakan untuk alamat IP Load Balancer. Untuk memilih satu alamat IP, gunakan/32CIDR. Untuk informasi selengkapnya, lihat Manajemen Alamat LoadBalancer IPdi dokumentasi Cilium. -
serviceSelectorBidang dikonfigurasi agar sesuai dengan nama Layanan yang akan Anda buat pada langkah berikutnya. Dengan konfigurasi ini, IPs dari pool ini hanya akan dialokasikan ke Layanan dengan namatcp-sample-service.apiVersion: cilium.io/v2alpha1 kind: CiliumLoadBalancerIPPool metadata: name: tcp-service-pool spec: blocks: - cidr: "LB_IP_CIDR" serviceSelector: matchLabels: io.kubernetes.service.name: tcp-sample-service
-
-
Terapkan
CiliumLoadBalancerIPPoolsumber daya ke cluster Anda.kubectl apply -f cilium-lbip-pool-loadbalancer.yaml -
Konfirmasikan setidaknya ada satu alamat IP yang tersedia di kolam renang.
kubectl get ciliumloadbalancerippools.cilium.ioNAME DISABLED CONFLICTING IPS AVAILABLE AGE tcp-service-pool false False 1 24m -
Buat file bernama
cilium-bgp-advertisement-loadbalancer.yamldenganCiliumBGPAdvertisementsumber daya untuk mengiklankan alamat IP penyeimbang beban untuk Layanan yang akan Anda buat di langkah berikutnya. Jika Anda tidak menggunakan Cilium BGP, Anda dapat melewati langkah ini. Alamat IP penyeimbang beban yang digunakan untuk Layanan Anda harus dapat dirutekan di jaringan lokal agar Anda dapat menanyakan layanan pada langkah terakhir.-
advertisementTypeBidang disetel keServicedanservice.addressesdisetelLoadBalancerIPuntuk hanya mengiklankan jenisLoadBalancerLayanan.LoadBalancerIP -
selectorBidang dikonfigurasi agar sesuai dengan nama Layanan yang akan Anda buat pada langkah berikutnya. Dengan konfigurasi ini, hanyaLoadBalancerIPuntuk Layanan dengan nama yangtcp-sample-serviceakan diiklankan.apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisement-tcp-service labels: advertise: bgp spec: advertisements: - advertisementType: "Service" service: addresses: - LoadBalancerIP selector: matchLabels: io.kubernetes.service.name: tcp-sample-service
-
-
Terapkan
CiliumBGPAdvertisementsumber daya ke cluster Anda. Jika Anda tidak menggunakan Cilium BGP, Anda dapat melewati langkah ini.kubectl apply -f cilium-bgp-advertisement-loadbalancer.yaml -
Tentukan contoh aplikasi dalam file bernama
tcp-sample-app.yaml. Contoh di bawah ini menggunakan penyebaran NGINX sederhana dengan port TCP.apiVersion: apps/v1 kind: Deployment metadata: name: tcp-sample-app namespace: default 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 -
Terapkan penerapan ke cluster Anda.
kubectl apply -f tcp-sample-app.yaml -
Tentukan jenis Layanan LoadBalancer untuk penyebaran dalam file bernama
tcp-sample-service.yaml.-
Anda dapat meminta alamat IP tertentu dari kumpulan IP penyeimbang beban dengan
lbipam.cilium.io/ipsanotasi pada objek Service. Anda dapat menghapus anotasi ini jika Anda tidak ingin meminta alamat IP tertentu untuk Layanan. -
Kolom
loadBalancerClassspesifikasi diperlukan untuk mencegah Penyedia AWS Cloud lama membuat Classic Load Balancer untuk Layanan. Dalam contoh di bawah ini dikonfigurasiio.cilium/bgp-control-planeuntuk menggunakan BGP Control Plane Cilium sebagai kelas penyeimbang beban. Bidang ini dapat dikonfigurasiio.cilium/l2-announceruntuk menggunakan fitur Pengumuman L2Cilium (saat ini dalam versi beta dan tidak didukung secara resmi oleh). AWS apiVersion: v1 kind: Service metadata: name: tcp-sample-service namespace: default annotations: lbipam.cilium.io/ips:"LB_IP_ADDRESS"spec: loadBalancerClass: io.cilium/bgp-control-plane ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app: nginx
-
-
Terapkan Layanan ke cluster Anda. Layanan akan dibuat dengan alamat IP eksternal yang dapat Anda gunakan untuk mengakses aplikasi.
kubectl apply -f tcp-sample-service.yaml -
Verifikasi bahwa Layanan berhasil dibuat dan memiliki IP yang ditetapkan untuk itu dari yang
CiliumLoadBalancerIPPooldibuat pada langkah sebelumnya.kubectl get svc tcp-sample-serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tcp-sample-service LoadBalancer 172.16.117.76LB_IP_ADDRESS80:31129/TCP 14m -
Jika Anda menggunakan Cilium dalam mode penggantian kube-proxy, Anda dapat mengonfirmasi Cilium menangani load balancing untuk Service dengan menjalankan perintah berikut. Pada output di bawah ini,
10.86.2.xalamatnya adalah alamat IP pod dari pod backend untuk Service.kubectl -n kube-system exec ds/cilium -- cilium-dbg service listID Frontend Service Type Backend ... 41LB_IP_ADDRESS:80/TCP LoadBalancer 1 => 10.86.2.76:80/TCP (active) 2 => 10.86.2.130:80/TCP (active) 3 => 10.86.2.141:80/TCP (active) -
Konfirmasikan Cilium mengiklankan alamat IP ke jaringan lokal melalui BGP. Dalam contoh di bawah ini, ada lima node hibrida, masing-masing
LB_IP_ADDRESSmengiklankantcp-sample-serviceLayanan ke jaringan lokal.Node VRouter Prefix NextHop Age Attrs mi-026d6a261e355fba7NODES_ASNLB_IP_ADDRESS/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-082f73826a163626eNODES_ASNLB_IP_ADDRESS/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-09183e8a3d755abf6NODES_ASNLB_IP_ADDRESS/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-0d78d815980ed202dNODES_ASNLB_IP_ADDRESS/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-0daa253999fe92daaNODES_ASNLB_IP_ADDRESS/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] -
Akses Layanan menggunakan alamat load balanceRip yang ditetapkan.
curlLB_IP_ADDRESSContoh output di bawah ini.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...] -
Bersihkan sumber daya yang Anda buat.
kubectl delete -f tcp-sample-service.yaml kubectl delete -f tcp-sample-app.yaml kubectl delete -f cilium-lb-ip-pool.yaml kubectl delete -f cilium-bgp-advertisement.yaml