View a markdown version of this page

AWSSupport-TroubleshootEKSDNSFailure - AWS Systems Manager Referensi Buku Runbook Otomasi

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

AWSSupport-TroubleshootEKSDNSFailure

Deskripsi

AWSSupport-TroubleshootEKSDNSFailureRunbook membantu memecahkan masalah dengan pod dan konfigurasi CoreDNS di Amazon Elastic Kubernetes Service (Amazon EKS) saat aplikasi atau pod mengalami kegagalan resolusi DNS. Runbook memvalidasi pengaturan DNS VPC, memeriksa penerapan CoreDNS dan, memeriksa konfigurasi Horizontal Pod Autoscaler (HPA) ConfigMap, mengumpulkan log CoreDNS, dan melakukan pemeriksaan resolusi DNS pada node pekerja. Secara opsional, instance Amazon Elastic Compute Cloud yang menyelidik dapat dibuat di subnet yang sama dengan node pekerja bermasalah untuk melakukan pemeriksaan resolusi DNS tanpa memerlukan akses langsung ke node.

penting

Mode otentikasi klaster Amazon EKS harus disetel ke API atauAPI_AND_CONFIG_MAP. Runbook ini menerapkan fungsi ( AWS Lambda Lambda) sebagai proxy untuk membuat panggilan API Kubernetes yang diautentikasi dan membersihkan semua sumber daya yang dibuat di akhir eksekusi.

Jalankan Otomasi ini (konsol)

Jenis dokumen

Otomatisasi

Pemilik

Amazon

Platform

Linux,macOS, Windows

Parameter

  • AutomationAssumeRole

    Jenis: AWS::IAM::Role: :Arn

    Deskripsi: (Opsional) Nama Sumber Daya Amazon (ARN) peran AWS Identity and Access Management (IAM) yang memungkinkan Otomasi Systems Manager untuk melakukan tindakan atas nama Anda. Jika tidak ada peran yang ditentukan, Systems Manager Automation menggunakan izin pengguna yang memulai runbook ini.

  • EksClusterName

    Tipe: String

    Deskripsi: (Wajib) Nama kluster Amazon EKS target.

  • DnsName

    Tipe: String

    Standar: amazon.com

    Deskripsi: (Opsional) Sufiks domain rintisan untuk nama domain yang gagal diselesaikan oleh aplikasi atau pod.

  • ProblematicNodeInstanceId

    Jenis: AWS::EC2::Instance: :Id

    Deskripsi: (Opsional) ID instance node pekerja tempat aplikasi yang mengalami kesalahan resolusi DNS sedang berjalan. Saat disediakan, runbook akan membuat instans Amazon EC2 probing di subnet yang sama untuk melakukan pemeriksaan resolusi DNS. Gunakan parameter ini jika node pekerja tidak berada dalam subnet publik atau jika menginstal bind-utils pada node pekerja tidak diizinkan.

  • CoreDnsNamespace

    Tipe: String

    Default: kube-system

    Deskripsi: (Opsional) Namespace Kubernetes untuk pod CoreDNS.

  • S3 BucketName

    Jenis: AWS::S3::Bucket: :Nama

    Deskripsi: (Opsional) Nama bucket Amazon Simple Storage Service tempat log pemecahan masalah CoreDNS diunggah.

  • LambdaRoleArn

    Jenis: AWS::IAM::Role: :Arn

    Deskripsi: (Opsional) ARN peran IAM untuk fungsi proxy Lambda. Jika tidak disediakan, buku runbook akan membuat peran yang diberi nama Automation-K8sProxy-Role-<ExecutionId> dengan kebijakan yang AWSLambdaVPCAccessExecutionRole dikelola AWSLambdaBasicExecutionRole dan dikelola. Disarankan untuk memberikan peran Anda sendiri.

Izin IAM yang diperlukan

AutomationAssumeRoleParameter memerlukan tindakan berikut untuk menggunakan runbook dengan sukses.

  • eks:DescribeCluster

  • ec2:DescribeVpcs

  • ec2:DescribeInstances

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • cloudformation:CreateStack

  • cloudformation:DescribeStacks

  • cloudformation:DeleteStack

  • lambda:InvokeFunction

  • s3:GetBucketPublicAccessBlock

  • s3:GetBucketAcl

  • s3:PutObject

  • ssm:DescribeInstanceInformation

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:StartAutomationExecution

  • ssm:GetAutomationExecution

Langkah Dokumen

  1. AssertIfTargetClusterExists- Memverifikasi bahwa klaster Amazon EKS yang ditentukan EksClusterName ada dan berada dalam ACTIVE status. Jika cluster tidak ditemukan atau tidak aktif, runbook melompat ke. GenerateReport

  2. UpdateEksClusterExists- Menetapkan eksClusterExists variabel internal true untuk digunakan dalam pembuatan laporan.

  3. GetVpcDnsSettings- Mengambil enableDnsSupport dan enableDnsHostnames pengaturan untuk Amazon Virtual Private Cloud yang terkait dengan cluster Amazon EKS.

  4. BranchOnVpcDnsSettings- Memeriksa apakah kedua pengaturan DNS VPC diaktifkan. Jika salah satu dinonaktifkan, runbook melompat ke. GenerateReport Jika tidak, lanjutkan keDeployK8sAuthApisResources.

  5. DeployK8sAuthApisResources- Mengeksekusi AWSSupport-SetupK8sApiProxyForEKS untuk menerapkan fungsi Lambda sebagai proxy untuk membuat panggilan API Kubernetes yang diautentikasi ke cluster Amazon EKS.

  6. RetrieveCoreDNSDeployment- Mengambil informasi tentang penerapan CoreDNS, termasuk kesiapan pod, status container, dan kesiapan node yang menghosting pod CoreDNS. Juga mengambil IP cluster CoreDNS.

  7. RetrieveAndInspectCoreDNSConfigMap- Mengambil ConfigMap CoreDNS dari kluster Amazon EKS dan memeriksa masalah konfigurasi, termasuk pengaturan domain rintisan untuk domain yang ditentukan. DnsName

  8. ValidateHpaConfiguration- Memeriksa apakah Horizontal Pod Autoscaler (HPA) dikonfigurasi untuk penerapan CoreDNS di namespace yang ditentukan.

  9. CheckS3BucketPublicStatus- Memvalidasi bahwa bucket Amazon S3 yang ditentukan S3BucketName tidak mengizinkan akses baca atau tulis publik atau anonim.

  10. CollectLogToS3- Mengumpulkan log pod CoreDNS dan mengunggahnya ke bucket Amazon S3 yang ditentukan.

  11. BranchOnProblematicNodeInstanceId- Memeriksa ProblematicNodeInstanceId apakah disediakan dan node host CoreDNS ada. Jika kedua kondisi terpenuhi, lanjutkan keVerifyThatProblematicNodeInstanceBelongsToCluster. Jika tidak, cabang keBranchOnCoreDnsDeployment.

  12. VerifyThatProblematicNodeInstanceBelongsToCluster- Mengonfirmasi bahwa instance yang ditentukan ProblematicNodeInstanceId adalah node pekerja di cluster Amazon EKS.

  13. UpdateProblematicNodeInstanceStanding- Mengatur problematicNodeInstanceStanding variabel internal ketrue.

  14. GetProblematicInstanceDetails- Mengambil ID AMI, tipe instans, ID subnet, dan ID grup keamanan dari node pekerja bermasalah untuk digunakan saat membuat instance Amazon EC2 yang sedang diperiksa.

  15. CreateProbingInfrastructure- Membuat profil instans dan memeriksa instans Amazon EC2 melalui AWS CloudFormation tumpukan di subnet yang sama dengan node pekerja bermasalah. Tumpukan diberi namaAWSSupport-TroubleshootEKSDNSFailure-<ExecutionId>.

  16. GetProbingInstanceId- Mengambil ID instans Amazon EC2 probing dari CloudFormation output stack.

  17. WaitForProbingInstanceSSMAgentStateToBeOnline- Menunggu Agen Amazon EC2 Systems Manager pada instans Amazon EC2 yang sedang menyelidiki untuk Online melaporkan status sebelum melanjutkan.

  18. RetrieveCoreDNSPodsIPFromProblematicNode- Mengambil alamat IP pod CoreDNS seperti yang terlihat dari node pekerja bermasalah.

  19. PerformDNSResolutionOnProbingEC2Instance- Menjalankan pemeriksaan resolusi DNS pada instans Amazon EC2 probing menggunakan IP cluster dan IP pod CoreDNS.

  20. DeleteCloudFormationStack- Menghapus CloudFormation tumpukan yang membuat instans Amazon EC2 dan profil instans yang sedang diperiksa.

  21. UpdateCfnStackDeleted- Mengatur cfnStackDeleted variabel internal ketrue.

  22. BranchOnCoreDnsDeployment- Memeriksa ProblematicNodeInstanceId apakah tidak disediakan dan node host CoreDNS ada. Jika kedua kondisi terpenuhi, lanjutkan kePerformDNSResolutionOnCoreDnsWorkerNodes. Jika tidak, lanjutkan keCleanupK8sAuthenticationInfrastructure.

  23. BranchOnCoreDnsNodesExistForRunCommandSteps- Memeriksa apakah node host CoreDNS ada sebelum menjalankan langkah-langkah. aws:runCommand Jika tidak ada node (misalnya, ketika CoreDNS memiliki nol replika), lompat ke. CleanupK8sAuthenticationInfrastructure

  24. PerformDNSResolutionOnCoreDnsWorkerNodes- Menjalankan pemeriksaan resolusi DNS langsung pada node pekerja CoreDNS menggunakan IP cluster dan IP pod CoreDNS.

  25. VerifyNameserverMatchAndKubeProxyLogsAndIPTableEntries- Memverifikasi bahwa IP nameserver cocok dengan IP cluster, memeriksa akses pod kube-proxy ke server API, dan memvalidasi entri iptables kube-dns pada node pekerja CoreDNS.

  26. VerifyPPSThrottlingOnENIs- Memeriksa batas DNS packets-per-second (PPS) per Elastic Network Interface (ENI) pada node pekerja CoreDNS untuk mengidentifikasi potensi pelambatan.

  27. UpdateChecksOnNodes- Menetapkan checksOnNodes variabel internal true untuk menunjukkan bahwa pemeriksaan tingkat simpul dilakukan.

  28. CleanupK8sAuthenticationInfrastructure- Mengeksekusi AWSSupport-SetupK8sApiProxyForEKS dengan Cleanup operasi untuk menghapus fungsi proxy Lambda dan sumber daya terkait yang dibuat selama otomatisasi.

  29. UpdateK8sInfrastructreDeleted- Mengatur K8sInfrastructreDeleted variabel internal ketrue.

  30. CleanUpAllResources- Melakukan pembersihan komprehensif dari sumber daya yang tersisa, termasuk fungsi proxy CloudFormation stack dan Lambda, jika langkah pembersihan sebelumnya tidak berhasil diselesaikan.

  31. CollectOutputFromAllRunCommandSteps- Mengumpulkan dan mengkonsolidasikan output dari semua aws:runCommand langkah yang dijalankan selama otomatisasi.

  32. GenerateReport- Mengompilasi hasil dari semua langkah sebelumnya ke dalam laporan evaluasi komprehensif yang mencakup pengaturan DNS VPC, kesehatan penerapan CoreDNS, konfigurasi, ConfigMap konfigurasi HPA, status pengumpulan log, dan hasil pemeriksaan resolusi DNS.

Keluaran

GenerateReport.EvalReport- Laporan komprehensif dari semua pemeriksaan pemecahan masalah DNS yang dilakukan, termasuk temuan dan langkah-langkah perbaikan yang direkomendasikan.