全部产品
Search
文档中心

Container Compute Service:Konfigurasikan CoreDNS yang tidak dikelola

更新时间:Jan 23, 2026

CoreDNS adalah Domain Name System (DNS) server default untuk kluster Alibaba Cloud Container Compute Service (ACS). CoreDNS merupakan server DNS yang efisien dan menyediakan penemuan layanan untuk kluster Kubernetes. Instal dan operasikan CoreDNS yang tidak dikelola untuk mengonfigurasi fitur CoreDNS kustom. Topik ini menjelaskan cara mengonfigurasi CoreDNS yang tidak dikelola dalam kluster ACS pada berbagai skenario.

Skenario

Catatan

Topik ini hanya berlaku untuk CoreDNS yang tidak dikelola. CoreDNS yang dikelola tidak dapat dikonfigurasi secara manual dan konfigurasinya tidak terlihat oleh pengguna. Untuk informasi selengkapnya tentang penggunaan CoreDNS yang dikelola, lihat Kebijakan DNS dan resolusi nama domain. Untuk menginstal CoreDNS yang tidak dikelola, lihat Gunakan CoreDNS yang tidak dikelola dalam kluster ACS.

Dalam topik ini, digunakan contoh pod yang memanfaatkan CoreDNS untuk resolusi DNS dengan kebijakan DNS dnsPolicy: ClusterFirst. Contoh:

apiVersion: v1
kind: Pod
metadata:
  name: alinux3
  namespace: default
spec:
  containers:
  - image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alinux3
  dnsPolicy: ClusterFirst

Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter dnsPolicy dalam berbagai skenario, lihat Konfigurasi resolusi DNS.

Konfigurasi default CoreDNS

Di namespace kube-system kluster ACS, Anda dapat menemukan ConfigMap CoreDNS. CoreDNS mengonfigurasi dan mengaktifkan plugin yang ditentukan dalam ConfigMap tersebut. ConfigMap untuk setiap versi CoreDNS sedikit berbeda. Sebelum mengubah konfigurasi, baca dokumentasi resmi CoreDNS. File konfigurasi default yang digunakan oleh CoreDNS 1.6.2 adalah sebagai berikut:

  Corefile: |
    .:53 {
        errors
        log
        health {
           lameduck 15s
        }
        ready
        kubernetes {{.ClusterDomain}} in-addr.arpa ip6.arpa {
          pods verified
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
              prefer_udp
        }
        cache 30
        loop
        reload
        loadbalance
    }
Catatan

Ganti ClusterDomain dengan nama domain kluster yang Anda tentukan saat membuat kluster. Nama domain kluster default: cluster.local.

Parameter

Deskripsi

errors

Menampilkan pesan error ke output standar.

health

Memberikan status kesehatan CoreDNS. Port listener default adalah 8080 dan biasanya digunakan untuk Pemeriksaan kesehatan.

Ambil status kesehatan dari http://localhost:8080/health.

ready

Memberikan status kesiapan plugin CoreDNS. Port listener default adalah 8181 dan biasanya digunakan untuk pemeriksaan kesiapan.

Ambil status kesiapan dari http://localhost:8181/ready. Status 200 OK menunjukkan bahwa semua plugin sedang Berjalan.

kubernetes

Menyediakan resolusi layanan untuk layanan di dalam kluster Kubernetes.

prometheus

Menyediakan titik akhir untuk metrik CoreDNS.

Ambil data Pemantauan dalam format Prometheus dari http://localhost:9153/metrics.

forward (atau proxy)

Meneruskan kueri nama domain ke server DNS yang telah ditentukan. Secara default, jika nama domain tidak termasuk dalam domain Kubernetes, kueri akan diteruskan ke resolver di /etc/resolv.conf. Konfigurasi ini menggunakan file /etc/resolv.conf dari host secara default.

cache

Cache DNS.

loop

Mendeteksi loop penerusan. Jika loop terdeteksi, CoreDNS akan berhenti.

reload

Secara otomatis memuat ulang Corefile ketika ada perubahan. Setelah ConfigMap terkait diedit, perubahan akan berlaku dalam waktu 2 menit.

loadbalance

Mengaktifkan load balancing DNS dengan mengacak urutan rekaman A, AAAA, dan MX dalam tanggapan.

Konfigurasi fitur tambahan berdasarkan CoreDNS

Konfigurasikan fitur tambahan berdasarkan CoreDNS dalam skenario berikut:

  • Skenario 1: Aktifkan Simple Log Service

    Untuk mengumpulkan log semua catatan resolusi DNS yang dilakukan oleh CoreDNS, aktifkan plugin log dengan menambahkan parameter log ke Corefile. Contoh:

      Corefile: |
        .:53 {
            errors
            log
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
                  prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
  • Skenario 2: Sesuaikan server DNS untuk nama domain tertentu

    Jika nama domain dengan akhiran example.com perlu diselesaikan oleh server DNS yang ditentukan pengguna, seperti server DNS 10.10.0.10, tambahkan pengaturan resolusi kustom untuk nama domain tersebut. Contoh:

    example.com:53 {
      errors
      cache 30
      forward . 10.10.0.10 {
      prefer_udp
      }
    }

    Konfigurasi:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
        example.com:53 {
            errors
            cache 30
            forward . 10.10.0.10 {
            prefer_udp
            }
        }
  • Skenario 3: Sesuaikan server DNS untuk nama domain eksternal

    Jika nama domain yang perlu diselesaikan oleh server DNS yang ditentukan pengguna tidak memiliki akhiran yang sama, gunakan server DNS tersebut untuk melakukan resolusi DNS terhadap semua nama domain eksternal.

    Sebagai contoh, jika alamat IP server DNS yang ditentukan pengguna adalah 10.10.0.10 dan 10.10.0.20, ubah parameter forward. Contoh:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . 10.10.0.10 10.10.0.20 {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
  • Skenario 4: Sesuaikan host untuk nama domain tertentu

    Konfigurasikan plugin hosts untuk menentukan alamat IP statis bagi nama domain tertentu, misalnya mengarahkan www.example.com ke 127.0.0.1. Metode ini memiliki efek yang sama seperti file /etc/hosts. Contoh:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            ready
            
            hosts {
              127.0.0.1 www.example.com
              fallthrough
            }
          
            kubernetes cluster.local in-addr.arpa ip6.arpa {
              pods insecure
              fallthrough in-addr.arpa ip6.arpa
              ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf {
              prefer_udp
            }
            cache 30
            loop
            reload
            loadbalance
        }
    Penting

    Anda harus menentukan parameter fallthrough dalam hosts. Jika tidak, nama domain yang tidak ditentukan mungkin gagal diselesaikan.

  • Skenario 5: Aktifkan akses eksternal ke layanan dalam kluster ACK

    Untuk memungkinkan proses pada Instance ECS dalam kluster ACK mengakses layanan di dalam kluster tersebut, tetapkan alamat IP kluster kube-dns sebagai nilai parameter nameserver dalam file /etc/resolv.conf pada Instance ECS tersebut. Jangan ubah pengaturan lain dalam file /etc/resolv.conf.

    Dalam jaringan internal, gunakan Instance Classic Load Balancer (CLB) akses internal untuk memungkinkan akses internal ke layanan dalam kluster ACS. Kemudian, login ke Konsol Alibaba Cloud DNS PrivateZone dan tambahkan Rekaman A yang mengarah ke Alamat IP pribadi Instance CLB tersebut.

  • Skenario 6: Gunakan nama domain untuk mengizinkan akses ke layanan Anda dalam kluster ACK atau aktifkan resolusi CNAME untuk kluster ACK

    Gunakan foo.example.com untuk mengizinkan akses ke layanan Anda dalam kluster ACK dari Internet, jaringan internal, maupun dari dalam kluster ACK itu sendiri. Bagian berikut menjelaskan cara mengaktifkan fitur ini:

    • Layanan Anda foo.default.svc.cluster.local diekspos ke akses eksternal menggunakan Instance CLB akses Internet. Nama domain foo.example.com diselesaikan ke alamat IP Instance CLB akses Internet tersebut.

    • Layanan Anda foo.default.svc.cluster.local diekspos ke akses internal menggunakan Instance CLB akses internal. Login ke Konsol Alibaba Cloud DNS PrivateZone untuk mengarahkan foo.example.com ke alamat IP Instance CLB akses internal dalam virtual private cloud (VPC) tempat kluster ACK ditempatkan. Lihat Konfigurasi CoreDNS yang tidak dikelola.

    • Gunakan plugin rewrite dalam kluster ACK untuk menambahkan Rekaman CNAME yang mengarahkan foo.example.com ke foo.default.svc.cluster.local. Contoh:

        Corefile: |
          .:53 {
              errors
              health {
                 lameduck 15s
              }
              ready
              
              rewrite stop {
                name exact foo.example.com foo.default.svc.cluster.local
                answer name foo.default.svc.cluster.local foo.example.com 
              }
      
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods insecure
                fallthrough in-addr.arpa ip6.arpa
                ttl 30
              }
              prometheus :9153
              forward . /etc/resolv.conf {
                prefer_udp
              }
              cache 30
              loop
              reload
              loadbalance
          }
  • Skenario 7: Konfigurasikan CoreDNS untuk tidak mengembalikan alamat IPv6 yang diselesaikan berdasarkan rekaman AAAA

    Jika Pod aplikasi Anda tidak memerlukan hasil resolusi berdasarkan Rekaman AAAA, konfigurasikan CoreDNS untuk mencegat hasil resolusi tersebut dan mengembalikan kode NODATA guna meminimalkan transfer data. Contoh:

      Corefile: |
        .:53 {
            errors
            health {
               lameduck 15s
            }
            # Tambahkan baris berikut untuk mengaktifkan plugin template. Jangan modifikasi pengaturan lain.
            template IN AAAA .
        }