全部产品
Search
文档中心

Container Service for Kubernetes:Kebijakan DNS dan resolusi nama domain

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menyetel parameter dnsPolicy untuk mengonfigurasi kebijakan DNS pada setiap pod dalam kluster Container Service for Kubernetes (ACK). Topik ini juga menjelaskan cara menggunakan parameter HostAliases untuk mengonfigurasi pod agar menyelesaikan nama domain ke alamat IP tertentu.

Prasyarat

Informasi latar belakang

Untuk informasi lebih lanjut tentang cara kerja resolusi DNS di kluster ACK, lihat Ikhtisar DNS.

Secara default, ACK menyebarkan satu set beban kerja di kluster untuk menjalankan CoreDNS. Sebuah Service bernama kube-dns disebarkan untuk mengekspos beban kerja tersebut ke permintaan DNS di kluster. Dua pod backend bernama coredns disebarkan untuk CoreDNS. Permintaan DNS di kluster dikirim ke server DNS yang ditentukan dalam konfigurasi pod coredns.

  • Anda dapat menjalankan perintah berikut untuk memeriksa informasi tentang Service kube-dns:

    kubectl get svc kube-dns -n kube-system
  • Anda dapat menjalankan perintah berikut untuk memeriksa informasi tentang pod coredns:

    kubectl get deployment coredns -n kube-system

Setel parameter dnsPolicy untuk mengonfigurasi kebijakan DNS untuk pod

Anda dapat menggunakan parameter dnsPolicy untuk menentukan kebijakan DNS untuk pod. Kluster ACK mendukung kebijakan DNS berikut:

  • ClusterFirst: Kebijakan ini menunjukkan bahwa pod menggunakan CoreDNS untuk menyelesaikan nama domain. Ini adalah kebijakan DNS default. File /etc/resolv.conf berisi alamat server DNS yang disediakan oleh CoreDNS, yaitu kube-dns.

  • None: Kebijakan ini menunjukkan bahwa pod mengabaikan pengaturan DNS dari kluster ACK. Anda harus menyesuaikan pengaturan DNS dengan menggunakan parameter dnsConfig. Jika tidak, pod tidak dapat menyelesaikan nama domain apa pun.

  • Default: Kebijakan ini menunjukkan bahwa pod mewarisi pengaturan resolusi DNS dari node tempat pod ditempatkan. Di kluster ACK, node dibuat berdasarkan instance Elastic Compute Service (ECS). Oleh karena itu, pod langsung menggunakan file /etc/resolv.conf dari node berbasis ECS tempat pod ditempatkan. File ini berisi alamat server DNS yang disediakan oleh Alibaba Cloud DNS.

  • ClusterFirstWithHostNet: Kebijakan ini menunjukkan bahwa pod dalam mode HostNetwork menggunakan kebijakan ClusterFirst. Jika Anda tidak menentukan kebijakan untuk pod, pod akan menggunakan kebijakan Default.

Anda dapat menggunakan kebijakan DNS di atas untuk memenuhi persyaratan bisnis dalam berbagai skenario.

Skenario 1: Gunakan CoreDNS yang disediakan oleh kluster ACK untuk menyelesaikan nama domain

Dalam skenario ini, Anda harus menentukan dnsPolicy: ClusterFirst untuk pengaturan kebijakan DNS. Contoh:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine
  dnsPolicy: ClusterFirst

    Skenario 2: Sesuaikan pengaturan DNS untuk pod

Untuk menyesuaikan pengaturan DNS untuk Deployment, Anda harus menentukan dnsPolicy: None untuk pengaturan kebijakan DNS. Contoh:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine
      dnsPolicy: None
      dnsConfig:
        nameservers: ["169.254.xx.xx"]
        searches:
        - default.svc.cluster.local
        - svc.cluster.local
        - cluster.local
        options:
        - name: ndots
          value: "2"

Tabel berikut menjelaskan parameter dalam bagian dnsConfig.

    Parameter

    Deskripsi

    nameservers

    Daftar alamat IP server DNS untuk pod. Anda dapat menentukan hingga tiga alamat IP. Jika Anda menyetel dnsPolicy ke None untuk pod, Anda harus menentukan setidaknya satu alamat IP. Jika Anda tidak menyetel dnsPolicy ke None untuk pod, parameter ini bersifat opsional. Daftar alamat IP server DNS akan ditambahkan ke parameter nameserver dari file konfigurasi DNS yang dihasilkan berdasarkan nilai dnsPolicy. Alamat IP duplikat dihapus.

    searches

    Daftar domain pencarian DNS untuk pencarian nama host di pod. Parameter ini bersifat opsional. Daftar domain pencarian DNS akan ditambahkan ke daftar nama dasar yang dihasilkan berdasarkan kebijakan DNS yang ditentukan. Nama domain duplikat dihapus. Anda dapat menentukan hingga enam domain pencarian.

    Catatan

    Jika Server DNS tidak dapat dijangkau, hanya domain pencarian pertama yang dicoba.

    options

    Daftar item opsional. Setiap item dapat berisi name (wajib) dan value (opsional). Item yang ditentukan akan ditambahkan ke daftar item opsional yang dihasilkan berdasarkan kebijakan DNS yang ditentukan. Item duplikat dihapus. Untuk informasi lebih lanjut tentang options, lihat Kebijakan resolusi dan caching DNS.

Untuk informasi lebih lanjut, lihat DNS untuk Layanan dan Pod.

    Skenario 3: Gunakan pengaturan DNS dari instance ECS

Jika pod aplikasi Anda tidak perlu mengakses Layanan lain yang diterapkan di kluster ACK, Anda dapat menentukan dnsPolicy: Default untuk pengaturan kebijakan DNS. Dalam skenario ini, resolusi DNS dilakukan oleh Alibaba Cloud DNS dan CoreDNS tidak diperlukan. Contoh:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine
      dnsPolicy: Default

    Skenario 4: Aktifkan pod dalam mode HostNetwork untuk mengakses Layanan di kluster ACK

    Jika Anda menentukan hostNetwork:true untuk pengaturan jaringan pod aplikasi Anda, pod aplikasi Anda dapat langsung menggunakan jaringan host. Dalam hal ini, kebijakan DNS default untuk pod adalah Default. Akibatnya, pod aplikasi Anda tidak dapat mengakses Layanan yang diterapkan di kluster ACK. Jika Anda ingin mengaktifkan pod dalam mode HostNetwork untuk mengakses Layanan yang diterapkan di kluster ACK, Anda harus menentukan dnsPolicy: ClusterFirstWithHostNet untuk pengaturan kebijakan DNS. Contoh:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine

Gunakan parameter hostAliases untuk mengonfigurasi pod agar menyelesaikan nama domain ke alamat IP yang ditentukan

Anda dapat menggunakan salah satu metode berikut untuk menyelesaikan nama domain ke alamat IP tertentu:

  • Konfigurasi global (semua pod menyelesaikan nama domain ke alamat IP yang ditentukan): Untuk mengonfigurasi semua pod agar menyelesaikan nama domain ke alamat IP yang ditentukan, aktifkan plug-in hosts untuk CoreDNS. Untuk informasi lebih lanjut, lihat Konfigurasikan fitur tambahan berdasarkan CoreDNS.

  • Konfigurasi Pod Individu: Untuk mengonfigurasi pod agar menyelesaikan nama domain ke alamat IP tertentu, gunakan parameter HostAliases untuk memodifikasi file /etc/hosts dari pod. Contoh:

    apiVersion: v1
    kind: Pod
    metadata:
      name: hostaliases-pod
    spec:
      hostAliases:
      - ip: "127.0.**.**"
        hostnames:
        - "foo.local"
        - "bar.local"
      - ip: "10.1.**.**"
        hostnames:
        - "foo.remote"
      containers:
      - name: cat-hosts
        image: busybox:1.28
        command:
        - cat
        args:
        - "/etc/hosts"

    Blok kode berikut menunjukkan isi file /etc/hosts yang diinisialisasi setelah Anda menambahkan parameter hostAliases ke bagian spec dari pod:

    # Kubernetes-managed hosts file.
    127.0.**.**	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    fe00::0	ip6-mcastprefix
    fe00::1	ip6-allnodes
    fe00::2	ip6-allrouters
    10.200.**.**	hostaliases-pod
    
    # Entri yang ditambahkan oleh HostAliases.
    127.0.**.**	foo.local	bar.local
    10.1.**.**	foo.remote	bar.remote

    Nama domain foo.local, bar.local, dan foo.remote dipetakan ke alamat IP tertentu.

Referensi