全部产品
Search
文档中心

Container Service for Kubernetes:Praktik Terbaik untuk Layanan DNS

更新时间:Jul 02, 2025

Sistem Nama Domain (DNS) adalah layanan dasar dalam kluster Kubernetes. Jika pengaturan DNS klien tidak dikonfigurasi dengan benar atau jika Anda menggunakan kluster besar, timeout dan kegagalan resolusi DNS dapat terjadi. Topik ini menjelaskan praktik terbaik untuk mengonfigurasi layanan DNS di kluster Kubernetes guna membantu Anda menghindari masalah tersebut.

Prasyarat

Daftar Isi

Praktik terbaik dalam topik ini melibatkan klien dan server DNS:

Untuk informasi lebih lanjut tentang CoreDNS, lihat Dokumentasi Resmi CoreDNS.

Optimalkan Permintaan DNS

Permintaan DNS sering kali dikirimkan di Kubernetes. Sejumlah besar permintaan DNS dapat dioptimalkan atau dihindari. Anda dapat mengoptimalkan permintaan DNS dengan menggunakan salah satu metode berikut:

  • Gunakan Kumpulan Koneksi: Jika pod klien sering mengakses sebuah Service, kami sarankan Anda menggunakan kumpulan koneksi. Kumpulan koneksi dapat menyimpan koneksi ke Service upstream di memori, sehingga pod klien tidak perlu lagi mengirimkan permintaan DNS dan membuat koneksi TCP setiap kali mengakses Service.

  • Gunakan Caching DNS:

    • Jika Anda tidak dapat menggunakan kumpulan koneksi untuk menghubungkan pod klien ke Service, kami sarankan Anda menyimpan hasil resolusi DNS di sisi pod klien. Untuk informasi lebih lanjut, lihat Gunakan NodeLocal DNSCache untuk Mengoptimalkan Resolusi DNS.

    • Jika Anda tidak dapat menggunakan NodeLocal DNSCache, Anda dapat menggunakan Daemon Name Service Cache (NSCD) bawaan di kontainer. Untuk informasi lebih lanjut tentang cara menggunakan NSCD, lihat Gunakan NSCD di Kluster Kubernetes.

  • Optimalkan File resolv.conf: Karena penggunaan parameter ndots dan search dalam file resolv.conf, efisiensi resolusi DNS dipengaruhi oleh bagaimana Anda menentukan nama domain di kontainer. Untuk informasi lebih lanjut tentang parameter ndots dan search, lihat Kebijakan DNS dan Resolusi Nama Domain.

  • Optimalkan Pengaturan Nama Domain: Anda dapat menentukan nama domain yang perlu diakses oleh pod klien berdasarkan aturan berikut. Aturan ini membantu meminimalkan jumlah percobaan untuk menyelesaikan nama domain dan membuat layanan resolusi DNS lebih efisien.

    • Jika pod klien perlu mengakses Service di namespace yang sama, gunakan <service-name> sebagai nama domain. <service-name> menunjukkan nama Service.

    • Jika pod klien perlu mengakses Service di namespace lain, gunakan <service-name>.<namespace-name> sebagai nama domain. namespace-name menentukan namespace tempat Service berada.

    • Jika pod klien perlu mengakses nama domain eksternal, Anda dapat menentukan nama domain dalam format Fully Qualified Domain Name (FQDN) dengan menambahkan titik (.) ke nama domain. Ini menghindari pencarian DNS yang tidak valid yang disebabkan oleh penggabungan domain search dengan nama domain yang akan dicari. Misalnya, jika pod klien perlu mengakses www.aliyun.com, Anda dapat menentukan www.aliyun.com. sebagai nama domain.

Gunakan Gambar Kontainer yang Tepat

Implementasi musl libc bawaan dalam gambar kontainer Alpine berbeda dari glibc:

  • Alpine 3.3 dan versi sebelumnya tidak mendukung parameter search. Akibatnya, Anda tidak dapat menentukan domain pencarian atau menemukan Service.

  • musl libc memproses query yang dikirim ke server DNS yang ditentukan dalam file /etc/resolv.conf secara paralel. Akibatnya, NodeLocal DNSCache gagal mengoptimalkan resolusi DNS.

  • musl libc memproses query A dan AAAA yang menggunakan socket yang sama secara paralel. Ini menyebabkan kehilangan paket pada port conntrack di versi kernel sebelumnya.

Untuk informasi lebih lanjut, lihat musl libc.

Jika kontainer yang diterapkan di kluster Kubernetes menggunakan Alpine sebagai gambar dasar, nama domain mungkin tidak dapat diselesaikan karena penggunaan musl libc. Kami sarankan Anda mengganti gambar dengan gambar yang berbasis Debian atau CentOS.

Kurangi Dampak Buruk dari Timeout Resolusi DNS Sesekali yang Disebabkan oleh Cacat IPVS

Jika mode penyeimbangan beban kube-proxy diatur ke IPVS di kluster Anda, timeout resolusi DNS mungkin terjadi ketika pod CoreDNS diskalakan masuk atau dimulai ulang. Masalah ini disebabkan oleh bug kernel Linux. Untuk informasi lebih lanjut, lihat IPVS.

Anda dapat menggunakan metode berikut untuk mengurangi dampak buruk dari masalah ini:

Gunakan NodeLocal DNSCache untuk Mengoptimalkan Resolusi DNS

Container Service for Kubernetes (ACK) memungkinkan Anda menerapkan NodeLocal DNSCache untuk meningkatkan stabilitas dan kinerja penemuan layanan. NodeLocal DNSCache diimplementasikan sebagai DaemonSet dan menjalankan agen caching DNS pada node kluster untuk meningkatkan efisiensi resolusi DNS untuk kluster ACK.

Untuk informasi lebih lanjut tentang NodeLocal DNSCache dan cara menerapkannya di kluster ACK, lihat Konfigurasikan NodeLocal DNSCache.

Gunakan Versi CoreDNS yang Tepat

CoreDNS kompatibel mundur dengan Kubernetes. Kami sarankan Anda menggunakan versi stabil baru CoreDNS. Anda dapat menginstal, memperbarui, dan mengonfigurasi CoreDNS di halaman Add-ons dari konsol ACK. Jika status komponen CoreDNS menunjukkan bahwa CoreDNS dapat diperbarui, kami sarankan Anda memperbarui komponen selama jam-jam sepi pada kesempatan pertama.

Masalah berikut mungkin terjadi di versi CoreDNS sebelum 1.7.0:

Tabel berikut menjelaskan versi minimum CoreDNS yang direkomendasikan untuk kluster yang menjalankan versi Kubernetes yang berbeda.

Versi Kubernetes

Versi Minimum CoreDNS

Lebih awal dari 1.14.8 (tidak digunakan)

v1.6.2

1.14.8 dan lebih baru tetapi lebih awal dari 1.20.4

v1.7.0.0-f59c03d-aliyun

1.20.4 dan lebih baru

v1.8.4.1-3a376cc-aliyun

Catatan

Versi Kubernetes lebih awal dari 1.14.8 tidak digunakan. Kami sarankan Anda memperbarui versi Kubernetes sebelum Anda memperbarui CoreDNS.

Pantau Status CoreDNS

Metrik Pemantauan

CoreDNS menggunakan API Prometheus standar untuk mengumpulkan metrik seperti hasil resolusi DNS. Ini memungkinkan Anda mengidentifikasi pengecualian di CoreDNS dan server DNS upstream pada kesempatan pertama.

Secara default, metrik pemantauan dan aturan peringatan terkait CoreDNS telah ditentukan sebelumnya di Managed Service for Prometheus yang disediakan oleh Alibaba Cloud. Anda dapat masuk ke Konsol ACK untuk mengaktifkan Managed Service for Prometheus dan dashboard. Untuk informasi lebih lanjut, lihat Pemantauan CoreDNS.

Jika Anda menggunakan Prometheus open source untuk memantau kluster Kubernetes, Anda dapat melihat metrik terkait di Prometheus dan membuat aturan peringatan berdasarkan metrik utama berikut. Untuk informasi lebih lanjut, lihat Dokumentasi Resmi CoreDNS Prometheus.

Log Operasional

Ketika terjadi kesalahan resolusi DNS, Anda dapat melihat log CoreDNS untuk mengidentifikasi penyebabnya. Kami sarankan Anda mengaktifkan logging untuk CoreDNS dan menggunakan Log Service untuk mengumpulkan data log. Untuk informasi lebih lanjut, lihat Kumpulkan dan Analisis Log CoreDNS.

Sinkronkan Event Kubernetes

CoreDNS v1.9.3.6-32932850-aliyun dan versi lebih baru memungkinkan Anda mengaktifkan plugin k8s_event untuk menyinkronkan event Kubernetes yang berisi log Info, Error, dan Warning CoreDNS ke pusat event. Untuk informasi lebih lanjut, lihat k8s_event.

Secara default, plugin k8s_event diaktifkan setelah Anda menerapkan CoreDNS v1.9.3.6-32932850-aliyun atau versi lebih baru. Jika Anda menerapkan versi CoreDNS yang lebih lama dan kemudian memperbarui ke v1.9.3.6-32932850-aliyun atau lebih baru, Anda perlu memodifikasi ConfigMap CoreDNS untuk mengaktifkan plugin k8s_event.

  1. Jalankan perintah berikut untuk membuka ConfigMap coredns:

    kubectl -n kube-system edit configmap/coredns
  2. Tambahkan plugin kubeAPI dan k8s_event.

    apiVersion: v1
    data:
      Corefile: |
        .:53 {
            errors
            health {
                lameduck 15s
            }
    
            // Awal konfigurasi plugin. Abaikan pengaturan lainnya.
            kubeapi
            k8s_event {
              level info error warning // Laporkan log Info, Error, dan Warning ke event Kubernetes.
            }
            // Akhir konfigurasi plugin.
    
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods verified
                fallthrough in-addr.arpa ip6.arpa
            }
            // Detail tidak ditampilkan.
        }
  3. Periksa status dan log pod CoreDNS. Jika data log berisi kata kunci reload, konfigurasi baru telah dimuat.

Modifikasi Deployment CoreDNS

Modifikasi jumlah pod CoreDNS

Kami sarankan Anda menyediakan setidaknya dua pod CoreDNS. Anda harus memastikan bahwa jumlah pod CoreDNS cukup untuk menangani permintaan DNS dalam kluster.

DNS QPS CoreDNS terkait dengan penggunaan CPU. Satu CPU dapat menangani lebih dari 10.000 DNS QPS jika Anda mengaktifkan caching DNS. DNS QPS yang diperlukan oleh beban kerja yang berbeda mungkin bervariasi. Anda dapat mengevaluasi DNS QPS berdasarkan penggunaan CPU puncak setiap pod CoreDNS. Kami sarankan Anda meningkatkan jumlah pod CoreDNS jika sebuah pod CoreDNS menggunakan lebih dari satu vCPU selama jam-jam puncak. Jika Anda tidak dapat memastikan penggunaan CPU puncak setiap pod CoreDNS, Anda dapat menetapkan rasio pod CoreDNS terhadap node kluster menjadi 1:8. Dengan cara ini, setiap kali Anda menambahkan delapan node ke kluster, sebuah pod CoreDNS dibuat. Jumlah total pod CoreDNS tidak boleh melebihi 10. Jika kluster Anda berisi lebih dari 100 node, kami sarankan Anda menggunakan NodeLocal DNSCache. Untuk informasi lebih lanjut, lihat Gunakan NodeLocal DNSCache untuk Mengoptimalkan Resolusi DNS.

Catatan

UDP tidak mendukung retransmisi. Ketika pod CoreDNS dihentikan, paket UDP mungkin dijatuhkan jika sebuah pod CoreDNS dihapus atau dimulai ulang. Akibatnya, kluster mungkin mengalami timeout atau kegagalan kueri DNS. Jika kehilangan paket UDP yang disebabkan oleh masalah IPVS terjadi pada node kluster, kluster mungkin mengalami timeout atau kegagalan kueri DNS yang berlangsung hingga 5 menit setelah pod CoreDNS dihapus atau dimulai ulang. Untuk informasi lebih lanjut tentang cara menyelesaikan kegagalan kueri DNS yang disebabkan oleh masalah IPVS, lihat Apa yang Harus Saya Lakukan Jika Resolusi DNS Gagal karena Kesalahan IPVS?.

Jadwalkan pod CoreDNS ke node yang tepat

Saat Anda menerapkan pod CoreDNS di kluster, kami sarankan Anda menerapkan pod CoreDNS pada node kluster yang berbeda di beberapa zona. Ini mencegah gangguan layanan ketika satu node atau zona gagal. Secara default, pengaturan soft anti-afinitas berbasis node dikonfigurasikan untuk CoreDNS. Beberapa atau semua pod CoreDNS mungkin diterapkan pada node yang sama karena node yang tidak mencukupi. Dalam kasus ini, kami sarankan Anda menghapus pod CoreDNS dan menjadwalkan ulang pod tersebut.

Pod CoreDNS tidak boleh diterapkan pada node kluster yang sumber daya CPU dan memorinya sepenuhnya digunakan. Jika tidak, DNS QPS dan waktu respons akan terpengaruh secara negatif. Jika kluster berisi node yang cukup, Anda dapat menjadwalkan pod CoreDNS ke node eksklusif dengan mengonfigurasi parameter kustom. Ini memungkinkan CoreDNS menyediakan layanan resolusi nama domain yang stabil. Untuk informasi lebih lanjut tentang cara menjadwalkan pod CoreDNS ke node eksklusif kluster, lihat Sebarkan Pod CoreDNS pada Node Eksklusif dengan Mengonfigurasi Parameter Kustom.

Secara manual tingkatkan jumlah pod CoreDNS

Jika jumlah node kluster tetap tidak berubah untuk waktu yang lama, Anda dapat menjalankan perintah berikut untuk meningkatkan jumlah pod CoreDNS:

kubectl scale --replicas={target} deployment/coredns -n kube-system
Catatan

Ganti {target} dengan nilai yang diperlukan.

Gunakan cluster-autoscaler untuk secara otomatis meningkatkan jumlah pod CoreDNS

Jika jumlah node kluster bertambah, Anda dapat menggunakan template YAML berikut untuk menerapkan cluster-proportional-autoscaler dan secara dinamis meningkatkan jumlah pod CoreDNS:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dns-autoscaler
  namespace: kube-system
  labels:
    k8s-app: dns-autoscaler
spec:
  selector:
    matchLabels:
      k8s-app: dns-autoscaler
  template:
    metadata:
      labels:
        k8s-app: dns-autoscaler
    spec:
      serviceAccountName: admin
      containers:
      - name: autoscaler
        image: registry.cn-hangzhou.aliyuncs.com/acs/cluster-proportional-autoscaler:1.8.4
        resources:
          requests:
            cpu: "200m"
            memory: "150Mi"
        command:
        - /cluster-proportional-autoscaler
        - --namespace=kube-system
        - --configmap=dns-autoscaler
        - --nodelabels=type!=virtual-kubelet
        - --target=Deployment/coredns
        - --default-params={"linear":{"coresPerReplica":64,"nodesPerReplica":8,"min":2,"max":100,"preventSinglePointFailure":true}}
        - --logtostderr=true
        - --v=9

Dalam contoh sebelumnya, kebijakan penskalaan linier digunakan. Jumlah pod CoreDNS dihitung berdasarkan rumus berikut: Replicas (pod) = Max (Ceil (Cores × 1/coresPerReplica), Ceil (Nodes × 1/nodesPerReplica)). Jumlah pod CoreDNS tunduk pada nilai max dan min dalam kebijakan penskalaan linier. Blok kode berikut menunjukkan parameter kebijakan penskalaan linier:

{
      "coresPerReplica": 64,
      "nodesPerReplica": 8,
      "min": 2,
      "max": 100,
      "preventSinglePointFailure": true
}

Gunakan HPA untuk meningkatkan jumlah pod CoreDNS berdasarkan beban CPU

Horizontal Pod Autoscaler (HPA) sering kali memicu aktivitas penurunan skala untuk pod CoreDNS. Kami sarankan Anda tidak menggunakan HPA. Jika HPA diperlukan dalam skenario tertentu, Anda dapat merujuk pada konfigurasi kebijakan berikut berdasarkan utilisasi CPU:

---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: coredns-hpa
  namespace: kube-system
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: coredns
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
Catatan

Untuk informasi lebih lanjut tentang cara menggunakan HPA, lihat Implementasikan Horizontal Pod Autoscaler (HPA).

Sebarkan pod CoreDNS pada node eksklusif dengan menggunakan parameter kustom

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Nodes > Nodes.

  3. Di halaman Nodes, klik Manage Labels and Taints.

  4. Di tab Label halaman Manage Labels and Taints, pilih node yang ingin Anda kelola dan klik Add Label.

    Catatan

    Jumlah node yang Anda pilih harus lebih besar dari jumlah pod CoreDNS. Ini menghindari penempatan beberapa pod CoreDNS pada node yang sama.

  5. Di kotak dialog Add, atur parameter berikut dan klik OK.

    • Name: Masukkan node-role-type.

    • Value: Masukkan coredns.

  6. Di panel navigasi kiri, pilih Operations > Add-ons. Di halaman yang muncul, cari CoreDNS.

  7. Klik Configuration di bagian CoreDNS. Di kotak dialog CoreDNS Parameters, klik + Add di sebelah kanan NodeSelector, atur parameter berikut, lalu klik OK.

    • Kunci: Masukkan node-role-type.

    • Nilai: Masukkan coredns.

    Pod CoreDNS dijadwalkan ulang ke node dengan label yang ditentukan.

Konfigurasikan CoreDNS dengan Benar

ACK hanya menyediakan pengaturan default untuk CoreDNS. Anda dapat memodifikasi parameter untuk mengoptimalkan pengaturan dan mengaktifkan CoreDNS untuk menyediakan layanan DNS normal untuk pod klien Anda. Anda dapat memodifikasi konfigurasi CoreDNS sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Kebijakan DNS dan Resolusi Nama Domain dan Dokumentasi Resmi CoreDNS.

Pengaturan default versi CoreDNS yang lebih lama yang diterapkan bersama dengan kluster Kubernetes Anda mungkin menimbulkan risiko. Kami sarankan Anda memeriksa dan mengoptimalkan pengaturan dengan menggunakan metode berikut:

Anda dapat masuk ke konsol Container Intelligence Service dan menggunakan komponen Pemeriksaan dan Diagnosis Reguler untuk memeriksa konfigurasi CoreDNS. Jika hasilnya menunjukkan kesalahan terkait ConfigMap coredns, kami sarankan Anda melakukan operasi sebelumnya.

Atur ulang permintaan sumber daya dan batasan untuk CoreDNS

CoreDNS mengonsumsi sumber daya berdasarkan aturan berikut:

  • Saat CoreDNS dimulai ulang dan memuat ulang file konfigurasi, serta saat API Server tersambung dan tersambung ulang, penggunaan sumber daya CPU dan memori meningkat.

  • Penggunaan CPU CoreDNS meningkat seiring dengan DNS QPS CoreDNS.

  • Penggunaan memori CoreDNS meningkat seiring dengan ukuran kluster dan jumlah Service.

Tabel berikut menjelaskan nilai default permintaan sumber daya dan batasan saat sistem menerapkan CoreDNS. Anda dapat memodifikasi nilai berdasarkan status kluster Anda. Untuk informasi lebih lanjut, lihat Manajemen O&M - Manajemen Komponen - Jaringan - CoreDNS - Konfigurasi Parameter.

Jenis Sumber Daya

Permintaan/Batasan

Default

Deskripsi

CPU

Permintaan

100m

Tidak berdampak pada beban kerja

Batasan

Tidak Ada

Jika Anda menentukan nilai rendah, DNS QPS CoreDNS akan terpengaruh secara negatif.

Memori

Permintaan

100 Mi

Tidak berdampak pada beban kerja

Batasan

2 Gi

Jika Anda menentukan nilai lebih rendah dari nilai default, kesalahan OOM mungkin terjadi.

Catatan

Pengaturan default CoreDNS versi sebelum 1.8.4 mungkin berbeda dari yang dijelaskan dalam tabel sebelumnya. Anda dapat memodifikasi pengaturan berdasarkan kebutuhan Anda.

Nonaktifkan pengaturan afinitas untuk Service kube-dns

Pengaturan afinitas dapat menyebabkan pod CoreDNS menangani beban yang berbeda. Untuk menonaktifkan pengaturan afinitas, lakukan langkah-langkah berikut:

Gunakan Konsol ACK

  1. Masuk ke Konsol ACK.
  2. Di panel navigasi kiri konsol ACK, klik Clusters.

  3. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik nama kluster atau klik Details di kolom Actions yang sesuai dengan kluster.

  4. Di panel navigasi kiri halaman detail, pilih Network > Services.

  5. Di namespace kube-system, temukan Service kube-dns dan klik View in YAML di kolom Tindakan.

    • Jika nilai bidang sessionAffinity adalah None, lewati langkah-langkah berikut.

    • Jika nilai bidang sessionAffinity adalah ClientIP, lakukan langkah-langkah berikut.

  6. Hapus sessionAffinity, sessionAffinityConfig, dan semua subbidangnya. Lalu, klik Update.

    # Hapus konten berikut.
    sessionAffinity: ClientIP
      sessionAffinityConfig:
        clientIP:
          timeoutSeconds: 10800
  7. Temukan Service kube-dns dan klik View in YAML di kolom Tindakan lagi untuk memeriksa apakah nilai bidang sessionAffinity adalah None. Jika nilainya adalah None, Service kube-dns telah dimodifikasi.

Gunakan CLI

  1. Jalankan perintah berikut untuk memeriksa konfigurasi Service kube-dns:

    kubectl -n kube-system get svc kube-dns -o yaml
    • Jika nilai bidang sessionAffinity adalah None, lewati langkah-langkah berikut.

    • Jika nilai bidang sessionAffinity adalah ClientIP, lakukan langkah-langkah berikut.

  2. Jalankan perintah berikut untuk memodifikasi Layanan kube-dns:

    kubectl -n kube-system edit service kube-dns
  3. Hapus semua bidang yang terkait dengan sessionAffinity, termasuk sessionAffinity, sessionAffinityConfig, dan semua subbidang. Lalu, simpan perubahan dan keluar.

    # Hapus konten berikut. 
    sessionAffinity: ClientIP
      sessionAffinityConfig:
        clientIP:
          timeoutSeconds: 10800
  4. Setelah Anda memodifikasi Layanan kube-dns, jalankan perintah berikut lagi untuk memeriksa apakah nilai dari bidang sessionAffinity adalah None. Jika nilainya adalah None, Layanan kube-dns telah dimodifikasi.

    kubectl -n kube-system get svc kube-dns -o yaml

Nonaktifkan plugin autopath

Plugin autopath diaktifkan untuk CoreDNS versi sebelumnya dan dapat menyebabkan kesalahan resolusi DNS dalam skenario tertentu. Jika plugin autopath diaktifkan, Anda harus menonaktifkan plugin tersebut di ConfigMap coredns. Untuk informasi lebih lanjut, lihat Autopath.

Catatan

Setelah Anda menonaktifkan plugin autopath, jumlah permintaan DNS yang dikirim dari klien per detik dapat meningkat hingga tiga kali lipat. Oleh karena itu, waktu yang diperlukan untuk menyelesaikan nama domain juga dapat meningkat hingga tiga kali lipat. Anda harus memperhatikan beban pada CoreDNS dan dampaknya pada bisnis Anda.

  1. Jalankan perintah kubectl -n kube-system edit configmap coredns untuk memodifikasi ConfigMap coredns.

  2. Hapus autopath @kubernetes. Lalu, simpan perubahan dan keluar.

  3. Periksa status dan log pod CoreDNS. Jika data log berisi kata kunci reload, konfigurasi baru telah dimuat.

Konfigurasikan shutdown yang mulus untuk CoreDNS

Catatan

ACK mungkin mengonsumsi sumber daya memori tambahan saat memperbarui ConfigMap coredns. Setelah Anda memodifikasi ConfigMap coredns, periksa status pod CoreDNS. Jika sumber daya memori pod habis, ubah batas memori pod di Deployment CoreDNS. Kami sarankan Anda mengubah batas memori menjadi 2 GB.

Gunakan Konsol ACK

  1. Masuk ke Konsol ACK.

  2. Di panel navigasi kiri konsol ACK, klik Clusters.

  3. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik nama kluster atau klik Details di kolom Actions yang sesuai dengan kluster.

  4. Di panel navigasi kiri halaman detail, pilih Configurations > ConfigMaps.

  5. Pilih namespace kube-system. Temukan ConfigMap coredns dan klik Edit YAML di kolom Tindakan.

  6. Lihat konten Corefile berikut sebagai referensi dan pastikan plugin health diaktifkan. Lalu, atur lameduck menjadi 15s dan klik OK.

  7. .:53 {
            errors       
            # Pengaturan plugin health mungkin bervariasi berdasarkan versi CoreDNS.
            # Skenario 1: Plugin health dinonaktifkan secara default.
            # Skenario 2: Plugin health diaktifkan secara default tetapi lameduck tidak diatur.
            health      
            # Skenario 3: Plugin health diaktifkan secara default dan lameduck diatur menjadi 5s.
            health {
                lameduck 5s
            }
            # Dalam skenario di atas, ubah nilai lameduck menjadi 15s.
            health {
                lameduck 15s
            }
            # Anda tidak perlu memodifikasi plugin lainnya.
        }

Jika pod CoreDNS berjalan normal, CoreDNS dapat dimatikan dengan mulus. Jika pod CoreDNS tidak berjalan normal, Anda dapat memeriksa event pod dan log untuk mengidentifikasi penyebabnya.

Gunakan CLI

  1. Jalankan perintah berikut untuk membuka ConfigMap coredns:

  2. kubectl -n kube-system edit configmap/coredns
  3. Lihat konten YAML berikut sebagai referensi dan pastikan plugin health diaktifkan. Lalu, atur lameduck menjadi 15s.

  4. .:53 {
            errors     
            # Pengaturan plugin health mungkin bervariasi berdasarkan versi CoreDNS.
            # Skenario 1: Plugin health dinonaktifkan secara default.
            # Skenario 2: Plugin health diaktifkan secara default tetapi lameduck tidak diatur.
            health
            # Skenario 3: Plugin health diaktifkan secara default dan lameduck diatur menjadi 5s.
            health {
                lameduck 5s
            }
            # Dalam skenario di atas, ubah nilai lameduck menjadi 15s.
            health {
                lameduck 15s
            }
            # Anda tidak perlu memodifikasi plugin lainnya.
        }
  5. Setelah Anda memodifikasi ConfigMap coredns, simpan perubahan dan keluar.

  6. Jika pod CoreDNS berjalan normal, CoreDNS dapat dimatikan dengan mulus. Jika pod CoreDNS tidak berjalan normal, Anda dapat memeriksa event pod dan log untuk mengidentifikasi penyebabnya.

Konfigurasikan protokol default untuk plugin forward dan server DNS upstream dari VPC

NodeLocal DNSCache menggunakan protokol TCP untuk berkomunikasi dengan CoreDNS. CoreDNS berkomunikasi dengan server DNS upstream berdasarkan protokol yang digunakan oleh sumber permintaan DNS. Oleh karena itu, permintaan DNS yang dikirim dari pod klien untuk nama domain eksternal melewati NodeLocal DNSCache dan CoreDNS, lalu tiba di server DNS di VPC melalui TCP. Alamat IP server DNS adalah 100.100.2.136 dan 100.100.2.138. Alamat IP ini dikonfigurasi secara otomatis pada instance Elastic Compute Service (ECS).

Server DNS di VPC memiliki dukungan terbatas untuk TCP. Jika Anda menggunakan NodeLocal DNSCache, Anda harus memodifikasi konfigurasi CoreDNS dan mengaktifkan CoreDNS untuk menggunakan UDP untuk berkomunikasi dengan server DNS upstream. Ini mencegah masalah resolusi DNS. Kami sarankan Anda memodifikasi ConfigMap CoreDNS berdasarkan modifikasi berikut. ConfigMap bernama coredns dan termasuk dalam namespace kube-system. Untuk informasi lebih lanjut, lihat Kelola ConfigMaps. Modifikasi pengaturan plugin forward dan atur protokol yang digunakan untuk berkomunikasi dengan server upstream menjadi prefer_udp. Dengan cara ini, CoreDNS lebih memilih menggunakan protokol UDP untuk berkomunikasi dengan server DNS upstream. Anda dapat memodifikasi pengaturan berdasarkan modifikasi berikut:

# Pengaturan asli
forward . /etc/resolv.conf
# Pengaturan yang dimodifikasi
forward . /etc/resolv.conf {
  prefer_udp
}

Konfigurasikan plugin ready

Anda harus mengonfigurasi plugin ready untuk versi CoreDNS setelah 1.5.0.

  1. Jalankan perintah berikut untuk membuka ConfigMap coredns:

    kubectl -n kube-system edit configmap/coredns
  2. Periksa apakah ada baris yang hanya berisi ready. Jika baris tersebut tidak ada, tambahkan baris dan tentukan ready, tekan Esc, masukkan :wq!, lalu tekan Enter untuk menyimpan file dan keluar dari mode edit.

    apiVersion: v1
    data:
     Corefile: |
      .:53 {
        errors
        health {
          lameduck 15s
        }
        ready # Tambahkan baris ini dan pastikan kata "ready" sejajar dengan kata "kubernetes".
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods verified
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
          max_concurrent 1000
                prefer_udp
        }
        cache 30
        loop
        log
        reload
        loadbalance
      }
  3. Periksa status dan log pod CoreDNS. Jika data log berisi kata kunci reload, konfigurasi baru telah dimuat.