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. LoadBalancer
AWS
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 \ --version
AWS_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-controller
NAME 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-service
NAME 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
Contoh 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.yaml
denganCiliumLoadBalancerIPPool
sumber daya untuk mengonfigurasi rentang alamat IP Load Balancer untuk jenis Layanan Anda. LoadBalancer-
Ganti
LB_IP_CIDR
dengan rentang alamat IP yang akan digunakan untuk alamat IP Load Balancer. Untuk memilih satu alamat IP, gunakan/32
CIDR. Untuk informasi selengkapnya, lihat Manajemen Alamat LoadBalancer IPdi dokumentasi Cilium. -
serviceSelector
Bidang 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
CiliumLoadBalancerIPPool
sumber 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.io
NAME DISABLED CONFLICTING IPS AVAILABLE AGE tcp-service-pool false False 1 24m
-
Buat file bernama
cilium-bgp-advertisement-loadbalancer.yaml
denganCiliumBGPAdvertisement
sumber 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.-
advertisementType
Bidang disetel keService
danservice.addresses
disetelLoadBalancerIP
untuk hanya mengiklankan jenisLoadBalancer
Layanan.LoadBalancerIP
-
selector
Bidang dikonfigurasi agar sesuai dengan nama Layanan yang akan Anda buat pada langkah berikutnya. Dengan konfigurasi ini, hanyaLoadBalancerIP
untuk Layanan dengan nama yangtcp-sample-service
akan 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
CiliumBGPAdvertisement
sumber 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/ips
anotasi pada objek Service. Anda dapat menghapus anotasi ini jika Anda tidak ingin meminta alamat IP tertentu untuk Layanan. -
Kolom
loadBalancerClass
spesifikasi diperlukan untuk mencegah Penyedia AWS Cloud lama membuat Classic Load Balancer untuk Layanan. Dalam contoh di bawah ini dikonfigurasiio.cilium/bgp-control-plane
untuk menggunakan BGP Control Plane Cilium sebagai kelas penyeimbang beban. Bidang ini dapat dikonfigurasiio.cilium/l2-announcer
untuk 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
CiliumLoadBalancerIPPool
dibuat pada langkah sebelumnya.kubectl get svc tcp-sample-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tcp-sample-service LoadBalancer 172.16.117.76
LB_IP_ADDRESS
80: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.x
alamatnya adalah alamat IP pod dari pod backend untuk Service.kubectl -n kube-system exec ds/cilium -- cilium-dbg service list
ID Frontend Service Type Backend ... 41
LB_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_ADDRESS
mengiklankantcp-sample-service
Layanan ke jaringan lokal.Node VRouter Prefix NextHop Age Attrs mi-026d6a261e355fba7
NODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-082f73826a163626eNODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-09183e8a3d755abf6NODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-0d78d815980ed202dNODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-0daa253999fe92daaNODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] -
Akses Layanan menggunakan alamat load balanceRip yang ditetapkan.
curl
LB_IP_ADDRESS
Contoh 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