Memecahkan masalah dengan EKS cluster dan node Amazon - Amazon EKS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memecahkan masalah dengan EKS cluster dan node Amazon

Bab ini mencakup beberapa kesalahan umum yang mungkin Anda lihat saat menggunakan Amazon EKS dan cara mengatasinya. Jika Anda perlu memecahkan masalah EKS area Amazon tertentu, lihat bagian terpisah Pemecahan masalah IAMMemecahkan masalah Konektor Amazon EKS, dan Pemecahan Masalah untuk ADOT menggunakan topik Add-On. EKS

Untuk informasi pemecahan masalah lainnya, lihat konten Pusat Pengetahuan tentang Amazon Elastic Kubernetes Service di re:Post. AWS

Kapasitas tidak mencukupi

Jika Anda menerima kesalahan berikut saat mencoba membuat EKS klaster Amazon, maka salah satu Availability Zone yang Anda tentukan tidak memiliki kapasitas yang cukup untuk mendukung klaster.

Cannot create cluster 'example-cluster' because region-1d, the targeted Availability Zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these Availability Zones: region-1a, region-1b, region-1c

Coba lagi membuat klaster Anda dengan subnet di klaster Anda VPC yang di-host di Availability Zones yang ditampilkan oleh pesan galat ini.

Ada Availability Zone dimana cluster tidak dapat berada. Bandingkan Availability Zones tempat subnet Anda berada dengan daftar Availability Zone dalam persyaratan dan Persyaratan dan pertimbangan subnet pertimbangan Subnet.

Simpul gagal untuk bergabung dengan klaster

Ada beberapa alasan umum yang mencegah simpul bergabung dengan klaster:

  • Jika node adalah node yang dikelola, Amazon EKS menambahkan entri ke aws-auth ConfigMap saat Anda membuat grup node. Jika entri dihapus atau dimodifikasi, maka Anda perlu menambahkannya kembali. Untuk informasi lebih lanjut, masukkan eksctl create iamidentitymapping --help di terminal Anda. Anda dapat melihat aws-auth ConfigMap entri Anda saat ini dengan mengganti my-cluster dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi: eksctl get iamidentitymapping --cluster my-cluster. The ARN of the role that you specify can’t include a path other than /. For example, if the name of your role is development/apps/my-role, you’d need to change it to my-role when specifying the ARN for the role. Make sure that you specify the node IAM role ARN (not the instance profile ARN).

    Jika node dikelola sendiri, dan Anda belum membuat entri Pemberian Izin IAM akses pengguna ke Kubernetes dengan entri EKS akses akses untuk IAM peran node, jalankan perintah yang sama yang terdaftar untuk node terkelola. ARN Jika Anda telah membuat entri akses untuk IAM peran node Anda, maka itu mungkin tidak dikonfigurasi dengan benar dalam entri akses. ARN Pastikan bahwa IAM peran node ARN (bukan profil instanceARN) ditentukan sebagai prinsipal ARN dalam aws-auth ConfigMap entri atau entri akses Anda. Untuk informasi selengkapnya tentang entri akses, lihatPemberian Izin IAM akses pengguna ke Kubernetes dengan entri EKS akses.

  • AWS CloudFormation Template ClusterNamedi node Anda tidak sama persis dengan nama cluster yang Anda inginkan untuk bergabung dengan node Anda. Melewati nilai yang salah ke bidang ini menghasilkan konfigurasi /var/lib/kubelet/kubeconfig file node yang salah, dan node tidak akan bergabung dengan cluster.

  • Simpul tidak ditandai sebagai dimiliki oleh klaster. Node Anda harus memiliki tag berikut yang diterapkan padanya, di mana my-cluster diganti dengan nama cluster Anda.

    Kunci Nilai

    kubernetes.io/cluster/my-cluster

    owned

  • Simpul mungkin tidak dapat mengakses klaster menggunakan alamat IP publik. Pastikan bahwa simpul yang di-deploy di subnet publik memiliki alamat IP publik. Jika tidak, Anda dapat mengaitkan alamat IP Elastis ke node setelah diluncurkan. Untuk informasi selengkapnya, lihat Mengaitkan alamat IP Elastis dengan instans berjalan atau antarmuka jaringan. Jika subnet publik tidak diatur secara otomatis untuk menetapkan alamat IP publik ke instans yang di-deploy untuk itu, maka kami merekomendasikan untuk mengaktifkan pengaturan tersebut. Untuk informasi selengkapnya, lihat Memodifikasi atribut IPv4 pengalamatan publik untuk subnet Anda. Jika node dikerahkan ke subnet pribadi, maka subnet harus memiliki rute ke NAT gateway yang memiliki alamat IP publik yang ditetapkan untuk itu.

  • AWS STSTitik akhir untuk AWS Wilayah tempat Anda menerapkan node tidak diaktifkan untuk akun Anda. Untuk mengaktifkan wilayah, lihat Mengaktifkan dan menonaktifkan AWS STS di Wilayah. AWS

  • Node tidak memiliki DNS entri pribadi, sehingga kubelet log berisi node "" not found kesalahan. Pastikan bahwa VPC tempat node dibuat memiliki nilai yang ditetapkan untuk domain-name dan domain-name-servers seperti Options dalam aDHCP options set. Nilai defaultnya adalah domain-name:<region>.compute.internal dan domain-name-servers:AmazonProvidedDNS. Untuk informasi selengkapnya, lihat set DHCP opsi di Panduan VPC Pengguna Amazon.

  • Jika node dalam grup node terkelola tidak terhubung ke cluster dalam waktu 15 menit, masalah kesehatan "NodeCreationFailure" akan dipancarkan dan status konsol akan disetel ke. Create failed Untuk Windows AMIsyang memiliki waktu peluncuran lambat, masalah ini dapat diselesaikan menggunakan peluncuran cepat.

Untuk mengidentifikasi dan memecahkan masalah penyebab umum yang mencegah node pekerja bergabung dengan cluster, Anda dapat menggunakan runbook. AWSSupport-TroubleshootEKSWorkerNode Untuk informasi selengkapnya, lihat AWSSupport-TroubleshootEKSWorkerNode di referensi buku runbook Automation AWS Systems Manager.

Tidak sah atau akses ditolak (kubectl)

Jika Anda menerima salah satu kesalahan berikut saat menjalankan kubectl perintah, maka Anda belum kubectl mengonfigurasi dengan benar untuk Amazon EKS atau kredensi untuk IAM prinsipal (peran atau pengguna) yang Anda gunakan jangan dipetakan ke Kubernetes nama pengguna yang memiliki izin yang cukup untuk Kubernetes objek di EKS cluster Amazon Anda.

  • could not get token: AccessDenied: Access denied

  • error: You must be logged in to the server (Unauthorized)

  • error: the server doesn’t have a resource type "svc"

Ini bisa disebabkan oleh salah satu alasan berikut:

  • Cluster dibuat dengan kredensi untuk satu IAM prinsipal dan kubectl dikonfigurasi untuk menggunakan kredensi untuk prinsipal yang berbeda. IAM Untuk mengatasi hal ini, perbarui kube config file Anda untuk menggunakan kredensional yang membuat klaster. Untuk informasi selengkapnya, lihat Connect kubectl ke EKS cluster dengan membuat file kubeconfig.

  • Jika klaster Anda memenuhi persyaratan platform minimum di bagian prasyarat Pemberian Izin IAM akses pengguna ke Kubernetes dengan entri EKS akses Grant IAM user akses ke Kubernetes dengan entri akses, entri EKS akses tidak ada dengan prinsipal Anda. IAM Jika ada, itu tidak memiliki yang diperlukan Kubernetes nama grup ditentukan untuk itu, atau tidak memiliki kebijakan akses yang tepat terkait dengannya. Untuk informasi selengkapnya, lihat Pemberian Izin IAM akses pengguna ke Kubernetes dengan entri EKS akses.

  • Jika klaster Anda tidak memenuhi persyaratan platform minimum di Pemberian Izin IAM akses pengguna ke Kubernetes dengan entri EKS akses Grant IAM user akses ke Kubernetes dengan entri EKS akses, entri dengan IAM prinsipal Anda tidak ada di. aws-auth ConfigMap Jika ada, itu tidak dipetakan ke Kubernetes nama grup yang terikat pada Kubernetes Roleatau ClusterRole dengan izin yang diperlukan. Untuk informasi lebih lanjut tentang Kubernetes objek otorisasi berbasis peran (RBAC), lihat Menggunakan RBAC otorisasi di Kubernetes dokumentasi. Anda dapat melihat aws-auth ConfigMap entri Anda saat ini dengan mengganti my-cluster dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi: eksctl get iamidentitymapping --cluster my-cluster. If an entry for with the ARN of your IAM principal isn’t in the ConfigMap, enter eksctl create iamidentitymapping --help in your terminal to learn how to create one.

Jika Anda menginstal dan mengkonfigurasi AWS CLI, Anda dapat mengonfigurasi IAM kredensional yang Anda gunakan. Untuk informasi selengkapnya, lihat Mengkonfigurasi AWS CLI dalam Panduan Pengguna Antarmuka Baris AWS Perintah. Anda juga dapat mengonfigurasi kubectl untuk menggunakan IAM peran, jika Anda mengambil IAM peran untuk mengakses Kubernetes objek di cluster Anda. Untuk informasi selengkapnya, lihat Connect kubectl ke EKS cluster dengan membuat file kubeconfig.

hostname doesn’t match

Versi Python sistem Anda harus 2.7.9 atau lebih baru. Jika tidak, Anda menerima hostname doesn’t match kesalahan dengan AWS CLI panggilan ke AmazonEKS. Untuk informasi selengkapnya, lihat Apa itu kesalahan “nama host tidak cocok”? di Python Permintaan Pertanyaan yang Sering Diajukan.

getsockopt: no route to host

Docker berjalan dalam 172.17.0.0/16 CIDR kisaran di EKS cluster Amazon. Kami menyarankan agar VPC subnet klaster Anda tidak tumpang tindih dengan rentang ini. Jika tidak, Anda akan menerima kesalahan berikut:

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host

Instances failed to join the Kubernetes cluster

Jika Anda menerima kesalahan Instances failed to join the Kubernetes cluster dalam AWS Management Console, pastikan bahwa akses endpoint pribadi kluster diaktifkan, atau bahwa Anda telah mengonfigurasi CIDR blok dengan benar untuk akses titik akhir publik. Untuk informasi selengkapnya, lihat Kontrol akses jaringan ke titik akhir API server cluster.

Kode kesalahan grup node terkelola

Jika grup node terkelola Anda mengalami masalah kesehatan perangkat keras, Amazon EKS mengembalikan kode kesalahan untuk membantu Anda mendiagnosis masalah tersebut. Pemeriksaan kesehatan ini tidak mendeteksi masalah perangkat lunak karena didasarkan pada pemeriksaan EC2 kesehatan Amazon. Daftar berikut menjelaskan kode kesalahan.

AccessDenied

Amazon EKS atau satu atau beberapa node terkelola Anda gagal mengautentikasi atau mengotorisasi dengan Anda Kubernetes APIserver cluster. Untuk informasi lebih lanjut tentang menyelesaikan penyebab umum, lihatMemperbaiki penyebab umum AccessDenied kesalahan untuk grup node terkelola. Privat Windows AMIsjuga dapat menyebabkan kode kesalahan ini di samping pesan Not authorized for images kesalahan. Untuk informasi selengkapnya, lihat Not authorized for images.

AmiIdNotFound

Kami tidak dapat menemukan AMI ID yang terkait dengan template peluncuran Anda. Pastikan bahwa AMI ada dan dibagikan dengan akun Anda.

AutoScalingGroupNotFound

Kami tidak dapat menemukan grup Auto Scaling yang terkait dengan grup node terkelola. Anda dapat membuat ulang grup Auto Scaling dengan pengaturan yang sama untuk memulihkan.

ClusterUnreachable

Amazon EKS atau satu atau beberapa node terkelola Anda tidak dapat berkomunikasi dengan Anda Kubernetes APIserver cluster. Ini dapat terjadi jika ada gangguan jaringan atau jika API server menghentikan waktu pemrosesan permintaan.

Ec2 SecurityGroupNotFound

Kami tidak dapat menemukan grup keamanan cluster untuk cluster. Anda harus membuat ulang klaster Anda.

Ec2 SecurityGroupDeletionFailure

Kami tidak dapat menghapus grup keamanan akses jarak jauh untuk grup node terkelola Anda. Menghapus dependensi dari grup keamanan.

Ec2 LaunchTemplateNotFound

Kami tidak dapat menemukan template EC2 peluncuran Amazon untuk grup node terkelola Anda. Anda harus membuat ulang grup node Anda untuk memulihkan.

Ec2 LaunchTemplateVersionMismatch

Versi template EC2 peluncuran Amazon untuk grup node terkelola Anda tidak cocok dengan versi yang EKS dibuat Amazon. Anda mungkin dapat kembali ke versi yang EKS dibuat Amazon untuk dipulihkan.

IamInstanceProfileNotFound

Kami tidak dapat menemukan profil IAM instance untuk grup node terkelola Anda. Anda mungkin dapat membuat ulang profil instans dengan pengaturan yang sama untuk memulihkan.

IamNodeRoleNotFound

Kami tidak dapat menemukan IAM peran untuk grup node terkelola Anda. Anda mungkin dapat membuat ulang IAM peran dengan pengaturan yang sama untuk memulihkan.

AsgInstanceLaunchFailures

Grup Auto Scaling Anda mengalami kegagalan saat mencoba meluncurkan instance.

NodeCreationFailure

Instans yang diluncurkan tidak dapat mendaftar dengan EKS kluster Amazon Anda. Penyebab umum kegagalan ini adalah izin IAM peran IAMPeran EKS simpul Amazon node yang tidak mencukupi atau kurangnya akses internet keluar untuk node. Node Anda harus memenuhi salah satu dari persyaratan berikut:

InstanceLimitExceeded

AWS Akun Anda tidak dapat meluncurkan instance lagi dari jenis instans yang ditentukan. Anda mungkin dapat meminta peningkatan batas EC2 instans Amazon untuk dipulihkan.

InsufficientFreeAddresses

Satu atau beberapa subnet yang terkait dengan grup node terkelola Anda tidak memiliki cukup alamat IP yang tersedia untuk node baru.

InternalFailure

Kesalahan ini biasanya disebabkan oleh masalah sisi EKS server Amazon.

Penyebab paling umum kesalahan AccessDenied saat melakukan pengoperasian pada grup simpul yang terkelola adalah hilangnya eks:node-manager ClusterRole atau ClusterRoleBinding. Amazon EKS menyiapkan sumber daya ini di klaster Anda sebagai bagian dari orientasi dengan grup node terkelola, dan ini diperlukan untuk mengelola grup node.

ClusterRole mungkin berubah seiring berjalannya waktu, tetapi seharusnya terlihat serupa dengan contoh berikut:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create

ClusterRoleBinding mungkin berubah seiring berjalannya waktu, tetapi seharusnya terlihat serupa dengan contoh berikut:

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Verifikasi bahwa eks:node-manager ClusterRole ada.

kubectl describe clusterrole eks:node-manager

Jika ada, membandingkan output dengan contoh ClusterRole sebelumnya.

Verifikasi bahwa eks:node-manager ClusterRoleBinding ada.

kubectl describe clusterrolebinding eks:node-manager

Jika ada, membandingkan output dengan contoh ClusterRoleBinding sebelumnya.

Jika Anda telah mengidentifikasi yang hilang atau rusak ClusterRole atau ClusterRoleBinding sebagai penyebab AcessDenied kesalahan saat meminta operasi grup node terkelola, Anda dapat memulihkannya. Simpan konten berikut ke file bernama eks-node-manager-role.yaml.

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Terapkan file.

kubectl apply -f eks-node-manager-role.yaml

Coba lagi mengoperasikan grup simpul untuk melihat apakah itu menyelesaikan masalah Anda.

Not authorized for images

Salah satu penyebab potensial pesan Not authorized for images kesalahan adalah menggunakan Amazon pribadi EKS Windows AMIuntuk meluncurkan Windows kelompok simpul terkelola. Setelah merilis baru Windows AMIs, AWS membuat AMIs yang lebih tua dari 4 bulan pribadi, yang membuat mereka tidak lagi dapat diakses. Jika grup node terkelola Anda menggunakan private Windows AMI, pertimbangkan untuk Memperbarui grup node terkelola untuk klaster Anda memperbarui grup node terkelola Windows Anda. Meskipun kami tidak dapat menjamin bahwa kami dapat menyediakan akses ke AMIs yang telah dibuat pribadi, Anda dapat meminta akses dengan mengajukan tiket ke AWS Support. Untuk informasi selengkapnya, lihat Patch di Panduan EC2 Pengguna Amazon.

Node dalam NotReady keadaan

Jika node Anda memasuki NotReady status, ini mungkin menunjukkan bahwa node tidak sehat dan tidak tersedia untuk menjadwalkan baru Pods. Hal ini dapat terjadi karena berbagai alasan, seperti node kekurangan sumber daya yang cukup untukCPU, memori, atau ruang disk yang tersedia.

Untuk Amazon EKS dioptimalkan Windows AMIs, tidak ada reservasi untuk sumber daya komputasi yang ditentukan secara default dalam kubelet konfigurasi. Untuk membantu mencegah masalah sumber daya, Anda dapat mencadangkan sumber daya komputasi untuk proses sistem kubelet dengan menyediakan nilai konfigurasi untuk kube-reserved dan/atau system-reserved. Anda melakukan ini menggunakan parameter -KubeletExtraArgs baris perintah dalam skrip bootstrap. Untuk informasi selengkapnya, lihat Reserve Compute Resources for System Daemon di Kubernetes dokumentasi dan Parameter konfigurasi skrip bootstrap dalam panduan pengguna ini.

CNIalat pengumpulan log

Bagian Amazon VPC CNI plugin for Kubernetes memiliki skrip pemecahan masalah sendiri yang tersedia di node di. /opt/cni/bin/aws-cni-support.sh Anda dapat menggunakan skrip untuk mengumpulkan log diagnostik untuk kasus dukungan dan pemecahan masalah umum.

Menggunakan perintah berikut ini untuk menjalankan skrip di simpul Anda:

sudo bash /opt/cni/bin/aws-cni-support.sh
catatan

Jika skrip tidak ada di lokasi itu, maka CNI penampung gagal dijalankan. Anda dapat mengunduh dan menjalankan skrip secara manual dengan perintah berikut:

curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh

Skrip mengumpulkan informasi diagnostik berikut. CNIVersi yang telah Anda gunakan bisa lebih awal dari versi skrip.

This is version 0.6.1. New versions can be found at https://github.com/awslabs/amazon-eks-ami Trying to collect common operating system logs... Trying to collect kernel logs... Trying to collect mount points and volume information... Trying to collect SELinux status... Trying to collect iptables information... Trying to collect installed packages... Trying to collect active system services... Trying to collect Docker daemon information... Trying to collect kubelet information... Trying to collect L-IPAMD information... Trying to collect sysctls information... Trying to collect networking information... Trying to collect CNI configuration information... Trying to collect running Docker containers and gather container data... Trying to collect Docker daemon logs... Trying to archive gathered information... Done... your bundled logs are located in /var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

Informasi diagnostik dikumpulkan dan disimpan di:

/var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1.tar.gz

Jaringan waktu aktif kontainer belum siap

Anda mungkin mendapatkan kesalahan Container runtime network not ready dan otorisasi kesalahan yang mirip dengan berikut ini:

4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized 4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized

Ini dapat terjadi karena salah satu alasan berikut:

  1. Anda juga tidak memiliki aws-auth ConfigMap di klaster Anda atau tidak menyertakan entri untuk IAM peran yang Anda konfigurasikan dengan node Anda.

    Untuk mengatasi masalah ini, lihat entri yang ada di Anda ConfigMap dengan mengganti my-cluster dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi: eksctl get iamidentitymapping --cluster my-cluster. If you receive an error message from the command, it might be because your cluster doesn’t have an aws-auth ConfigMap. The following command adds an entry to the ConfigMap. If the ConfigMap doesn’t exist, the command also creates it. Replace 111122223333 with the AWS account ID for the IAM role and myAmazonEKSNodeRole with the name of your node’s role.

    eksctl create iamidentitymapping --cluster my-cluster \ --arn arn:aws: iam::111122223333:role/myAmazonEKSNodeRole --group system:bootstrappers,system:nodes \ --username system:node:{{EC2PrivateDNSName}}

    ARNPeran yang Anda tentukan tidak dapat menyertakan jalur selain/. Misalnya, jika nama peran Andadevelopment/apps/my-role, Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    jalan lain dari/. Misalnya, jika nama peran Andadevelopment/apps/my-role, Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    selain/. Misalnya, jika nama peran Anda adalahdevelopment/apps/my-role, Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    /. Misalnya, jika nama peran Anda adalahdevelopment/apps/my-role, Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    . Misalnya, jika nama peran Anda adalahdevelopment/apps/my-role, Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    development/apps/my-role, Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    , Anda harus mengubahnya menjadi my-role saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    my-rolesaat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

    saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).

  2. Node Anda yang dikelola sendiri berada dalam klaster dengan versi platform pada versi minimum yang tercantum dalam prasyarat dalam Pemberian Izin IAM akses pengguna ke Kubernetes dengan entri EKS akses Memberi akses IAM pengguna ke Kubernetes dengan topik entri EKS akses, tetapi entri tidak tercantum dalam aws-auth ConfigMap (lihat item sebelumnya) untuk peran node atau entri akses tidak ada untuk IAM peran tersebut. Untuk mengatasi masalah ini, lihat entri akses yang ada dengan mengganti my-cluster dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi: aws eks list-access-entries --cluster-name my-cluster. The following command adds an access entry for the node’s IAM role. Replace 111122223333 with the AWS account ID for the IAM role and myAmazonEKSNodeRole with the name of your node’s role. If you have a Windows node, replace EC2_Linux with EC2_Windows. Make sure that you specify the node IAM role ARN (not the instance profile ARN).

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws: iam::111122223333:role/myAmazonEKSNodeRole --type EC2_Linux

TLSbatas waktu jabat tangan

Ketika sebuah node tidak dapat membuat koneksi ke titik akhir API server publik, Anda mungkin melihat kesalahan yang mirip dengan kesalahan berikut.

server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""

kubeletProses ini akan terus respawn dan menguji endpoint server. API Kesalahan juga dapat terjadi sementara selama prosedur yang performa update klaster bergulir di bidang kendali, seperti perubahan konfigurasi atau versi update.

Untuk mengatasi masalah itu, memeriksa tabel rute dan grup keamanan untuk memastikan bahwa lalu lintas dari simpul dapat mencapai titik akhir publik.

InvalidClientTokenId

Jika Anda menggunakan IAM peran untuk akun layanan untuk Pod atau DaemonSet diterapkan ke cluster di AWS Wilayah Tiongkok, dan belum menyetel variabel AWS_DEFAULT_REGION lingkungan dalam spesifikasi, Pod atau DaemonSet mungkin menerima kesalahan berikut:

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

Untuk mengatasi masalah ini, Anda perlu menambahkan variabel AWS_DEFAULT_REGION lingkungan ke Pod atau DaemonSet spec, seperti yang ditunjukkan pada contoh berikut Pod spesifikasi.

apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "region-code"

Grup node harus cocok Kubernetes versi sebelum memutakhirkan bidang kontrol

Sebelum Anda meng-upgrade pesawat kontrol ke yang baru Kubernetes versi, versi minor dari node terkelola dan Fargate di cluster Anda harus sama dengan versi versi pesawat kontrol Anda saat ini. Amazon EKS update-cluster-version API menolak permintaan hingga Anda memutakhirkan semua node yang EKS dikelola Amazon ke versi cluster saat ini. Amazon EKS menyediakan APIs untuk memutakhirkan node terkelola. Untuk informasi tentang memutakhirkan grup node terkelola Kubernetes versi, lihatMemperbarui grup node terkelola untuk klaster Anda. Untuk memutakhirkan versi simpul Fargate, hapus pod yang diwakili oleh node dan menerapkan kembali pod setelah Anda meng-upgrade pesawat kontrol Anda. Untuk informasi selengkapnya, lihat Perbarui klaster yang ada ke versi Kubernetes baru.

Saat meluncurkan banyak node, ada Too Many Requests kesalahan

Jika Anda meluncurkan banyak node secara bersamaan, Anda mungkin melihat pesan kesalahan di log eksekusi data EC2 pengguna Amazon yang mengatakanToo Many Requests. Ini dapat terjadi karena bidang kontrol sedang kelebihan beban dengan describeCluster panggilan. Kelebihan beban mengakibatkan pelambatan, node gagal menjalankan skrip bootstrap, dan node gagal bergabung dengan cluster sama sekali.

Pastikan bahwa--apiserver-endpoint,--b64-cluster-ca, dan --dns-cluster-ip argumen sedang diteruskan ke skrip bootstrap node. Saat memasukkan argumen ini, skrip bootstrap tidak perlu melakukan describeCluster panggilan, yang membantu mencegah bidang kontrol kelebihan beban. Untuk informasi selengkapnya, lihat Berikan data pengguna untuk meneruskan argumen ke bootstrap.sh file yang disertakan dengan Amazon yang EKS dioptimalkan Linux/Bottlerocket AMI.

HTTP401 respons kesalahan tidak sah pada Kubernetes APIpermintaan server

Anda melihat kesalahan ini jika Pod’s token akun layanan telah kedaluwarsa pada sebuah cluster.

EKSCluster Amazon Anda Kubernetes APIserver menolak permintaan dengan token yang lebih tua dari 90 hari. Di sebelumnya Kubernetes versi, token tidak memiliki kedaluwarsa. Ini berarti bahwa klien yang mengandalkan token ini harus menyegarkannya dalam waktu satu jam. Untuk mencegah Kubernetes APIserver dari menolak permintaan Anda karena token tidak valid, SDK versi klien Kubernetes yang digunakan oleh beban kerja Anda harus sama, atau lebih lambat dari versi berikut:

  • Versi Go 0.15.7 dan yang lebih baru

  • Versi 12.0.0 Python dan yang lebih baru

  • Versi Java 9.0.0 dan yang lebih baru

  • JavaScript versi 0.10.3 dan yang lebih baru

  • Cabang Ruby master

  • Versi Haskell 0.3.0.0

  • C# versi 7.0.5 dan yang lebih baru

Anda dapat mengidentifikasi semua yang ada Pods di cluster Anda yang menggunakan token basi. Untuk informasi selengkapnya, lihat Token akun layanan.

Versi EKS platform Amazon lebih dari dua versi di belakang versi platform saat ini

Ini dapat terjadi ketika Amazon EKS tidak dapat memperbarui versi Lihat versi EKS platform Amazon untuk setiap versi Kubernetes platform cluster Anda secara otomatis. Meskipun ada banyak penyebab untuk ini, beberapa penyebab umum mengikuti. Jika salah satu dari masalah ini berlaku untuk cluster Anda, mungkin masih berfungsi, versi platformnya tidak akan diperbarui oleh AmazonEKS.

Masalah

IAMPeran IAMPeran EKS cluster Amazon cluster telah dihapus — Peran ini ditentukan ketika cluster dibuat. Anda dapat melihat peran mana yang ditentukan dengan perintah berikut. Ganti my-cluster dengan nama cluster Anda.

aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2

Contoh output adalah sebagai berikut.

eksClusterRole
Solusi

Buat IAM peran IAMPeran EKS cluster Amazon cluster baru dengan nama yang sama.

Masalah

Subnet yang ditentukan selama pembuatan cluster telah dihapus — Subnet yang digunakan dengan cluster ditentukan selama pembuatan cluster. Anda dapat melihat subnet mana yang ditentukan dengan perintah berikut. Ganti my-cluster dengan nama cluster Anda.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.subnetIds

Contoh output adalah sebagai berikut.

[ "subnet-EXAMPLE1", "subnet-EXAMPLE2" ]
Solusi

Konfirmasikan apakah subnet IDs ada di akun Anda.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" --query "Subnets[*].SubnetId"

Contoh output adalah sebagai berikut.

[ "subnet-EXAMPLE3", "subnet-EXAMPLE4" ]

Jika subnet yang IDs dikembalikan dalam output tidak cocok dengan subnet IDs yang ditentukan saat cluster dibuat, maka jika Anda EKS ingin Amazon memperbarui cluster, Anda perlu mengubah subnet yang digunakan oleh cluster. Ini karena jika Anda menentukan lebih dari dua subnet saat membuat klaster, Amazon EKS secara acak memilih subnet yang Anda tentukan untuk membuat antarmuka jaringan elastis baru. Antarmuka jaringan ini memungkinkan bidang kontrol untuk berkomunikasi dengan node Anda. Amazon EKS tidak akan memperbarui cluster jika subnet yang dipilihnya tidak ada. Anda tidak memiliki kendali atas subnet mana yang Anda tentukan pada pembuatan klaster yang EKS dipilih Amazon untuk membuat antarmuka jaringan baru.

Ketika Anda memulai Kubernetes pembaruan versi untuk cluster Anda, pembaruan dapat gagal karena alasan yang sama.

Masalah

Grup keamanan yang ditentukan selama pembuatan klaster telah dihapus - Jika Anda menentukan grup keamanan selama pembuatan klaster, Anda dapat melihatnya IDs dengan perintah berikut. Ganti my-cluster dengan nama cluster Anda.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.securityGroupIds

Contoh output adalah sebagai berikut.

[ "sg-EXAMPLE1" ]

Jika [] dikembalikan, maka tidak ada grup keamanan yang ditentukan saat cluster dibuat dan grup keamanan yang hilang bukanlah masalahnya. Jika grup keamanan dikembalikan, maka konfirmasikan bahwa grup keamanan ada di akun Anda.

Solusi

Konfirmasikan apakah grup keamanan ini ada di akun Anda.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$vpc_id" --query "SecurityGroups[*].GroupId"

Contoh output adalah sebagai berikut.

[ "sg-EXAMPLE2" ]

Jika grup keamanan yang IDs ditampilkan dalam output tidak cocok dengan grup keamanan IDs yang ditentukan saat kluster dibuat, maka jika Anda EKS ingin Amazon memperbarui klaster, Anda perlu mengubah grup keamanan yang digunakan oleh cluster. Amazon EKS tidak akan memperbarui klaster jika grup keamanan IDs yang ditentukan pada pembuatan klaster tidak ada.

Ketika Anda memulai Kubernetes pembaruan versi untuk cluster Anda, pembaruan dapat gagal karena alasan yang sama.

  • Anda tidak memiliki setidaknya enam (meskipun kami merekomendasikan 16) alamat IP yang tersedia di setiap subnet yang Anda tentukan saat Anda membuat cluster Anda. Jika Anda tidak memiliki cukup alamat IP yang tersedia di subnet, Anda perlu membebaskan alamat IP di subnet atau Anda perlu mengubah subnet yang digunakan oleh cluster untuk menggunakan subnet dengan alamat IP yang cukup tersedia.

  • Anda mengaktifkan enkripsi Enkripsi rahasia Kubernetes dengan klaster yang ada AWS KMS rahasia saat membuat klaster dan AWS KMS kunci yang Anda tentukan telah dihapus. Jika Anda EKS ingin Amazon memperbarui cluster, Anda perlu membuat cluster baru

Kesehatan cluster FAQs dan kode kesalahan dengan jalur resolusi

Amazon EKS mendeteksi masalah dengan EKS klaster dan infrastruktur klaster Anda dan menyimpannya di kesehatan klaster. Anda dapat mendeteksi, memecahkan masalah, dan mengatasi masalah klaster lebih cepat dengan bantuan informasi kesehatan klaster. Ini memungkinkan Anda untuk membuat lingkungan aplikasi yang lebih aman dan up-to-date. Selain itu, mungkin tidak mungkin bagi Anda untuk meningkatkan ke versi yang lebih baru Kubernetes atau bagi Amazon EKS untuk menginstal pembaruan keamanan pada klaster yang terdegradasi sebagai akibat dari masalah dengan infrastruktur atau konfigurasi cluster yang diperlukan. Amazon EKS dapat memakan waktu 3 jam untuk mendeteksi masalah atau mendeteksi bahwa masalah telah teratasi.

Kesehatan EKS cluster Amazon adalah tanggung jawab bersama antara Amazon EKS dan penggunanya. Anda bertanggung jawab atas infrastruktur prasyarat peran IAM dan VPC subnet Amazon, serta infrastruktur lain yang diperlukan, yang harus disediakan terlebih dahulu. Amazon EKS mendeteksi perubahan dalam konfigurasi infrastruktur ini dan cluster.

Untuk mengakses kesehatan klaster Anda di EKS konsol Amazon, cari bagian yang disebut Masalah Kesehatan di tab Ikhtisar halaman detail EKS klaster Amazon. Data ini juga akan tersedia dengan memanggil DescribeCluster tindakan di EKSAPI, misalnya dari dalam Antarmuka Baris AWS Perintah.

Mengapa saya harus menggunakan fitur ini?

Anda akan mendapatkan peningkatan visibilitas ke dalam kesehatan EKS cluster Amazon Anda, dengan cepat mendiagnosis dan memperbaiki masalah apa pun, tanpa perlu menghabiskan waktu debugging atau membuka AWS kasus dukungan. Misalnya: Anda secara tidak sengaja menghapus subnet untuk EKS cluster Amazon, Amazon EKS tidak akan dapat membuat antarmuka jaringan lintas akun dan Kubernetes AWS CLIperintah seperti kubectl exec atau kubectl log. Ini akan gagal dengan kesalahan: Error from server: error dialing backend: remote error: tls: internal error. Sekarang Anda akan melihat masalah EKS kesehatan Amazon yang mengatakan:subnet-da60e280 was deleted: could not create network interface.

Bagaimana fitur ini berhubungan atau bekerja dengan AWS layanan lain?

IAMperan dan VPC subnet Amazon adalah dua contoh infrastruktur prasyarat yang mendeteksi masalah kesehatan klaster. Fitur ini akan mengembalikan informasi terperinci jika sumber daya tersebut tidak dikonfigurasi dengan benar.

Apakah cluster dengan masalah kesehatan menimbulkan biaya?

Ya, setiap EKS cluster Amazon ditagih dengan EKS harga Amazon standar. Fitur kesehatan cluster tersedia tanpa biaya tambahan.

Apakah fitur ini berfungsi dengan EKS cluster Amazon di AWS Outposts?

Ya, masalah klaster terdeteksi untuk EKS cluster di AWS Cloud termasuk cluster yang diperluas di Outposts dan cluster lokal di AWS Outposts. AWS Kesehatan cluster tidak mendeteksi masalah dengan Amazon EKS Anywhere atau Amazon EKS Distro (EKS-D).

Bisakah saya mendapatkan pemberitahuan ketika masalah baru terdeteksi?

Ya. AWS mengirimkan email dan pemberitahuan Personal Health Dashboard ketika masalah Kesehatan Cluster baru terdeteksi.

Apakah konsol memberi saya peringatan untuk masalah kesehatan?

Ya, setiap cluster dengan masalah kesehatan akan menyertakan spanduk di bagian atas konsol.

Dua kolom pertama adalah apa yang dibutuhkan untuk nilai API respons. Bidang ketiga dari ClusterIssue objek Kesehatan adalah resourceIds, pengembaliannya tergantung pada jenis masalah.

Kode Pesan ResourceIds Cluster Dapat Dipulihkan?

SUBNET_NOT_FOUND

Kami tidak dapat menemukan satu atau lebih subnet yang saat ini terkait dengan cluster Anda. Hubungi Amazon EKS update-cluster-config APIuntuk memperbarui subnet.

Id Subnet

Ya

SECURITY_GROUP_NOT_FOUND

Kami tidak dapat menemukan satu atau beberapa grup keamanan yang saat ini terkait dengan klaster Anda. Panggil Amazon EKS update-cluster-config API untuk memperbarui grup keamanan

Id grup keamanan

Ya

IP_NOT_AVAILABLE

Satu atau beberapa subnet yang terkait dengan cluster Anda tidak memiliki cukup alamat IP yang tersedia bagi Amazon EKS untuk melakukan operasi manajemen klaster. Kosongkan alamat di subnet, atau kaitkan subnet yang berbeda ke klaster Anda menggunakan Amazon. EKS update-cluster-config API

Id Subnet

Ya

VPC_NOT_FOUND

Kami tidak dapat menemukan yang VPC terkait dengan cluster Anda. Anda harus menghapus dan membuat ulang cluster Anda.

VPCid

Tidak

ASSUME_ROLE_ACCESS_DENIED

Cluster Anda tidak menggunakan Amazon EKS service-linked-role. Kami tidak dapat mengambil peran yang terkait dengan klaster Anda untuk melakukan operasi EKS manajemen Amazon yang diperlukan. Periksa peran yang ada dan memiliki kebijakan kepercayaan yang diperlukan.

IAMPeran cluster

Ya

PERMISSION_ACCESS_DENIED

Cluster Anda tidak menggunakan Amazon EKS service-linked-role. Peran yang terkait dengan klaster Anda tidak memberikan izin yang cukup bagi Amazon EKS untuk melakukan operasi manajemen yang diperlukan. Periksa kebijakan yang dilampirkan pada peran klaster dan jika ada kebijakan penolakan terpisah yang diterapkan.

IAMPeran cluster

Ya

ASSUME_ROLE_ACCESS_DENIED_USING_SLR

Kami tidak dapat mengasumsikan manajemen EKS cluster Amazon service-linked-role. Periksa peran yang ada dan memiliki kebijakan kepercayaan yang diperlukan.

Amazon EKS service-linked-role

Ya

PERMISSION_ACCESS_DENIED_USING_SLR

Manajemen EKS klaster Amazon service-linked-role tidak memberikan izin yang cukup bagi Amazon EKS untuk melakukan operasi manajemen yang diperlukan. Periksa kebijakan yang dilampirkan pada peran klaster dan jika ada kebijakan penolakan terpisah yang diterapkan.

Amazon EKS service-linked-role

Ya

OPT_IN_REQUIRED

Akun Anda tidak memiliki langganan EC2 layanan Amazon. Perbarui langganan akun Anda di halaman pengaturan akun Anda.

N/A

Ya

STS_REGIONAL_ENDPOINT_DISABLED

Bagian STS titik akhir regional dinonaktifkan. Aktifkan titik akhir Amazon EKS untuk melakukan operasi manajemen klaster yang diperlukan.

N/A

Ya

KMS_KEY_DISABLED

AWS KMSKunci yang terkait dengan cluster Anda dinonaktifkan. Aktifkan kembali kunci untuk memulihkan cluster Anda.

Bagian KMS Key Arn

Ya

KMS_KEY_NOT_FOUND

Kami tidak dapat menemukan AWS KMS kunci yang terkait dengan cluster Anda. Anda harus menghapus dan membuat ulang cluster.

Bagian KMS Key ARN

Tidak

KMS_GRANT_REVOKED

Hibah untuk AWS KMS Kunci yang terkait dengan cluster Anda dicabut. Anda harus menghapus dan membuat ulang cluster.

Bagian KMS Key Arn

Tidak