View a markdown version of this page

Memulai dengan EKS Hybrid Nodes gateway - Amazon EKS

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.

Memulai dengan EKS Hybrid Nodes gateway

Halaman ini memandu Anda melalui prasyarat, persiapan lingkungan, instalasi, verifikasi, dan penghapusan gateway Amazon EKS Hybrid Nodes. Untuk pengenalan gateway dan arsitekturnya, lihatGerbang Node Hibrida Amazon EKS.

Prasyarat

Sebelum Anda menginstal gateway Hybrid Nodes, konfirmasikan bahwa lingkungan Anda memenuhi persyaratan berikut:

  • Kluster EKS dengan dukungan Cilium CNI dan VTEP — Cluster EKS Anda harus menggunakan versi EKS Cilium sebagai CNI pada node hibrida, dan Cilium VTEP harus diaktifkan. Untuk informasi selengkapnya, lihat Konfigurasikan CNI untuk gateway Hybrid Nodes.

  • AWS VPC CNI pada node cloud — Node gateway dan node cloud lainnya di cluster harus menggunakan AWS VPC CNI. Gateway bergantung pada VPC-native perutean untuk meneruskan lalu lintas antara VPC dan terowongan VXLAN.

  • Konektivitas hibrid — Koneksi pribadi antara VPC Anda dan lingkungan lokal diperlukan. Anda dapat menggunakan AWS Direct Connect, AWS Site-to-Site VPN, atau solusi VPN Anda sendiri. Untuk informasi selengkapnya, lihat Mempersiapkan jaringan untuk node hybrid.

  • Lalu lintas VXLAN diizinkan - Grup keamanan yang terpasang pada instans EC2 gateway harus mengizinkan lalu lintas UDP masuk dan keluar pada port 8472. Di sisi node hybrid, aturan firewall lokal juga harus mengizinkan lalu lintas port UDP 8472 ke dan dari alamat IP node gateway.

  • Izin IAM untuk manajemen tabel rute - Gateway memerlukan tindakan EC2 berikut untuk mengelola tabel rute VPC:

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      Anda dapat memberikan izin ini menggunakan salah satu pendekatan berikut:

      EKS Pod Identity (recommended)

      Gunakan EKS Pod Identity untuk memberikan izin hanya ke akun layanan pod gateway.

      1. Instal add-on EKS Pod Identity Agent di cluster Anda jika belum diinstal:

        aws eks create-addon \ --cluster-name CLUSTER_NAME \ --addon-name eks-pod-identity-agent
      2. Buat peran IAM dengan izin EC2 yang diperlukan dan kebijakan kepercayaan untuk EKS Pod Identity:

        cat > gateway-trust-policy.json << 'EOF' { "Version": "2012-10-17" , "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": ["sts:AssumeRole", "sts:TagSession"] } ] } EOF aws iam create-role \ --role-name EKSHybridNodesGatewayRole \ --assume-role-policy-document file://gateway-trust-policy.json aws iam put-role-policy \ --role-name EKSHybridNodesGatewayRole \ --policy-name HybridNodesGatewayRouteTable \ --policy-document '{ "Version": "2012-10-17" , "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeRouteTables", "ec2:CreateRoute", "ec2:ReplaceRoute", "ec2:DescribeInstances" ], "Resource": "*" }] }'
      3. Buat asosiasi identitas pod yang menautkan peran IAM ke akun layanan gateway:

        aws eks create-pod-identity-association \ --cluster-name CLUSTER_NAME \ --namespace eks-hybrid-nodes-gateway \ --service-account eks-hybrid-nodes-gateway \ --role-arn arn:aws:iam::ACCOUNT_ID:role/EKSHybridNodesGatewayRole
      Node IAM role

      Lampirkan kebijakan sebaris atau terkelola dengan izin yang diperlukan ke peran IAM yang terkait dengan profil instance node gateway:

      aws iam put-role-policy \ --role-name NODE_ROLE_NAME \ --policy-name HybridNodesGatewayRouteTable \ --policy-document '{ "Version": "2012-10-17" , "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeRouteTables", "ec2:CreateRoute", "ec2:ReplaceRoute", "ec2:DescribeInstances" ], "Resource": "*" }] }'

      Semua pod pada node gateway akan memiliki izin ini.

  • Mode Otomatis EKS (jika menggunakan Mode Otomatis untuk node gateway) - Jika Anda berencana menggunakan Mode Otomatis EKS untuk menyediakan node gateway, Mode Otomatis harus diaktifkan di kluster EKS Anda. Untuk informasi selengkapnya, lihat Mengaktifkan Mode Otomatis EKS.

Siapkan node gateway

Gateway membutuhkan setidaknya dua node EC2 untuk ketersediaan tinggi. Ada dua opsi konfigurasi node yang didukung untuk gateway:

  • Mode Otomatis EKS (disarankan)— Node disediakan secara otomatis menggunakan dan. NodePool NodeClass Source/destination cek, label, dan taints semuanya dikonfigurasi secara deklaratif.

  • Grup simpul terkelola— Anda menyediakan node menggunakan grup node terkelola atau node yang dikelola sendiri. Label dapat dikonfigurasi melalui API grup node terkelola, dan source/destination pemeriksaan dapat dinonaktifkan menggunakan templat peluncuran khusus dengan data pengguna.

Mode Otomatis EKS (disarankan)

Saat menggunakan Mode Otomatis EKS, Anda harus membuat NodePool dan NodeClass sebelum menginstal bagan Helm. NodePool Ketentuan instans EC2 dengan label, taints, dan source/destination konfigurasi cek yang benar. Anda tidak perlu menyediakan atau mengkonfigurasi node secara manual.

Terapkan sumber daya berikut ke cluster Anda, menggantikan nilai placeholder:

  • YOUR_NODE_ROLE— Nama Peran IAM Node yang digunakan oleh EKS Auto Mode untuk menyediakan node. Ini adalah peran yang Anda konfigurasikan (atau yang dibuat EKS) saat Anda mengaktifkan Mode Otomatis di cluster. Untuk informasi selengkapnya, lihat Membuat Peran IAM Node untuk Mode Otomatis EKS.

  • YOUR_CLUSTER_NAME— Nama cluster EKS Anda.

  • SUBNET_ID_1, SUBNET_ID_2 — ID Subnet di Availability Zone yang berbeda di mana node gateway akan disediakan.

apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: hybrid-gateway spec: advancedNetworking: sourceDestCheck: DisabledPrimaryENI role: YOUR_NODE_ROLE securityGroupSelectorTerms: - tags: aws:eks:cluster-name: YOUR_CLUSTER_NAME subnetSelectorTerms: - id: SUBNET_ID_1 - id: SUBNET_ID_2 --- apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: hybrid-gateway spec: template: metadata: labels: hybrid-gateway-node: "true" spec: expireAfter: 336h nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: hybrid-gateway requirements: - key: karpenter.sh/capacity-type operator: In values: - on-demand - key: eks.amazonaws.com/instance-category operator: In values: - c - m - r - key: eks.amazonaws.com/instance-generation operator: Gt values: - "4" - key: kubernetes.io/arch operator: In values: - amd64 - key: kubernetes.io/os operator: In values: - linux taints: - key: hybrid-gateway-node effect: NoSchedule terminationGracePeriod: 24h0m0s disruption: budgets: - nodes: 10% consolidateAfter: 30s consolidationPolicy: WhenEmptyOrUnderutilized

Bidang kunci dalam konfigurasi ini:

  • advancedNetworking.sourceDestCheck: DisabledPrimaryENI— Menonaktifkan source/destination pemeriksaan EC2 pada ENI primer node sehingga gateway dapat meneruskan lalu lintas yang tidak ditujukan kepada dirinya sendiri.

  • taintshybrid-gateway-node: NoSchedule Taint memastikan hanya pod gateway dengan jadwal toleransi yang cocok pada node ini.

  • labelshybrid-gateway-node: "true" Label digunakan oleh pemilih node bagan Helm untuk menargetkan pod gateway ke node ini.

  • nodeClassRef— Tautkan NodePool ke NodeClass dengan konfigurasi source/destination cek.

Grup simpul terkelola

Saat menggunakan grup node terkelola, buat grup node khusus untuk gateway dengan label yang diperlukan, taints, dan templat peluncuran khusus yang menonaktifkan source/destination pemeriksaan saat peluncuran.

Langkah 1: Buat templat peluncuran

Buat template peluncuran dengan data pengguna yang menonaktifkan source/destination pemeriksaan pada ENI utama saat instance melakukan booting:

# Create the launch template with user data to disable source/dest check USERDATA=$(cat <<'SCRIPT' | base64 -w 0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 60") MAC=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/mac) ENI_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC}/interface-id") REGION=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/placement/region) aws ec2 modify-network-interface-attribute \ --network-interface-id "$ENI_ID" \ --no-source-dest-check \ --region "$REGION" --==BOUNDARY==-- SCRIPT ) aws ec2 create-launch-template \ --launch-template-name YOUR_CLUSTER_NAME-gateway-lt \ --launch-template-data "{\"UserData\":\"${USERDATA}\",\"MetadataOptions\":{\"HttpTokens\":\"required\",\"HttpPutResponseHopLimit\":2}}"
catatan

Peran IAM node harus memiliki ec2:ModifyNetworkInterfaceAttribute izin agar skrip data pengguna berhasil. Format multipart MIME memastikan data pengguna berjalan di samping skrip bootstrap EKS.

Langkah 2: Buat grup node terkelola

Buat grup node terkelola khusus dengan label gateway, taint, dan template peluncuran dari Langkah 1:

aws eks create-nodegroup \ --cluster-name YOUR_CLUSTER_NAME \ --nodegroup-name YOUR_CLUSTER_NAME-gateway-nodes \ --subnets SUBNET_ID_1 SUBNET_ID_2 \ --node-role YOUR_NODE_ROLE_ARN \ --instance-types INSTANCE_TYPE \ --ami-type AL2023_x86_64_STANDARD \ --scaling-config desiredSize=2,maxSize=2,minSize=2 \ --labels hybrid-gateway-node=true \ --taints "key=hybrid-gateway-node,effect=NO_SCHEDULE" \ --launch-template "name=YOUR_CLUSTER_NAME-gateway-lt,version=1"

Ini menciptakan grup node terkelola 2-node di mana:

  • --labelsset hybrid-gateway-node=true sehingga pemilih simpul bagan Helm menargetkan node ini.

  • --taintsmenambahkan NoSchedule taint sehingga hanya pod gateway dengan jadwal toleransi yang cocok pada node ini.

  • --launch-templatemelampirkan template peluncuran yang menonaktifkan source/destination cek saat boot.

Gunakan subnet di Availability Zone yang berbeda untuk ketersediaan tinggi.

Instal dengan Helm

Mode Otomatis EKS

Jalankan perintah berikut untuk menginstal gateway dengan Mode Otomatis EKS:

helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set vpcCIDR=VPC_CIDR \ --set podCIDRs=POD_CIDRS \ --set routeTableIDs=ROUTE_TABLE_IDS

Grup node terkelola atau node yang dikelola sendiri

Untuk grup node terkelola atau node yang dikelola sendiri, setelautoMode.enabled=false:

helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set autoMode.enabled=false \ --set vpcCIDR=VPC_CIDR \ --set podCIDRs=POD_CIDRS \ --set routeTableIDs=ROUTE_TABLE_IDS

Nilai Helm yang Diperlukan

Nilai-nilai berikut diperlukan untuk semua instalasi:

Nilai Deskripsi

vpcCIDR

Blok CIDR dari VPC cluster EKS Anda (misalnya10.0.0.0/16,). Digunakan untuk konfigurasi Cilium VTEP sehingga node hybrid merutekan VPC-bound lalu lintas melalui gateway.

podCIDRs

Comma-separated daftar CIDR pod yang digunakan oleh Cilium pada node hibrida (misalnya,). 10.100.0.0/16,10.101.0.0/16 Gateway membuat entri tabel rute VPC dan rute VXLAN untuk CIDR ini.

routeTableIDs

Comma-separated daftar ID tabel rute VPC ke program (misalnya,rtb-0abc1234def567890,rtb-0fed9876cba543210). Gateway membuat rute dalam tabel ini yang menunjuk CIDR pod hybrid ke instance gateway aktif.

Untuk daftar lengkap nilai yang dapat dikonfigurasi, lihatReferensi konfigurasi gateway Amazon EKS Hybrid Nodes.

Verifikasi instalasi.

Setelah menginstal gateway, verifikasi bahwa itu berjalan dan sehat.

Periksa status pod

Konfirmasikan bahwa dua pod gateway sedang berjalan:

kubectl get pods -n eks-hybrid-nodes-gateway

Anda akan melihat output yang mirip dengan:

NAME READY STATUS RESTARTS AGE eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 1/1 Running 0 2m eks-hybrid-nodes-gateway-5d4f6a7b8c-def34 1/1 Running 0 2m

Periksa pemilihan pemimpin

Verifikasi bahwa satu pod telah memperoleh sewa pemilihan pemimpin:

kubectl get lease -n eks-hybrid-nodes-gateway

Output menunjukkan pemimpin saat ini di HOLDER kolom:

NAME HOLDER AGE hybrid-gateway-leader eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 2m

Periksa titik akhir kesehatan

Verifikasi titik akhir kesehatan merespons pada pod pemimpin menggunakan port-forwarding:

kubectl port-forward -n eks-hybrid-nodes-gateway LEADER_POD_NAME 8088:8088 & curl -s http://localhost:8088/healthz

Gateway yang sehat mengembalikan respons HTTP 200.

Verifikasi entri tabel rute VPC

Di konsol VPC Amazon atau menggunakan CLI, AWS konfirmasikan bahwa tabel rute VPC Anda berisi entri untuk CIDR pod hybrid yang menunjuk ke ENI instance gateway pemimpin:

aws ec2 describe-route-tables \ --route-table-ids ROUTE_TABLE_ID \ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"

Setiap pod hybrid CIDR harus memiliki rute dengan NetworkInterfaceId set ke ENI utama instance pemimpin.

Hapus instalasi

Untuk menghapus gateway Hybrid Nodes, jalankan:

helm uninstall eks-hybrid-nodes-gateway --namespace eks-hybrid-nodes-gateway
catatan

Menghapus instalasi bagan Helm tidak secara otomatis menghapus entri tabel rute VPC yang dibuat oleh gateway. Setelah menghapus instalasi, hapus rute CIDR pod hybrid Anda secara manual dari tabel rute VPC untuk menghindari perutean lalu lintas ke instance yang tidak lagi menjalankan gateway. Anda dapat menghapus rute menggunakan AWS CLI:

aws ec2 delete-route \ --route-table-id ROUTE_TABLE_ID \ --destination-cidr-block POD_CIDR

Langkah selanjutnya