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 jumlahIPv4
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 ke
Pods
. -
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 versi1.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
. Package manager sepertiaws --version | cut -d / -f2 | cut -d ' ' -f1
yum
apt-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 menggunakankubectl
versi1.28
,1.29
, atau1.30
dengan itu. Untuk menginstal atau memutakhirkankubectl
, 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 menggunakan
, kecuali jika dicatat untuk menggantikannya. Anda dapat mengganti apa pun example
values
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.example value
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
ke perintah.region-code
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.
-
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)
-
Buat sebuah VPC.
-
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 tersebut
CREATE_COMPLETE
. -
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)
-
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)
-
-
Buat peran IAM cluster.
-
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
-
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 diberiiam:CreateRole
tindakan (izin).aws iam create-role --role-name myCustomNetworkingAmazonEKSClusterRole --assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
-
Lampirkan kebijakan terkelola Amazon EKS yang diberi nama
AmazonEKSClusterPolicy
ke 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
-
-
Buat kluster Amazon EKS dan konfigurasikan perangkat Anda untuk berkomunikasi dengannya.
-
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.
-
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"
. -
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
dengan milik Anda sendiri.example
values
-
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
-
Ambil ID VPC cluster Anda dan simpan dalam variabel untuk digunakan di langkah selanjutnya. Untuk cluster produksi, ganti
dengan nama cluster Anda.my-custom-networking-cluster
vpc_id=$(aws eks describe-cluster --name
my-custom-networking-cluster
--query "cluster.resourcesVpcConfig.vpcId" --output text) -
Kaitkan blok Classless Inter-Domain Routing (CIDR) tambahan dengan VPC klaster Anda. Blok CIDR tidak dapat tumpang tindih dengan blok CIDR terkait yang ada.
-
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 | +-----------------+--------------+ -
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
-
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
-
-
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.
-
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.
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-block192.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.
-
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
-
Atur variabel
AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG
lingkungan ketrue
dalamaws-node
DaemonSet
.kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
-
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)
-
Buat sumber daya
ENIConfig
khusus untuk setiap subnet yang ingin Anda gunakanPods.-
Buat file unik untuk setiap konfigurasi antarmuka jaringan.
Perintah berikut membuat
ENIConfig
file terpisah untuk dua subnet yang dibuat pada langkah sebelumnya. Nilai untukname
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
EOFcat >$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
EOFUntuk cluster produksi, Anda dapat membuat perubahan berikut pada perintah sebelumnya:
-
Ganti
dengan ID grup keamanan yang ada yang ingin Anda gunakan untuk masing-masing$cluster_security_group_id
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 beberapaENIConfigs
untuk Availability Zone yang sama. Karena masing-masingENIConfig
memerlukan nama unik, Anda tidak dapat memberi nama lebih dari satu nama AndaENIConfigs
menggunakan nama Availability Zone.Jika
ENIConfig
nama Anda tidak semua sama dengan nama Availability Zone, maka ganti
dan$az_1
dengan nama Anda sendiri di perintah sebelumnya dan beri anotasi node Anda dengan yang ENIConfig nanti dalam tutorial ini.$az_2
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 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 AndaENIConfigs
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.
-
-
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
-
-
Konfirmasikan bahwa Anda
ENIConfigs
telah dibuat.kubectl get ENIConfigs
Contoh output adalah sebagai berikut.
NAME AGE
us-west-2a
117sus-west-2d
105s -
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
-
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 variabelENI_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.
-
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
-
Buat peran IAM node.
-
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 -
Jalankan perintah berikut untuk menetapkan variabel untuk nama peran Anda. Anda dapat mengganti
dengan nama apa pun yang Anda pilih.myCustomNetworkingAmazonEKSNodeRole
export node_role_name=
myCustomNetworkingAmazonEKSNodeRole
-
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) -
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_Policy
kebijakan 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).
-
-
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, gunakan
. Untuk grup node produksi, ganti semuaexample 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.example values
aws eks create-nodegroup --cluster-name $cluster_name --nodegroup-name
my-nodegroup
\ --subnets$subnet_id_1
$subnet_id_2
--instance-typest3.medium
--node-role $node_role_arn -
Dengan template peluncuran dengan ID AMI yang ditentukan
-
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
ke langkah 3 dalam topik itu. Perhatikan output untuk digunakan pada langkah berikutnya.--cni-custom-networking-enabled
-
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.shdiGitHub. Anda dapat mengganti
dengan nilai dari langkah sebelumnya (disarankan) atau nilai Anda sendiri.20
/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
-
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
ke langkah 3 dalam topik itu. Perhatikan output untuk digunakan pada langkah berikutnya.--cni-custom-networking-enabled
-
Menyebarkan grup simpul menggunakan instruksi diBuat node Amazon Linux yang dikelola sendiri. Tentukan teks berikut untuk BootstrapArgumentsparameter. Anda dapat mengganti
dengan nilai dari langkah sebelumnya (disarankan) atau nilai Anda sendiri.20
--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
opsi ke perintah. Misalnya,--cni-prefix-delegation-enabled
dikembalikan untuk tipe110
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 textJangan melanjutkan ke langkah berikutnya sampai output yang dikembalikan
ACTIVE
. -
-
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 denganENIConfig
nama yang harus digunakan dengan node. Langkah ini tidak diperlukan jika Anda hanya memiliki satu subnet di setiap Availability Zone dan Anda menamai AndaENIConfigs
dengan nama yang sama dengan Availability Zones Anda. Ini karena secara Amazon VPC CNI plugin for Kubernetes otomatis mengaitkan yang benarENIConfig
dengan node untuk Anda ketika Anda mengaktifkannya untuk melakukannya pada langkah sebelumnya.-
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 -
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
" } ] -
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
dengan milik Anda sendiri.example values
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
-
-
Jika Anda memiliki node dalam klaster produksi dengan berjalan Pods sebelum Anda beralih menggunakan fitur jaringan kustom, selesaikan tugas-tugas berikut:
-
Pastikan Anda memiliki node yang tersedia yang menggunakan fitur jaringan kustom.
-
Cordon dan tiriskan node untuk mematikan dengan anggun. Pods Untuk informasi selengkapnya, lihat Menguras Node dengan Aman
dalam Kubernetes dokumentasi. -
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
dengan nama untuk cluster Anda.my-cluster
-
Ganti
dengan nama untuk grup node Anda.my-nodegroup
aws eks delete-nodegroup --cluster-name
my-cluster
--nodegroup-namemy-nodegroup
-
Hanya simpul-simpul baru yang terdaftar dengan label
k8s.amazonaws.com/eniConfig
yang menggunakan fitur jaringan kustom. -
-
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 blok192.168.1.0
CIDR yang Anda tambahkan ke VPC Anda. Tanpa jaringan khusus, mereka akan diberi alamat dari blok192.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 kefalse
. Nilai ini diatur ketrue
untukkube-proxy
and Amazon VPC CNI plugin for Kubernetes (aws-node
) Pods yang berjalan di cluster Anda. Inilah sebabnya mengapakube-proxy
dan pluginaws-node
Pods tidak diberi192.168.1.x
alamat di output sebelumnya. Untuk informasi selengkapnya tentang Pod'shostNetwork
setelan, lihat inti PodSpec v1di 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
-
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.
-
Jika grup node yang Anda buat hanya untuk pengujian, maka hapus peran IAM node.
-
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
-
Hapus peran.
aws iam delete-role --role-name myCustomNetworkingAmazonEKSNodeRole
-
-
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.
-
Hapus peran IAM cluster.
-
Lepaskan kebijakan dari peran.
aws iam detach-role-policy --role-name myCustomNetworkingAmazonEKSClusterRole --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
-
Hapus peran.
aws iam delete-role --role-name myCustomNetworkingAmazonEKSClusterRole
-
-
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
-
Hapus VPC yang Anda buat.
aws cloudformation delete-stack --stack-name my-eks-custom-networking-vpc