Jaringan khusus untuk pod - 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.

Jaringan khusus untuk pod

Secara default, ketika Amazon VPC CNI plugin for Kubernetes membuat antarmuka jaringan elastis sekunder (antarmuka jaringan) untuk node Amazon EC2 Anda, itu membuatnya dalam subnet yang sama dengan antarmuka jaringan utama node. Ini juga mengaitkan kelompok keamanan yang sama ke antarmuka jaringan sekunder yang terkait dengan antarmuka jaringan utama. Untuk satu atau beberapa alasan berikut, Anda mungkin ingin plugin membuat antarmuka jaringan sekunder di subnet yang berbeda atau ingin mengaitkan grup keamanan yang berbeda ke antarmuka jaringan sekunder, atau keduanya:

  • Ada sejumlah IPv4 alamat terbatas yang tersedia di subnet tempat antarmuka jaringan utama berada. Ini mungkin membatasi jumlah Pods yang dapat Anda buat di subnet. Dengan menggunakan subnet yang berbeda untuk antarmuka jaringan sekunder, Anda dapat meningkatkan jumlah IPv4 alamat yang tersedia untuk. Pods

  • Untuk alasan keamanan, Anda Pods mungkin perlu menggunakan subnet atau grup keamanan yang berbeda dari antarmuka jaringan utama node.

  • Node dikonfigurasi dalam subnet publik, dan Anda ingin menempatkan subnet pribadi. Pods Tabel rute yang terkait dengan subnet publik mencakup rute ke gateway internet. Tabel rute yang terkait dengan subnet pribadi tidak menyertakan rute ke gateway internet.

Pertimbangan
  • Dengan mengaktifkan jaringan khusus, tidak ada alamat IP yang ditetapkan ke antarmuka jaringan utama yang ditetapkanPods. Hanya alamat IP dari antarmuka jaringan sekunder yang ditugaskan kePods.

  • Jika klaster Anda menggunakan IPv6 keluarga, Anda tidak dapat menggunakan jaringan khusus.

  • Jika Anda berencana untuk menggunakan jaringan khusus hanya untuk membantu mengurangi kelelahan IPv4 alamat, Anda dapat membuat klaster menggunakan keluarga sebagai gantinya. IPv6 Untuk informasi selengkapnya, lihat IPv6alamat untuk cluster,Pods, dan services.

  • Meskipun Pods dikerahkan ke subnet yang ditentukan untuk antarmuka jaringan sekunder dapat menggunakan subnet dan grup keamanan yang berbeda dari antarmuka jaringan utama node, subnet dan grup keamanan harus berada dalam VPC yang sama dengan node.

Prasyarat
  • Keakraban dengan bagaimana Amazon VPC CNI plugin for Kubernetes menciptakan antarmuka jaringan sekunder dan menetapkan alamat IP ke. Pods Untuk informasi lebih lanjut, lihat Alokasi ENI diGitHub.

  • Versi 2.12.3 atau yang lebih baru atau versi 1.27.160 atau yang lebih baru dari AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi pada perangkat Anda atau AWS CloudShell. Untuk memeriksa versi Anda saat ini, gunakanaws --version | cut -d / -f2 | cut -d ' ' -f1. Package manager seperti yumapt-get,, atau Homebrew untuk macOS sering beberapa versi di belakang versi terbaru AWS CLI. Untuk menginstal versi terbaru, lihat Menginstal, memperbarui, dan menghapus konfigurasi AWS CLI dan Cepat dengan aws configure di Panduan AWS Command Line Interface Pengguna. AWS CLI Versi yang diinstal AWS CloudShell mungkin juga beberapa versi di belakang versi terbaru. Untuk memperbaruinya, lihat Menginstal AWS CLI ke direktori home Anda di Panduan AWS CloudShell Pengguna.

  • Alat baris kubectl perintah diinstal pada perangkat Anda atau AWS CloudShell. Versi dapat sama dengan atau hingga satu versi minor lebih awal atau lebih lambat dari Kubernetes versi cluster Anda. Misalnya, jika versi cluster Anda1.29, Anda dapat menggunakan kubectl versi1.28,1.29, atau 1.30 dengan itu. Untuk menginstal atau memutakhirkan kubectl, lihat Mengatur kubectl dan eksctl.

  • Kami menyarankan Anda menyelesaikan langkah-langkah dalam topik ini di shell Bash. Jika Anda tidak menggunakan shell Bash, beberapa perintah skrip seperti karakter kelanjutan baris dan cara variabel diatur dan digunakan memerlukan penyesuaian untuk shell Anda. Selain itu, aturan mengutip dan melarikan diri untuk shell Anda mungkin berbeda. Untuk informasi selengkapnya, lihat Menggunakan tanda kutip dengan string AWS CLI di AWS Command Line Interface Panduan Pengguna.

Untuk tutorial ini, kami sarankan menggunakanexample values, kecuali jika dicatat untuk menggantikannya. Anda dapat mengganti apa pun example value saat menyelesaikan langkah-langkah untuk klaster produksi. Kami merekomendasikan untuk menyelesaikan semua langkah di terminal yang sama. Ini karena variabel diatur dan digunakan di seluruh langkah dan tidak akan ada di terminal yang berbeda.

Perintah dalam topik ini diformat menggunakan konvensi yang tercantum dalam Menggunakan contoh. AWS CLI Jika Anda menjalankan perintah dari baris perintah terhadap sumber daya yang berbeda Wilayah AWS dari default yang Wilayah AWS ditentukan dalam AWS CLI profil yang Anda gunakan, maka Anda perlu menambahkan --region region-code ke perintah.

Saat Anda ingin menerapkan jaringan khusus ke kluster produksi Anda, lewati keLangkah 2: Konfigurasikan VPC Anda.

Langkah 1: Buat tes VPC dan cluster

Untuk membuat klaster DB

Prosedur berikut membantu Anda membuat pengujian VPC dan cluster dan mengkonfigurasi jaringan khusus untuk cluster itu. Kami tidak menyarankan penggunaan klaster pengujian untuk beban kerja produksi karena beberapa fitur yang tidak terkait yang mungkin Anda gunakan pada klaster produksi tidak tercakup dalam topik ini. Untuk informasi selengkapnya, lihat Buat EKS klaster Amazon.

  1. Tentukan beberapa variabel untuk digunakan dalam langkah-langkah yang tersisa.

    export cluster_name=my-custom-networking-cluster account_id=$(aws sts get-caller-identity --query Account --output text)
  2. Buat sebuah VPC.

    1. Buat VPC menggunakan template Amazon EKS AWS CloudFormation .

      aws cloudformation create-stack --stack-name my-eks-custom-networking-vpc \ --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml \ --parameters ParameterKey=VpcBlock,ParameterValue=192.168.0.0/24 \ ParameterKey=PrivateSubnet01Block,ParameterValue=192.168.0.64/27 \ ParameterKey=PrivateSubnet02Block,ParameterValue=192.168.0.96/27 \ ParameterKey=PublicSubnet01Block,ParameterValue=192.168.0.0/27 \ ParameterKey=PublicSubnet02Block,ParameterValue=192.168.0.32/27

      AWS CloudFormation Tumpukan membutuhkan waktu beberapa menit untuk membuatnya. Untuk memeriksa status penyebaran tumpukan, jalankan perintah berikut.

      aws cloudformation describe-stacks --stack-name my-eks-custom-networking-vpc --query Stacks\[\].StackStatus --output text

      Jangan melanjutkan ke langkah berikutnya sampai output dari perintah tersebutCREATE_COMPLETE.

    2. Tentukan variabel dengan nilai ID subnet pribadi yang dibuat oleh template.

      subnet_id_1=$(aws cloudformation describe-stack-resources --stack-name my-eks-custom-networking-vpc \ --query "StackResources[?LogicalResourceId=='PrivateSubnet01'].PhysicalResourceId" --output text) subnet_id_2=$(aws cloudformation describe-stack-resources --stack-name my-eks-custom-networking-vpc \ --query "StackResources[?LogicalResourceId=='PrivateSubnet02'].PhysicalResourceId" --output text)
    3. Tentukan variabel dengan Availability Zones dari subnet yang diambil pada langkah sebelumnya.

      az_1=$(aws ec2 describe-subnets --subnet-ids $subnet_id_1 --query 'Subnets[*].AvailabilityZone' --output text) az_2=$(aws ec2 describe-subnets --subnet-ids $subnet_id_2 --query 'Subnets[*].AvailabilityZone' --output text)
  3. Buat peran IAM cluster.

    1. Jalankan perintah berikut untuk membuat file JSON kebijakan kepercayaan IAM.

      cat >eks-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    2. Buat peran IAM cluster Amazon EKS. Jika perlu, kata pengantar eks-cluster-role-trust-policy.json dengan jalur di komputer Anda tempat Anda menulis file pada langkah sebelumnya. Perintah tersebut mengaitkan kebijakan kepercayaan yang Anda buat pada langkah sebelumnya dengan peran tersebut. Untuk membuat peran IAM, prinsipal IAM yang membuat peran harus diberi iam:CreateRole tindakan (izin).

      aws iam create-role --role-name myCustomNetworkingAmazonEKSClusterRole --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
    3. Lampirkan kebijakan terkelola Amazon EKS yang diberi nama AmazonEKSClusterPolicyke peran tersebut. Untuk melampirkan kebijakan IAM ke kepala sekolah IAM, prinsipal yang melampirkan kebijakan harus diberikan salah satu tindakan IAM berikut (izin): atau. iam:AttachUserPolicy iam:AttachRolePolicy

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name myCustomNetworkingAmazonEKSClusterRole
  4. Buat kluster Amazon EKS dan konfigurasikan perangkat Anda untuk berkomunikasi dengannya.

    1. Buat sebuah klaster.

      aws eks create-cluster --name my-custom-networking-cluster \ --role-arn arn:aws:iam::$account_id:role/myCustomNetworkingAmazonEKSClusterRole \ --resources-vpc-config subnetIds=$subnet_id_1","$subnet_id_2
      catatan

      Mungkin error akan terjadi karena salah satu Availability Zone dalam permintaan Anda tidak memiliki kapasitas yang cukup untuk membuat klaster Amazon EKS. Jika hal ini terjadi, output galat berisi Availability Zones yang dapat mendukung klaster baru. Cobalah untuk kembali membuat klaster dengan setidaknya dua subnet yang terletak di Availability Zones yang didukung untuk akun Anda. Untuk informasi selengkapnya, lihat Kapasitas tidak mencukupi.

    2. Cluster membutuhkan waktu beberapa menit untuk membuatnya. Untuk memeriksa status penyebaran cluster, jalankan perintah berikut.

      aws eks describe-cluster --name my-custom-networking-cluster --query cluster.status

      Jangan melanjutkan ke langkah berikutnya sampai output dari perintah tersebut"ACTIVE".

    3. Konfigurasikan kubectl untuk berkomunikasi dengan cluster Anda.

      aws eks update-kubeconfig --name my-custom-networking-cluster

Langkah 2: Konfigurasikan VPC Anda

Tutorial ini membutuhkan VPC yang dibuat di. Langkah 1: Buat tes VPC dan cluster Untuk cluster produksi, sesuaikan langkah-langkah yang sesuai untuk VPC Anda dengan mengganti semua example values dengan milik Anda sendiri.

  1. Konfirmasikan bahwa yang Anda instal saat Amazon VPC CNI plugin for Kubernetes ini adalah versi terbaru. Untuk menentukan versi terbaru untuk jenis add-on Amazon EKS dan memperbarui versi Anda ke sana, lihatMemperbarui EKS add-on Amazon. Untuk menentukan versi terbaru untuk jenis add-on yang dikelola sendiri dan memperbarui versi Anda ke sana, lihat. Bekerja dengan EKS add-on Amazon VPC CNI plugin for Kubernetes Amazon

  2. Ambil ID VPC cluster Anda dan simpan dalam variabel untuk digunakan di langkah selanjutnya. Untuk cluster produksi, ganti my-custom-networking-clusterdengan nama cluster Anda.

    vpc_id=$(aws eks describe-cluster --name my-custom-networking-cluster --query "cluster.resourcesVpcConfig.vpcId" --output text)
  3. Kaitkan blok Classless Inter-Domain Routing (CIDR) tambahan dengan VPC klaster Anda. Blok CIDR tidak dapat tumpang tindih dengan blok CIDR terkait yang ada.

    1. Lihat blok CIDR saat ini yang terkait dengan VPC Anda.

      aws ec2 describe-vpcs --vpc-ids $vpc_id \ --query 'Vpcs[*].CidrBlockAssociationSet[*].{CIDRBlock: CidrBlock, State: CidrBlockState.State}' --out table

      Contoh output adalah sebagai berikut.

      ----------------------------------
      |          DescribeVpcs          |
      +-----------------+--------------+
      |    CIDRBlock    |    State     |
      +-----------------+--------------+
      |  192.168.0.0/24 |  associated  |
      +-----------------+--------------+
    2. Kaitkan blok CIDR tambahan ke VPC Anda. Untuk informasi selengkapnya, lihat Mengaitkan blok IPv4 CIDR tambahan dengan VPC Anda di Panduan Pengguna Amazon VPC.

      aws ec2 associate-vpc-cidr-block --vpc-id $vpc_id --cidr-block 192.168.1.0/24
    3. Konfirmasikan bahwa blok baru dikaitkan.

      aws ec2 describe-vpcs --vpc-ids $vpc_id --query 'Vpcs[*].CidrBlockAssociationSet[*].{CIDRBlock: CidrBlock, State: CidrBlockState.State}' --out table

      Contoh output adalah sebagai berikut.

      ----------------------------------
      |          DescribeVpcs          |
      +-----------------+--------------+
      |    CIDRBlock    |    State     |
      +-----------------+--------------+
      |  192.168.0.0/24 |  associated  |
      |  192.168.1.0/24 |  associated  |
      +-----------------+--------------+

    Jangan lanjutkan ke langkah berikutnya sampai blok CIDR baru Anda selesaiState. associated

  4. Buat subnet sebanyak yang ingin Anda gunakan di setiap Availability Zone tempat subnet Anda ada. Tentukan blok CIDR yang ada di dalam blok CIDR yang Anda kaitkan dengan VPC Anda di langkah sebelumnya.

    1. Buat subnet baru. Subnet harus dibuat di blok CIDR VPC yang berbeda dari subnet yang ada, tetapi di Availability Zone yang sama dengan subnet yang ada. Dalam contoh ini, satu subnet dibuat di blok CIDR baru di setiap Availability Zone tempat subnet pribadi saat ini ada. ID subnet yang dibuat disimpan dalam variabel untuk digunakan pada langkah selanjutnya. NameNilai cocok dengan nilai yang ditetapkan ke subnet yang dibuat menggunakan template Amazon EKS VPC pada langkah sebelumnya. Nama tidak diperlukan. Anda dapat menggunakan nama yang berbeda.

      new_subnet_id_1=$(aws ec2 create-subnet --vpc-id $vpc_id --availability-zone $az_1 --cidr-block 192.168.1.0/27 \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=my-eks-custom-networking-vpc-PrivateSubnet01},{Key=kubernetes.io/role/internal-elb,Value=1}]' \ --query Subnet.SubnetId --output text) new_subnet_id_2=$(aws ec2 create-subnet --vpc-id $vpc_id --availability-zone $az_2 --cidr-block 192.168.1.32/27 \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=my-eks-custom-networking-vpc-PrivateSubnet02},{Key=kubernetes.io/role/internal-elb,Value=1}]' \ --query Subnet.SubnetId --output text)
      penting

      Secara default, subnet baru Anda secara implisit terkait dengan tabel rute utama VPC Anda. Tabel rute ini memungkinkan komunikasi antara semua sumber daya yang digunakan di VPC. Namun, itu tidak memungkinkan komunikasi dengan sumber daya yang memiliki alamat IP yang berada di luar blok CIDR yang terkait dengan VPC Anda. Anda dapat mengaitkan tabel rute Anda sendiri ke subnet Anda untuk mengubah perilaku ini. Untuk informasi selengkapnya, lihat Tabel rute subnet di Panduan Pengguna Amazon VPC.

    2. Lihat subnet saat ini di VPC Anda.

      aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" \ --query 'Subnets[*].{SubnetId: SubnetId,AvailabilityZone: AvailabilityZone,CidrBlock: CidrBlock}' \ --output table

      Contoh output adalah sebagai berikut.

      ----------------------------------------------------------------------
      |                           DescribeSubnets                          |
      +------------------+--------------------+----------------------------+
      | AvailabilityZone |     CidrBlock      |         SubnetId           |
      +------------------+--------------------+----------------------------+
      |  us-west-2d      |  192.168.0.0/27    |     subnet-example1        |
      |  us-west-2a      |  192.168.0.32/27   |     subnet-example2        |
      |  us-west-2a      |  192.168.0.64/27   |     subnet-example3        |
      |  us-west-2d      |  192.168.0.96/27   |     subnet-example4        |
      |  us-west-2a      |  192.168.1.0/27    |     subnet-example5        |
      |  us-west-2d      |  192.168.1.32/27   |     subnet-example6        |
      +------------------+--------------------+----------------------------+

      Anda dapat melihat subnet di blok 192.168.1.0 CIDR yang Anda buat berada di Availability Zone yang sama dengan subnet di blok CIDR. 192.168.0.0

Langkah 3: Konfigurasikan Kubernetes sumber daya

Untuk mengkonfigurasi Kubernetes sumber daya
  1. Atur variabel AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG lingkungan ke true dalam aws-nodeDaemonSet.

    kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
  2. Ambil ID grup keamanan klaster Anda dan simpan dalam variabel untuk digunakan pada langkah berikutnya. Amazon EKS secara otomatis membuat grup keamanan ini saat Anda membuat klaster.

    cluster_security_group_id=$(aws eks describe-cluster --name $cluster_name --query cluster.resourcesVpcConfig.clusterSecurityGroupId --output text)
  3. Buat sumber daya ENIConfig khusus untuk setiap subnet yang ingin Anda gunakanPods.

    1. Buat file unik untuk setiap konfigurasi antarmuka jaringan.

      Perintah berikut membuat ENIConfig file terpisah untuk dua subnet yang dibuat pada langkah sebelumnya. Nilai untuk name harus unik. Namanya sama dengan Availability Zone tempat subnet berada. Grup keamanan cluster ditugaskan ke fileENIConfig.

      cat >$az_1.yaml <<EOF apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: $az_1 spec: securityGroups: - $cluster_security_group_id subnet: $new_subnet_id_1 EOF
      cat >$az_2.yaml <<EOF apiVersion: crd.k8s.amazonaws.com/v1alpha1 kind: ENIConfig metadata: name: $az_2 spec: securityGroups: - $cluster_security_group_id subnet: $new_subnet_id_2 EOF

      Untuk cluster produksi, Anda dapat membuat perubahan berikut pada perintah sebelumnya:

      • Ganti $cluster_security_group_iddengan ID grup keamanan yang ada yang ingin Anda gunakan untuk masing-masingENIConfig.

      • Sebaiknya beri nama Anda ENIConfigs sama dengan Availability Zone yang akan Anda gunakan, bila memungkinkan. ENIConfig Anda mungkin perlu menggunakan nama yang berbeda untuk nama Availability Zone karena berbagai alasan. ENIConfigs Misalnya, jika Anda memiliki lebih dari dua subnet di Availability Zone yang sama dan ingin menggunakan keduanya dengan jaringan kustom, maka Anda memerlukan beberapa ENIConfigs untuk Availability Zone yang sama. Karena masing-masing ENIConfig memerlukan nama unik, Anda tidak dapat memberi nama lebih dari satu nama Anda ENIConfigs menggunakan nama Availability Zone.

        Jika ENIConfig nama Anda tidak semua sama dengan nama Availability Zone, maka ganti $az_1 dan $az_2 dengan nama Anda sendiri di perintah sebelumnya dan beri anotasi node Anda dengan yang ENIConfig nanti dalam tutorial ini.

      catatan

      Jika Anda tidak menentukan grup keamanan yang valid untuk digunakan dengan cluster produksi dan Anda menggunakan:

      • versi 1.8.0 atau yang lebih baru Amazon VPC CNI plugin for Kubernetes, maka kelompok keamanan yang terkait dengan antarmuka elastis network primer node digunakan.

      • versi Amazon VPC CNI plugin for Kubernetes yang lebih awal dari1.8.0, maka grup keamanan default untuk VPC ditetapkan ke antarmuka jaringan sekunder.

      penting
      • AWS_VPC_K8S_CNI_EXTERNALSNAT=falseadalah pengaturan default dalam konfigurasi untuk plugin Amazon VPC CNI untuk. Kubernetes Jika Anda menggunakan pengaturan default, lalu lintas yang ditujukan untuk alamat IP yang tidak berada dalam salah satu blok CIDR yang terkait dengan VPC Anda menggunakan grup keamanan dan subnet antarmuka jaringan utama node Anda. Subnet dan grup keamanan yang ditentukan dalam Anda ENIConfigs yang digunakan untuk membuat antarmuka jaringan sekunder tidak digunakan untuk lalu lintas ini. Untuk informasi selengkapnya tentang pengaturan ini, lihatSNAT untuk Pods.

      • Jika Anda juga menggunakan grup keamanan untukPods, grup keamanan yang ditentukan dalam a SecurityGroupPolicy digunakan, bukan grup keamanan yang ditentukan dalamENIConfigs. Untuk informasi selengkapnya, lihat Kelompok keamanan untuk Pods.

    2. Terapkan setiap file sumber daya kustom yang Anda buat ke cluster Anda dengan perintah berikut.

      kubectl apply -f $az_1.yaml kubectl apply -f $az_2.yaml
  4. Konfirmasikan bahwa Anda ENIConfigs telah dibuat.

    kubectl get ENIConfigs

    Contoh output adalah sebagai berikut.

    NAME AGE us-west-2a 117s us-west-2d 105s
  5. Jika Anda mengaktifkan jaringan khusus pada klaster produksi dan menamai ENIConfigs sesuatu selain Availability Zone tempat Anda menggunakannya, lewati ke langkah berikutnya untuk menerapkan node Amazon EC2.

    Aktifkan Kubernetes untuk menerapkan Availability Zone secara otomatis ke node Amazon EC2 baru yang dibuat di cluster Anda. ENIConfig

    1. Untuk test cluster dalam tutorial ini, lompat ke langkah berikutnya.

      Untuk cluster produksi, periksa untuk melihat apakah annotation dengan kunci k8s.amazonaws.com/eniConfig untuk variabel ENI_CONFIG_ANNOTATION_DEF lingkungan ada dalam spesifikasi kontainer untuk. aws-node DaemonSet

      kubectl describe daemonset aws-node -n kube-system | grep ENI_CONFIG_ANNOTATION_DEF

      Jika output dikembalikan, anotasi ada. Jika tidak ada output yang dikembalikan, maka variabel tidak diatur. Untuk cluster produksi, Anda dapat menggunakan pengaturan ini atau pengaturan di langkah berikut. Jika Anda menggunakan pengaturan ini, itu akan mengganti pengaturan pada langkah berikut. Dalam tutorial ini, pengaturan pada langkah berikutnya digunakan.

    2. Perbarui aws-node DaemonSet agar secara otomatis menerapkan Availability Zone ke node Amazon EC2 baru yang dibuat di cluster Anda. ENIConfig

      kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone

Langkah 4: Menyebarkan node Amazon EC2

Untuk menyebarkan node Amazon EC2
  1. Buat peran IAM node.

    1. Jalankan perintah berikut untuk membuat file JSON kebijakan kepercayaan IAM.

      cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    2. Jalankan perintah berikut untuk menetapkan variabel untuk nama peran Anda. Anda dapat mengganti myCustomNetworkingAmazonEKSNodeRole dengan nama apa pun yang Anda pilih.

      export node_role_name=myCustomNetworkingAmazonEKSNodeRole
    3. Buat peran IAM dan simpan Amazon Resource Name (ARN) yang dikembalikan dalam variabel untuk digunakan di langkah selanjutnya.

      node_role_arn=$(aws iam create-role --role-name $node_role_name --assume-role-policy-document file://"node-role-trust-relationship.json" \ --query Role.Arn --output text)
    4. Lampirkan tiga kebijakan yang dikelola IAM yang diperlukan ke peran IAM.

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name $node_role_name
      penting

      Untuk kesederhanaan dalam tutorial ini, AmazonEKS_CNI_Policykebijakan dilampirkan ke peran IAM node. Namun, dalam klaster produksi, kami merekomendasikan untuk melampirkan kebijakan ke peran IAM terpisah yang hanya digunakan dengan. Amazon VPC CNI plugin for Kubernetes Untuk informasi selengkapnya, lihat Mengkonfigurasi Amazon VPC CNI plugin for Kubernetes untuk menggunakan peran IAM untuk akun layanan (IRSA).

  2. Buat salah satu jenis grup node berikut. Untuk menentukan jenis instance yang ingin Anda terapkan, lihatPilih jenis instans EC2 node Amazon yang optimal. Untuk tutorial ini, selesaikan template Managed, Without a launch atau dengan template peluncuran tanpa opsi yang ditentukan ID AMI. Jika Anda akan menggunakan grup node untuk beban kerja produksi, sebaiknya Anda membiasakan diri dengan semua opsi grup node yang dikelola dan dikelola sendiri sebelum menerapkan grup node.

    • Dikelola - Terapkan grup node Anda menggunakan salah satu opsi berikut:

      • Tanpa template peluncuran atau dengan template peluncuran tanpa ID AMI yang ditentukan - Jalankan perintah berikut. Untuk tutorial ini, gunakanexample values. Untuk grup node produksi, ganti semua example values dengan milik Anda sendiri. Nama grup node tidak boleh lebih dari 63 karakter. Itu harus dimulai dengan huruf atau digit, tetapi juga dapat menyertakan tanda hubung dan garis bawah untuk karakter yang tersisa.

        aws eks create-nodegroup --cluster-name $cluster_name --nodegroup-name my-nodegroup \ --subnets $subnet_id_1 $subnet_id_2 --instance-types t3.medium --node-role $node_role_arn
      • Dengan template peluncuran dengan ID AMI yang ditentukan

        1. Tentukan jumlah maksimum yang disarankan Amazon EKS Pods untuk node Anda. Ikuti instruksi diAmazon EKS merekomendasikan maksimum Pods untuk setiap jenis EC2 instans Amazon, tambahkan --cni-custom-networking-enabled ke langkah 3 dalam topik itu. Perhatikan output untuk digunakan pada langkah berikutnya.

        2. Di template peluncuran Anda, tentukan ID AMI Amazon EKS yang dioptimalkan, atau AMI kustom yang dibuat dari AMI Amazon EKS yang dioptimalkan, lalu terapkan grup node menggunakan templat peluncuran dan berikan data pengguna berikut di template peluncuran. Data pengguna ini meneruskan argumen ke dalam bootstrap.sh file. Untuk informasi lebih lanjut tentang file bootstrap, lihat bootstrap.sh diGitHub. Anda dapat mengganti 20 dengan nilai dari langkah sebelumnya (disarankan) atau nilai Anda sendiri.

          /etc/eks/bootstrap.sh my-cluster --use-max-pods false --kubelet-extra-args '--max-pods=20'

          Jika Anda telah membuat AMI kustom yang tidak dibangun dari AMI Amazon EKS yang dioptimalkan, maka Anda perlu membuat konfigurasi sendiri.

    • Dikelola sendiri

      1. Tentukan jumlah maksimum yang disarankan Amazon EKS Pods untuk node Anda. Ikuti instruksi diAmazon EKS merekomendasikan maksimum Pods untuk setiap jenis EC2 instans Amazon, tambahkan --cni-custom-networking-enabled ke langkah 3 dalam topik itu. Perhatikan output untuk digunakan pada langkah berikutnya.

      2. Menyebarkan grup simpul menggunakan instruksi diBuat node Amazon Linux yang dikelola sendiri. Tentukan teks berikut untuk BootstrapArgumentsparameter. Anda dapat mengganti 20 dengan nilai dari langkah sebelumnya (disarankan) atau nilai Anda sendiri.

        --use-max-pods false --kubelet-extra-args '--max-pods=20'
    catatan

    Jika Anda ingin node dalam cluster produksi mendukung jumlah yang jauh lebih tinggiPods, jalankan skrip Amazon EKS merekomendasikan maksimum Pods untuk setiap jenis EC2 instans Amazon lagi. Juga, tambahkan --cni-prefix-delegation-enabled opsi ke perintah. Misalnya, 110 dikembalikan untuk tipe m5.large instance. Untuk petunjuk tentang cara mengaktifkan kemampuan ini, lihatTingkatkan jumlah alamat IP yang tersedia untuk node Amazon EC2 Anda. Anda dapat menggunakan kemampuan ini dengan jaringan khusus.

    Pembuatan grup node membutuhkan waktu beberapa menit. Anda dapat memeriksa status pembuatan grup node terkelola dengan perintah berikut.

    aws eks describe-nodegroup --cluster-name $cluster_name --nodegroup-name my-nodegroup --query nodegroup.status --output text

    Jangan melanjutkan ke langkah berikutnya sampai output yang dikembalikanACTIVE.

  3. Untuk tutorialnya, Anda dapat melewati langkah ini.

    Untuk cluster produksi, jika Anda tidak memberi nama yang sama ENIConfigs dengan Availability Zone yang Anda gunakan untuk mereka, maka Anda harus membubuhi keterangan node Anda dengan ENIConfig nama yang harus digunakan dengan node. Langkah ini tidak diperlukan jika Anda hanya memiliki satu subnet di setiap Availability Zone dan Anda menamai Anda ENIConfigs dengan nama yang sama dengan Availability Zones Anda. Ini karena secara Amazon VPC CNI plugin for Kubernetes otomatis mengaitkan yang benar ENIConfig dengan node untuk Anda ketika Anda mengaktifkannya untuk melakukannya pada langkah sebelumnya.

    1. Dapatkan daftar node di cluster Anda.

      kubectl get nodes

      Contoh output adalah sebagai berikut.

      NAME STATUS ROLES AGE VERSION ip-192-168-0-126.us-west-2.compute.internal Ready <none> 8m49s v1.22.9-eks-810597c ip-192-168-0-92.us-west-2.compute.internal Ready <none> 8m34s v1.22.9-eks-810597c
    2. Tentukan Availability Zone mana setiap node berada. Jalankan perintah berikut untuk setiap node yang dikembalikan pada langkah sebelumnya.

      aws ec2 describe-instances --filters Name=network-interface.private-dns-name,Values=ip-192-168-0-126.us-west-2.compute.internal \ --query 'Reservations[].Instances[].{AvailabilityZone: Placement.AvailabilityZone, SubnetId: SubnetId}'

      Contoh output adalah sebagai berikut.

      [ { "AvailabilityZone": "us-west-2d", "SubnetId": "subnet-Example5" } ]
    3. Anotasi setiap node dengan ENIConfig yang Anda buat untuk subnet ID dan Availability Zone. Anda hanya dapat membuat anotasi node dengan satuENIConfig, meskipun beberapa node dapat dianotasi dengan yang sama. ENIConfig Ganti example values dengan milik Anda sendiri.

      kubectl annotate node ip-192-168-0-126.us-west-2.compute.internal k8s.amazonaws.com/eniConfig=EniConfigName1 kubectl annotate node ip-192-168-0-92.us-west-2.compute.internal k8s.amazonaws.com/eniConfig=EniConfigName2
  4. Jika Anda memiliki node dalam klaster produksi dengan berjalan Pods sebelum Anda beralih menggunakan fitur jaringan kustom, selesaikan tugas-tugas berikut:

    1. Pastikan Anda memiliki node yang tersedia yang menggunakan fitur jaringan kustom.

    2. Cordon dan tiriskan node untuk mematikan dengan anggun. Pods Untuk informasi selengkapnya, lihat Menguras Node dengan Aman dalam Kubernetes dokumentasi.

    3. Mengakhiri node. Jika node berada dalam grup node terkelola yang ada, Anda dapat menghapus grup node. Salin perintah yang mengikuti ke perangkat Anda. Buat modifikasi berikut pada perintah sesuai kebutuhan dan kemudian jalankan perintah yang dimodifikasi:

      • Ganti my-cluster dengan nama untuk cluster Anda.

      • Ganti my-nodegroup dengan nama untuk grup node Anda.

      aws eks delete-nodegroup --cluster-name my-cluster --nodegroup-name my-nodegroup

    Hanya simpul-simpul baru yang terdaftar dengan label k8s.amazonaws.com/eniConfig yang menggunakan fitur jaringan kustom.

  5. Konfirmasikan bahwa Pods alamat IP diberikan dari blok CIDR yang terkait dengan salah satu subnet yang Anda buat pada langkah sebelumnya.

    kubectl get pods -A -o wide

    Contoh output adalah sebagai berikut.

    NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system aws-node-2rkn4 1/1 Running 0 7m19s 192.168.0.92 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system aws-node-k96wp 1/1 Running 0 7m15s 192.168.0.126 ip-192-168-0-126.us-west-2.compute.internal <none> <none> kube-system coredns-657694c6f4-smcgr 1/1 Running 0 56m 192.168.1.23 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system coredns-657694c6f4-stwv9 1/1 Running 0 56m 192.168.1.28 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system kube-proxy-jgshq 1/1 Running 0 7m19s 192.168.0.92 ip-192-168-0-92.us-west-2.compute.internal <none> <none> kube-system kube-proxy-wx9vk 1/1 Running 0 7m15s 192.168.0.126 ip-192-168-0-126.us-west-2.compute.internal <none> <none>

    Anda dapat melihat bahwa alamat IP coredns Pods yang ditetapkan dari blok 192.168.1.0 CIDR yang Anda tambahkan ke VPC Anda. Tanpa jaringan khusus, mereka akan diberi alamat dari blok 192.168.0.0 CIDR, karena itu adalah satu-satunya blok CIDR yang awalnya terkait dengan VPC.

    Jika Pod's spec berisihostNetwork=true, itu diberikan alamat IP utama dari node. Itu tidak diberikan alamat dari subnet yang Anda tambahkan. Secara default, nilai ini diatur ke false. Nilai ini diatur ke true untuk kube-proxy and Amazon VPC CNI plugin for Kubernetes (aws-node) Pods yang berjalan di cluster Anda. Inilah sebabnya mengapa kube-proxy dan plugin aws-node Pods tidak diberi 192.168.1.x alamat di output sebelumnya. Untuk informasi selengkapnya tentang Pod's hostNetwork setelan, lihat inti PodSpec v1 di referensi Kubernetes API.

Langkah 5: Hapus sumber daya tutorial

Setelah Anda menyelesaikan tutorial, kami sarankan Anda menghapus sumber daya yang Anda buat. Anda kemudian dapat menyesuaikan langkah-langkah untuk mengaktifkan jaringan khusus untuk klaster produksi.

Untuk menghapus sumber daya tutorial
  1. Jika grup node yang Anda buat hanya untuk pengujian, maka hapuslah.

    aws eks delete-nodegroup --cluster-name $cluster_name --nodegroup-name my-nodegroup

    Bahkan setelah AWS CLI output mengatakan bahwa cluster dihapus, proses penghapusan mungkin tidak benar-benar lengkap. Proses penghapusan memakan waktu beberapa menit. Konfirmasikan bahwa itu selesai dengan menjalankan perintah berikut.

    aws eks describe-nodegroup --cluster-name $cluster_name --nodegroup-name my-nodegroup --query nodegroup.status --output text

    Jangan lanjutkan sampai output yang dikembalikan mirip dengan output berikut.

    An error occurred (ResourceNotFoundException) when calling the DescribeNodegroup operation: No node group found for name: my-nodegroup.
  2. Jika grup node yang Anda buat hanya untuk pengujian, maka hapus peran IAM node.

    1. Lepaskan kebijakan dari peran.

      aws iam detach-role-policy --role-name myCustomNetworkingAmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy aws iam detach-role-policy --role-name myCustomNetworkingAmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly aws iam detach-role-policy --role-name myCustomNetworkingAmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
    2. Hapus peran.

      aws iam delete-role --role-name myCustomNetworkingAmazonEKSNodeRole
  3. Hapus klaster .

    aws eks delete-cluster --name $cluster_name

    Konfirmasikan cluster dihapus dengan perintah berikut.

    aws eks describe-cluster --name $cluster_name --query cluster.status --output text

    Ketika output yang mirip dengan berikut ini dikembalikan, cluster berhasil dihapus.

    An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: my-cluster.
  4. Hapus peran IAM cluster.

    1. Lepaskan kebijakan dari peran.

      aws iam detach-role-policy --role-name myCustomNetworkingAmazonEKSClusterRole --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
    2. Hapus peran.

      aws iam delete-role --role-name myCustomNetworkingAmazonEKSClusterRole
  5. Hapus subnet yang Anda buat pada langkah sebelumnya.

    aws ec2 delete-subnet --subnet-id $new_subnet_id_1 aws ec2 delete-subnet --subnet-id $new_subnet_id_2
  6. Hapus VPC yang Anda buat.

    aws cloudformation delete-stack --stack-name my-eks-custom-networking-vpc