All Products
Search
Document Center

Container Compute Service:Konfigurasikan Parameter Kustom untuk managed CoreDNS

Last Updated:Jul 02, 2025

Saat menerapkan aplikasi berbasis kontainer ke kluster, Anda perlu mengakses layanan atau antarmuka eksternal di luar layanan internal kluster. Resolusi nama domain eksternal menjadi penting dalam hal ini. Anda dapat menentukan server DNS untuk nama domain eksternal guna meningkatkan kecepatan resolusi DNS. Untuk nama domain yang dipetakan ke alamat IP statis, Anda juga bisa menambahkan pemetaan tersebut ke file hosts lokal. Topik ini menjelaskan cara mengonfigurasi pengaturan DNS untuk managed CoreDNS dengan mendefinisikan CustomResource (CR) CustomDNSConfig untuk memenuhi persyaratan tersebut.

Pengenalan parameter CoreDNS kustom

Contoh berikut menjelaskan cara mengonfigurasi parameter CoreDNS kustom.

apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
  name: default
  namespace: default
spec:
  zones:
  - name: example.com
    forward:
      protocolStrategy: ""
      transportConfig: {}
      upstreams:
      - xxx.xxx.xxx.xxx     # Alamat IP
      - xxx.xxx.xxx.xxx:53  # IP:port
    hosts:
    - hostName: "a.example.com" 
      ipAddress: xxx.xxx.xxx.xxx  
  • Zona kustom. Zona harus berupa nama domain lengkap (FQDN). Nilai default: ".".

  • Nilai default dari parameter .forward.protocolStrategy adalah "", yang menentukan bahwa UDP digunakan. Anda juga dapat mengatur parameter ini ke tcp.

  • Nilai default dari parameter .forward.transportConfig adalah {}. Nilai parameter ini tidak dapat diubah.

  • Anda dapat mengonfigurasi alamat server DNS hulu kustom menggunakan parameter .forward.upstreams dalam satu zona. Parameter ini dapat berformat IP atau IP:PORT dan hanya mendukung IPv4.

    • Jika parameter .forward.upstreams tidak ditentukan, Alibaba Cloud DNS PrivateZone akan digunakan.

    • Anda dapat menentukan hingga 15 alamat server DNS hulu dalam parameter .forward.upstreams.

  • Anda dapat mengonfigurasi plugin hosts kustom dalam satu zona dan memetakan alamat IP statis ke nama domain.

    • Parameter hostName digunakan untuk mendefinisikan nama domain tertentu. Format nama domain harus sesuai dengan spesifikasi DNS.

    • Parameter ipAddress digunakan untuk mendefinisikan alamat IP yang dipetakan ke nama domain, yang harus berupa alamat IPv4 valid.

    • Anda dapat menggunakan parameter hostName untuk mendefinisikan beberapa alamat IP (ipAddress). Contoh:

      ...
       hosts:
          - hostName: "a.example.com" 
            ipAddress: 10.0.0.123  
          - hostName: "a.example.com" 
            ipAddress: 10.0.0.124
       ...
  • CustomDNSConfig bukan CustomResourceDefinition (CRD) berskala namespace. Anda hanya dapat membuat CR CustomDNSConfig bernama default.

Prasyarat

  • Plugin managed CoreDNS terpasang. Versi plugin adalah 1.9.3.20 atau lebih baru. Untuk informasi lebih lanjut, lihat Kelola Komponen.

Skenario 1: Konfigurasikan zona kustom

  1. Buat file bernama default.yaml dan salin konten berikut ke file tersebut:

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.136  # Tetapkan alamat server DNS hulu untuk example.com menjadi 100.100.2.136 dan 100.100.2.138.
          - 100.100.2.138
      - name: foo.com
        hosts:
        -hostName: "a.foo.com"# Konfigurasikan alamat IP statis kustom untuk a.foo.com dan b.foo.com di zona foo.com.
          ipAddress: 192.168.0.251
        - hostName: "b.foo.com"
          ipAddress: 192.168.0.252

    Dua zona kustom dikonfigurasi dalam file YAML:

    • example.com

      Alamat server DNS hulu ditetapkan sebagai 100.100.2.136 dan 100.100.2.138.

      Catatan

      100.100.2.136 dan 100.100.2.138 adalah alamat layanan resolusi DNS internal default yang dialokasikan oleh sistem. Untuk informasi lebih lanjut, lihat Endpoints.

    • foo.com

      Konfigurasikan alamat IP statis kustom untuk a.foo.com dan b.foo.com.

  2. Jalankan perintah berikut untuk membuat CR CustomDNSConfig:

    kubectl apply -f default.yaml
  3. Jalankan perintah berikut untuk melihat corefile yang dihasilkan:

    kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1

    Output yang Diharapkan:

     status:
      corefile: |
        example.com:53 {
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
        foo.com:53 {
            prometheus :9153
            hosts {
              192.168.0.251    a.foo.com
              192.168.0.252    b.foo.com
              fallthrough
            }
            forward .  /etc/resolv.conf {
              policy random
              prefer_udp
            }
    ...
        }
    ...
    --
      corefileHash: 41f7be21cf3022c305091665ed33b1e5
      lastTransitionTime: "2024-09-13T09:07:37Z"
      phase: GenerateSuccess

    Output menunjukkan bahwa CR CustomDNSConfig bernama default dibuat dan corefile yang sesuai dapat ditemukan di parameter status.

Skenario 2: Modifikasi konfigurasi zona default

  1. Buat file bernama default.yaml dan salin konten berikut ke file tersebut:

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: .
        forward:
          upstreams:
          -100.100.2.136 # Alamat server DNS hulu untuk zona default kustom bernama "." adalah 100.100.2.136 dan 100.100.2.138.
          - 100.100.2.138

    Dalam file YAML, alamat server DNS hulu kustom adalah 100.100.2.136 dan 100.100.2.138.

  2. Jalankan perintah berikut untuk membuat CR CustomDNSConfig:

    kubectl apply -f default.yaml
  3. Jalankan perintah berikut untuk melihat corefile yang dihasilkan:

    kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1

    Output yang Diharapkan:

     status: 
      corefile: |
        .:53 {
            errors
            health {
              lameduck 20s
            }
            ready
            kubeapi {
              kubeconfig /etc/kubernetes/config/managed-coredns.conf
            }
            k8s_event {
              level error warning
            }
    ...
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
      corefileHash: 847bf69cc4c97cee965945f45d17c661
      lastTransitionTime: "2024-09-13T09:54:22Z"
      phase: GenerateSuccess

    CR CustomDNSConfig bernama default dibuat dan corefile dihasilkan.

    Catatan

    Setelah membuat atau memodifikasi CR CustomDNSConfig, CoreDNS perlu melakukan reload konfigurasi, yang membutuhkan waktu sekitar 20 detik. Anda dapat menyesuaikan durasi reload untuk CoreDNS dengan mengubah nilai lamduck dalam parameter corefile. Nilai default adalah 20 detik.

Pemecahan Masalah

Anda hanya dapat membuat CR CustomDNSConfig bernama default. Bagian ini menjelaskan mengapa status CustomDNSConfig adalah NotSupported saat Anda membuat CR CustomDNSConfig dengan nama selain default.

  1. Buat file bernama gotest.yaml dan salin konten berikut ke file tersebut:

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: test  ## Anda hanya dapat membuat CR CustomDNSConfig bernama default.
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.138
      - name: foo.com
        hosts:
        - hostName: "ah.foo.com"
          ipAddress: 1.1.xx.251
        - hostName: "aha.foo.com"
          ipAddress: 1.1.xx.252
  2. Jalankan perintah berikut untuk membuat CR CustomDNSConfig:

    kubectl apply -f test.yaml
  3. Jalankan perintah berikut untuk melihat corefile yang dihasilkan:

    kubectl get customdnsconfig 

    Output yang Diharapkan:

    NAME      PHASE             VERSION                            AGE
    default   GenerateSuccess   847bf69cc4c97cee96xxxxxxxxxxx      89m
    test      NotSupported                                         9s

    Output menunjukkan bahwa CR CustomDNSConfig bernama test tidak dapat dibuat dan NotSupported ditampilkan.

Informasi Event

Controller CoreDNS kustom menyinkronkan informasi event ke namespace default.

Jalankan perintah berikut untuk melihat event:

kubectl get events

Output yang Diharapkan:

LAST SEEN   TYPE     REASON                  OBJECT                           MESSAGE
45m         Normal   CustomDNSConfigSyncOk   customdnsconfig/default          custom dns config sync to coredns configmap success