

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

# Sesuaikan antarmuka jaringan sekunder di node Amazon EKS
<a name="cni-custom-network-tutorial"></a>

Lengkapi yang berikut ini sebelum Anda memulai tutorial:
+ Tinjau pertimbangannya
+ Keakraban dengan bagaimana plugin Amazon VPC CNI untuk Kubernetes membuat antarmuka jaringan sekunder dan menetapkan alamat IP ke Pod. Untuk informasi lebih lanjut, lihat [Alokasi ENI](https://github.com/aws/amazon-vpc-cni-k8s#eni-allocation) di GitHub.
+ 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, gunakan`aws --version | cut -d / -f2 | cut -d ' ' -f1`. Package manager seperti`yum`,`apt-get`, atau Homebrew untuk macOS seringkali merupakan beberapa versi di belakang versi terbaru CLI. AWS Untuk menginstal versi terbaru, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dan [Konfigurasi cepat dengan aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) di *Panduan Pengguna Antarmuka Baris AWS Perintah*. Versi AWS CLI yang diinstal AWS CloudShell mungkin juga beberapa versi di belakang versi terbaru. Untuk memperbaruinya, lihat [Menginstal AWS CLI ke direktori home Anda](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software) di * AWS CloudShell Panduan Pengguna*.
+ Alat baris `kubectl` perintah diinstal pada perangkat Anda atau AWS CloudShell. Untuk menginstal atau memutakhirkan `kubectl`, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).
+ 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 di AWS CLI di](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html) Panduan Pengguna Antarmuka Baris AWS Perintah.

Untuk tutorial ini, kami sarankan menggunakan nilai contoh, kecuali jika dicatat untuk menggantikannya. Anda dapat mengganti nilai contoh apa pun saat menyelesaikan langkah-langkah untuk klaster produksi. Kami merekomendasikan 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 CLI AWS](https://docs.aws.amazon.com/cli/latest/userguide/welcome-examples.html). Jika Anda menjalankan perintah dari baris perintah terhadap sumber daya yang berada di AWS Wilayah yang berbeda dari AWS Wilayah default yang ditentukan dalam [profil AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-profiles) CLI yang Anda gunakan, maka Anda perlu menambahkan `--region us-west-2` perintah, menggantinya `us-west-2` dengan wilayah Anda AWS .

Saat Anda ingin menerapkan jaringan khusus ke kluster produksi Anda, lewati ke[Langkah 2: Konfigurasikan VPC Anda](#custom-networking-configure-vpc).

## Langkah 1: Buat tes VPC dan cluster
<a name="custom-networking-create-cluster"></a>

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 kluster Amazon EKS](create-cluster.md).

1. Jalankan perintah berikut untuk menentukan `account_id` variabel.

   ```
   account_id=$(aws sts get-caller-identity --query Account --output text)
   ```

1. Buat sebuah VPC.

   1. Jika Anda menerapkan ke sistem pengujian, buat VPC menggunakan template Amazon AWS CloudFormation EKS.

      ```
      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
      ```

   1.  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 tersebut`CREATE_COMPLETE`.

   1. Tentukan variabel dengan nilai subnet pribadi yang IDs 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)
      ```

   1. 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)
      ```

1. Buat peran IAM cluster.

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

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "eks.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) 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"
      ```

   1. Lampirkan kebijakan terkelola Amazon EKS bernama [EKSClusterKebijakan Amazon](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKSClusterPolicy.html#AmazonEKSClusterPolicy-json) ke peran tersebut. Untuk melampirkan kebijakan IAM ke kepala sekolah [IAM, prinsipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) 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
      ```

1. 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**  
Anda mungkin menerima kesalahan bahwa 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](troubleshooting.md#ice).

   1. Cluster membutuhkan 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"`.

   1. Konfigurasikan `kubectl` untuk berkomunikasi dengan cluster Anda.

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

## Langkah 2: Konfigurasikan VPC Anda
<a name="custom-networking-configure-vpc"></a>

Tutorial ini membutuhkan VPC yang dibuat di. [Langkah 1: Buat tes VPC dan cluster](#custom-networking-create-cluster) Untuk cluster produksi, sesuaikan langkah-langkah yang sesuai untuk VPC Anda dengan mengganti semua nilai contoh dengan milik Anda sendiri.

1. Konfirmasikan bahwa plugin Amazon VPC CNI Anda yang saat ini diinstal untuk Kubernetes adalah versi terbaru. Untuk menentukan versi terbaru untuk jenis add-on Amazon EKS dan memperbarui versi Anda ke sana, lihat[Perbarui add-on Amazon EKS](updating-an-add-on.md). Untuk menentukan versi terbaru untuk jenis add-on yang dikelola sendiri dan memperbarui versi Anda ke sana, lihat. [Tetapkan IPs ke Pod dengan Amazon VPC CNI](managing-vpc-cni.md)

1. Ambil ID VPC cluster Anda dan simpan dalam variabel untuk digunakan di langkah selanjutnya.

   ```
   vpc_id=$(aws eks describe-cluster --name my-custom-networking-cluster --query "cluster.resourcesVpcConfig.vpcId" --output text)
   ```

1. 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  |
      +-----------------+--------------+
      ```

   1. Kaitkan blok CIDR tambahan ke VPC Anda. Ganti nilai blok CIDR dalam perintah berikut. Untuk informasi selengkapnya, lihat [Mengaitkan blok IPv4 CIDR tambahan dengan VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/modify-vpcs.html#add-ipv4-cidr) di Panduan Pengguna Amazon VPC.

      ```
      aws ec2 associate-vpc-cidr-block --vpc-id $vpc_id --cidr-block 192.168.1.0/24
      ```

   1. 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 selesai`State`. `associated`

1. 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. Ganti nilai blok CIDR dalam perintah berikut. 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. Subnet IDs yang dibuat disimpan dalam variabel untuk digunakan dalam langkah-langkah selanjutnya. `Name`Nilai 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.](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#RouteTables) 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](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#subnet-route-tables) di Panduan Pengguna Amazon VPC.

   1. 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 sumber daya Kubernetes
<a name="custom-networking-configure-kubernetes"></a>

1. Atur variabel `AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG` lingkungan ke `true` dalam `aws-node` DaemonSet.

   ```
   kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
   ```

1. Ambil ID [grup keamanan klaster](sec-group-reqs.md) 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 my-custom-networking-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId --output text)
   ```

1.  Buat sumber daya `ENIConfig` khusus untuk setiap subnet yang ingin Anda gunakan untuk menerapkan Pod.

   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 file`ENIConfig`.

      ```
      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 \$1cluster\$1security\$1group\$1id dengan ID grup [keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html) yang ada yang ingin Anda gunakan untuk masing-masing. `ENIConfig`
      + 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 \$1az\$11 dan \$1az\$12 dengan nama Anda sendiri di perintah sebelumnya dan [beri anotasi node Anda](#custom-networking-annotate-eniconfig) dengan yang nanti dalam tutorial ini. ENIConfig
**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 dari plugin Amazon VPC CNI untuk Kubernetes, kemudian kelompok keamanan yang terkait dengan antarmuka elastic network utama node digunakan.
      + versi plugin Amazon VPC CNI untuk Kubernetes yang lebih awal dari`1.8.0`, maka grup keamanan default untuk VPC ditetapkan ke antarmuka jaringan sekunder.
**penting**  
 `AWS_VPC_K8S_CNI_EXTERNALSNAT=false`adalah 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, lihat[Aktifkan akses internet keluar untuk Pod](external-snat.md).
Jika Anda juga menggunakan grup keamanan untuk Pod, grup keamanan yang ditentukan dalam sebuah `SecurityGroupPolicy` akan digunakan sebagai ganti grup keamanan yang ditentukan dalam`ENIConfigs`. Untuk informasi selengkapnya, lihat [Menetapkan grup keamanan ke Pod individual](security-groups-for-pods.md).

   1. 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
      ```

1. Konfirmasikan bahwa Anda `ENIConfigs` telah dibuat.

   ```
   kubectl get ENIConfigs
   ```

   Contoh output adalah sebagai berikut.

   ```
   NAME         AGE
   us-west-2a   117s
   us-west-2d   105s
   ```

1. Jika Anda mengaktifkan jaringan khusus pada klaster produksi dan menamai `ENIConfigs` sesuatu selain Availability Zone tempat Anda menggunakannya, lewati ke [langkah berikutnya](#custom-networking-deploy-nodes) untuk menerapkan node Amazon EC2.

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

   1. Untuk test cluster dalam tutorial ini, lompat ke [langkah berikutnya](#custom-networking-automatically-apply-eniconfig).

      Untuk kluster produksi, periksa untuk melihat apakah anotasi dengan kunci `k8s.amazonaws.com/eniConfig` untuk variabel ` [ENI\$1CONFIG\$1ANNOTATION\$1DEF](https://github.com/aws/amazon-vpc-cni-k8s#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.

   1.  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
<a name="custom-networking-deploy-nodes"></a>

1. Buat peran IAM node.

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

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 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 myCustomNetworkingNodeRole --assume-role-policy-document file://"node-role-trust-relationship.json" \
          --query Role.Arn --output text)
      ```

   1. 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 myCustomNetworkingNodeRole
      aws iam attach-role-policy \
        --policy-arn arn:aws: iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
        --role-name myCustomNetworkingNodeRole
      aws iam attach-role-policy \
          --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy \
          --role-name myCustomNetworkingNodeRole
      ```
**penting**  
Untuk kesederhanaan dalam tutorial ini, kebijakan [Amazoneks\$1CNI\$1Policy dilampirkan ke peran](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEKS_CNI_Policy.html) IAM node. Namun, dalam cluster produksi, kami merekomendasikan untuk melampirkan kebijakan ke peran IAM terpisah yang hanya digunakan dengan plugin Amazon VPC CNI untuk Kubernetes. Untuk informasi selengkapnya, lihat [Konfigurasikan plugin Amazon VPC CNI untuk menggunakan IRSA](cni-iam-role.md).

1. Buat salah satu jenis grup node berikut. Untuk menentukan jenis instance yang ingin Anda terapkan, lihat[Pilih jenis instans node Amazon EC2 yang optimal](choosing-instance-type.md). 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, maka sebaiknya Anda membiasakan diri dengan semua grup node [terkelola dan opsi grup node](create-managed-node-group.md) yang [dikelola sendiri sebelum menerapkan grup node](worker.md).
   +  **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, gunakan nilai contoh. Untuk grup node produksi, ganti semua nilai contoh 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 my-custom-networking-cluster --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 Pod untuk node Anda berdasarkan tipe instans Anda. Untuk informasi selengkapnya, lihat [Bagaimana MaxPods ditentukan](choosing-instance-type.md#max-pods-precedence). Perhatikan nilai untuk digunakan pada langkah berikutnya.

       1. 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](launch-templates.md) dan berikan data pengguna berikut di template peluncuran. Data pengguna ini meneruskan argumen ke dalam `NodeConfig` spesifikasi. Untuk informasi selengkapnya NodeConfig, lihat [referensi NodeConfig API](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/api/#nodeconfig). Anda dapat mengganti `20` dengan nilai dari langkah sebelumnya (disarankan) atau nilai Anda sendiri.

          ```
          ---
          MIME-Version: 1.0
          Content-Type: multipart/mixed; boundary="BOUNDARY"
          --BOUNDARY
          Content-Type: application/node.eks.aws
          
          ---
          apiVersion: node.eks.aws/v1alpha1
          kind: NodeConfig
          spec:
            cluster:
              name: my-cluster
              ...
              kubelet:
                config:
                  maxPods: 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 Pod untuk node Anda berdasarkan tipe instans Anda. Untuk informasi selengkapnya, lihat [Bagaimana MaxPods ditentukan](choosing-instance-type.md#max-pods-precedence). Perhatikan nilai untuk digunakan pada langkah berikutnya.

     1. Menyebarkan grup node menggunakan instruksi di[Buat node Amazon Linux yang dikelola sendiri](launch-workers.md).
**catatan**  
Jika Anda ingin node dalam klaster produksi mendukung jumlah Pod yang jauh lebih tinggi, Anda dapat mengaktifkan delegasi awalan. Misalnya, `110` dikembalikan untuk tipe `m5.large` instance. Untuk petunjuk tentang cara mengaktifkan kemampuan ini, lihat[Tetapkan lebih banyak alamat IP ke node Amazon EKS dengan awalan](cni-increase-ip-addresses.md). Anda dapat menggunakan kemampuan ini dengan jaringan khusus.

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

   ```
   aws eks describe-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup --query nodegroup.status --output text
   ```

   Jangan melanjutkan ke langkah berikutnya sampai output yang dikembalikan`ACTIVE`.

1.  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 anotasi 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 plugin Amazon VPC CNI untuk Kubernetes secara otomatis mengaitkan yang benar `ENIConfig` dengan node untuk Anda ketika Anda mengaktifkannya untuk melakukannya pada langkah sebelumnya.](#custom-networking-automatically-apply-eniconfig)

   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
      ```

   1. Tentukan Availability Zone mana setiap node berada. Jalankan perintah berikut untuk setiap node yang dikembalikan pada langkah sebelumnya, mengganti alamat IP berdasarkan output 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"
          }
      ]
      ```

   1. Anotasi setiap node dengan `ENIConfig` yang Anda buat untuk subnet ID dan Availability Zone. Anda hanya dapat membuat anotasi node dengan satu`ENIConfig`, meskipun beberapa node dapat dianotasi dengan yang sama. `ENIConfig` Ganti Contoh nilai dengan nilai 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
      ```

1.  Jika Anda memiliki node di klaster produksi dengan menjalankan Pod sebelum beralih menggunakan fitur jaringan kustom, selesaikan tugas-tugas berikut:

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

   1. Cordon dan tiriskan node untuk mematikan Pod dengan anggun. Untuk informasi selengkapnya, lihat [Menguras Node dengan Aman](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/) di dokumentasi Kubernetes.

   1. Mengakhiri node. Jika node berada dalam grup node terkelola yang ada, Anda dapat menghapus grup node. Jalankan perintah berikut.

      ```
      aws eks delete-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup
      ```

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

1. Konfirmasikan bahwa Pod diberi alamat IP 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 Pod coredns diberi alamat IP 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 sebuah Pod `spec` berisi`hostNetwork=true`, itu akan diberikan alamat IP utama dari node tersebut. Itu tidak diberikan alamat dari subnet yang Anda tambahkan. Secara default, nilai ini diatur ke `false`. Nilai ini ditetapkan `true` untuk plugin Amazon VPC CNI `kube-proxy` dan Amazon untuk Pod Kubernetes (`aws-node`) yang berjalan di klaster Anda. Inilah sebabnya mengapa `aws-node` Pod `kube-proxy` dan plugin tidak diberi alamat 192.168.1.x pada output sebelumnya. Untuk informasi selengkapnya tentang `hostNetwork` pengaturan Pod, lihat [inti PodSpec v1 di referensi](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#podspec-v1-core) API Kubernetes.

## Langkah 5: Hapus sumber daya tutorial
<a name="custom-network-delete-resources"></a>

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.

1. Jika grup node yang Anda buat hanya untuk pengujian, maka hapuslah.

   ```
   aws eks delete-nodegroup --cluster-name my-custom-networking-cluster --nodegroup-name my-nodegroup
   ```

1. Bahkan setelah output AWS CLI 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 my-custom-networking-cluster --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.
   ```

1. 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 myCustomNetworkingNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEKSWorkerNodePolicy
      aws iam detach-role-policy --role-name myCustomNetworkingNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
      aws iam detach-role-policy --role-name myCustomNetworkingNodeRole --policy-arn arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy
      ```

   1. Hapus peran.

      ```
      aws iam delete-role --role-name myCustomNetworkingNodeRole
      ```

1. Hapus klaster .

   ```
   aws eks delete-cluster --name my-custom-networking-cluster
   ```

   Konfirmasikan cluster dihapus dengan perintah berikut.

   ```
   aws eks describe-cluster --name my-custom-networking-cluster --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-custom-networking-cluster.
   ```

1. 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
      ```

   1. Hapus peran.

      ```
      aws iam delete-role --role-name myCustomNetworkingAmazonEKSClusterRole
      ```

1. 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
   ```

1. Hapus VPC yang Anda buat.

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