Tuyển dụng
Viettel IDC

DNS trong Kubernetes là gì? Cách hoạt động ra sao?

03/06/2026

Trong môi trường Kubernetes, địa chỉ IP của các ứng dụng thường xuyên thay đổi. Để duy trì kết nối ổn định, hệ thống phân giải tên miền nội bộ đóng vai trò như một danh bạ tự động. Cùng Viettel IDC giải mã chi tiết DNS trong Kubernetes hoạt động ra sao trong bài viết dưới đây.

DNS Kubernetes là gì?

DNS trong Kubernetes (K8s DNS) là hệ thống phân giải tên miền nội bộ có chức năng gán tên miền cho các Service và Pod. Hệ thống này tự động dịch các tên miền dễ nhớ thành địa chỉ IP, giúp các thành phần trong cụm (cluster) kết nối, khám phá nhau dễ dàng mà không cần dùng địa chỉ IP tĩnh.

DNS Kubernetes là gì?

Giải mã DNS trong Kubernetes hoạt động ra sao?

DNS trong Kubernetes hoạt động như một hệ thống phân giải tên miền tự động nội bộ, giúp dịch tên các dịch vụ (Service) và Pod thành địa chỉ IP để chúng dễ dàng giao tiếp với nhau. Khi một tài nguyên mới được triển khai, hệ thống CoreDNS tích hợp sẵn sẽ tự động cập nhật và tạo các bản ghi DNS theo thời gian thực dưới dạng tên miền mặc định là cluster.local. Nhờ cơ chế này, các ứng dụng trong cụm có thể kết nối với nhau một cách ổn định thông qua các tên gọi thân thiện thay vì phải theo dõi các địa chỉ IP động liên tục thay đổi.

Cấu trúc phân giải tên miền (Domain Name Structure)

Hệ thống DNS trong Kubernetes cấp phát tên miền cho các tài nguyên theo một cấu trúc tiêu chuẩn và phân cấp thống nhất. Cú pháp mặc định đối với Service được quy định như sau:

<service-name>.<namespace>.svc.cluster.local

Trong đó:

- <service-name>: Tên của Service đích cần truy cập.

- <namespace>: Tên không gian mạng (namespace) chứa Service đó.

- svc: Định dạng xác định đây là một bản ghi của Service (nếu là Pod, giá trị này sẽ là pod).

- cluster.local: Hậu tố gốc (base domain) mặc định của toàn cụm Kubernetes.

Ví dụ, nếu bạn có một Service mang tên my-database được triển khai trong namespace prod, tên miền phân giải đầy đủ sẽ là: my-database.prod.svc.cluster.local. Lưu ý nếu một Pod khác cũng nằm trong cùng namespace prod muốn kết nối tới cơ sở dữ liệu này, nó chỉ cần gọi tên ngắn gọn là my-database.

Các bước phân giải DNS qua Kubelet và CoreDNS

Quá trình tìm kiếm và chuyển đổi từ tên miền sang địa chỉ IP diễn ra tự động thông qua sự phối hợp của các thành phần hệ thống theo 4 bước sau:

- Bước 1: Pod gửi yêu cầu truy vấn. Khi ứng dụng bên trong Pod cần giao tiếp với một Service, nó sẽ khởi tạo một yêu cầu truy vấn tên miền (DNS query).

- Bước 2: Tham chiếu tệp /etc/resolv.conf. Để Pod biết cần gửi truy vấn đi đâu, thành phần kubelet trên máy chủ (Node) đã tự động thiết lập tệp tin /etc/resolv.conf bên trong Pod ngay khi khởi tạo. Tệp tin này trỏ trực tiếp đến địa chỉ IP của Service CoreDNS trong hệ thống (thường mặc định là 10.96.0.10).

- Bước 3: Định tuyến qua kube-proxy. Truy vấn từ Pod được gửi đến địa chỉ IP của CoreDNS. Tại tầng mạng, thành phần kube-proxy đóng vai trò cân bằng tải, điều hướng luồng truy vấn này đến một trong các Pod CoreDNS thực tế đang ở trạng thái hoạt động (Ready).

- Bước 4: CoreDNS tra cứu và trả kết quả. Sau khi tiếp nhận yêu cầu, CoreDNS tra cứu dữ liệu trong bộ nhớ đệm (cache) hoặc đối chiếu với bản ghi nội bộ (dữ liệu này được đồng bộ liên tục từ Kubernetes API Server). CoreDNS tìm ra kết quả và trả về địa chỉ IP chính xác của Service đích, cho phép ứng dụng thiết lập kết nối mạng.

Các bước phân giải DNS qua Kubelet và CoreDNS

Xử lý các truy vấn ra mạng bên ngoài (Upstream DNS)

Hệ thống mạng trong Kubernetes không hoàn toàn cô lập. Nếu ứng dụng bên trong Pod yêu cầu truy cập một tên miền nằm ngoài hạ tầng cluster (ví dụ: một API của bên thứ ba như api.github.com), CoreDNS sẽ nhanh chóng nhận diện tên miền này không thuộc phạm vi của đuôi .cluster.local.

Lúc này, CoreDNS sẽ hoạt động như một trạm chuyển tiếp (forwarder). Nó không báo lỗi mà sẽ gửi tiếp truy vấn đó ra các máy chủ DNS bên ngoài (Upstream DNS) đã được cấu hình sẵn trên máy chủ vật lý để lấy địa chỉ IP thực tế, sau đó phản hồi lại chính xác cho Pod yêu cầu.

Hướng dẫn Debug và khắc phục lỗi DNS thường gặp trong Kubernetes

Khi đã hiểu rõ DNS trong Kubernetes hoạt động ra sao, bạn sẽ dễ dàng chẩn đoán và xử lý khi các Pod không thể kết nối với nhau. Dưới đây là 4 bước kiểm tra các kỹ sư hệ thống thường áp dụng:

Bước 1: Kiểm tra trạng thái của các Pod CoreDNS

Lỗi phổ biến nhất là bản thân dịch vụ CoreDNS đang gặp sự cố. Bạn cần đảm bảo các Pod này đang ở trạng thái Running bằng câu lệnh:

kubectl get pods -n kube-system -l k8s-app=kube-dns

Lưu ý: Nếu Pod ở trạng thái CrashLoopBackOff hoặc Pending, bạn cần kiểm tra lại tài nguyên (CPU/RAM) của máy chủ hoặc xem log chi tiết.

Bước 2: Kiểm tra cấu hình /etc/resolv.conf trong Pod

Đôi khi Pod khởi tạo nhưng không nhận được đúng IP của máy chủ DNS. Bạn có thể chui vào bên trong Pod đang bị lỗi để đọc trực tiếp file cấu hình mạng:

kubectl exec -it <tên-pod-của-bạn> -- cat /etc/resolv.conf

Đảm bảo dòng nameserver đang trỏ đúng về địa chỉ IP của Service CoreDNS (ví dụ 10.96.0.10).

Bước 3: Phân giải thử bằng công cụ nslookup / dig

Để loại trừ nguyên nhân lỗi từ mã nguồn ứng dụng, bạn nên tạo một Pod tạm thời chứa các công cụ mạng (như image busybox hoặc dnsutils) để gửi thử truy vấn DNS:

kubectl run -i --tty --rm debug-dns --image=busybox:1.28 -- nslookup <tên-service-cần-gọi>

Nếu lệnh này trả về đúng địa chỉ IP, chứng tỏ hệ thống DNS vẫn hoạt động bình thường, lỗi có thể nằm ở cấu hình bên trong ứng dụng của bạn.

Bước 4: Kiểm tra nhật ký (Logs) của CoreDNS

Nếu các bước trên không giải quyết được vấn đề, hãy kiểm tra nhật ký hoạt động của CoreDNS để xem có yêu cầu nào bị từ chối hoặc lỗi đồng bộ từ API Server hay không:

kubectl logs -n kube-system -l k8s-app=kube-dns

Hướng dẫn cách sử dụng DNS trong Kubernetes (Thực hành chi tiết)

Trong thực tế, bạn không cần phải "cài đặt" DNS vì hệ thống CoreDNS đã được Kubernetes kích hoạt tự động ngay từ đầu. Tuy nhiên, để sử dụng DNS hiệu quả nhất trong kiến trúc Microservices, bạn cần nắm vững 3 kỹ thuật áp dụng dưới đây:

Giao tiếp giữa các Microservices bằng Tên miền nội bộ

Đây là cách sử dụng cơ bản và phổ biến nhất. Giả sử bạn có một ứng dụng frontend cần gọi dữ liệu từ ứng dụng backend. Thay vì phải tìm địa chỉ IP của backend, bạn chỉ cần tạo một Service và gọi tên nó.

Bước 1: Tạo một Service cho Backend 

Lưu file dưới đây thành backend-svc.yaml và chạy lệnh kubectl apply -f backend-svc.yaml:

YAML

apiVersion: v1

kind: Service

metadata:

  name: api-backend

  namespace: default

spec:

  selector:

    app: backend

  ports:

    - protocol: TCP

      port: 8080

      targetPort: 80

 

Bước 2: Cấu hình gọi DNS từ Frontend 

Lúc này, Kubernetes đã tự động tạo một bản ghi DNS cho Service trên. Bên trong mã nguồn (source code) hoặc biến môi trường của ứng dụng frontend, bạn chỉ cần cấu hình đường dẫn kết nối API là:

- http://api-backend:8080 (Nếu frontend nằm cùng namespace default).

- http://api-backend.default.svc.cluster.local:8080 (Nếu frontend nằm ở namespace khác).

Gắn tên miền nội bộ cho Dịch vụ bên ngoài (Dùng ExternalName)

Trường hợp bạn có một cơ sở dữ liệu (Database) đang chạy bên ngoài Kubernetes (ví dụ: Amazon RDS có tên miền my-db.xyz.us-east-1.rds.amazonaws.com). Thay vì phải gán cứng (hardcode) cái tên miền dài ngoẵng này vào mã nguồn của mọi Pod, bạn có thể tạo một Service loại ExternalName để ánh xạ nó thành một tên miền nội bộ ngắn gọn.

Cách triển khai:

YAML

apiVersion: v1

kind: Service

metadata:

  name: db-local

  namespace: prod

spec:

  type: ExternalName

  externalName: my-db.xyz.us-east-1.rds.amazonaws.com

 

Ứng dụng trong Kubernetes giờ đây chỉ cần kết nối đến tên miền db-local.prod.svc.cluster.local. Hệ thống CoreDNS sẽ tự động làm nhiệm vụ chuyển tiếp (CNAME) ra cơ sở dữ liệu AWS RDS thực tế. Nếu sau này bạn đổi Database, bạn chỉ cần sửa file YAML này, không cần phải sửa code và build lại ứng dụng.

Tùy chỉnh hệ thống phân giải bằng CoreDNS ConfigMap

Nếu bạn muốn Kubernetes nhận diện một tên miền tùy chỉnh (custom domain) mà không cần phải thiết lập trên các máy chủ DNS bên ngoài, bạn có thể can thiệp trực tiếp vào tệp cấu hình của CoreDNS (được gọi là Corefile).

Bước 1: Mở tệp cấu hình ConfigMap của CoreDNS bằng lệnh:

Bash

kubectl edit configmap coredns -n kube-system

 

Bước 2: Bổ sung thêm plugin hosts vào khối cấu hình. Ví dụ dưới đây ép CoreDNS phân giải tên miền thongbao.congty.local về một địa chỉ IP nội bộ cụ thể (192.168.1.50):

YAML

apiVersion: v1

kind: ConfigMap

metadata:

  name: coredns

  namespace: kube-system

data:

  Corefile: |

    .:53 {

        errors

        health

        kubernetes cluster.local in-addr.arpa ip6.arpa {

           pods insecure

           fallthrough in-addr.arpa ip6.arpa

        }

        hosts {

           192.168.1.50 thongbao.congty.local

           fallthrough

        }

        prometheus :9153

        forward . /etc/resolv.conf

        cache 30

        loop

        reload

        loadbalance

    }

 

Sau khi lưu lại, CoreDNS sẽ tự động nạp lại cấu hình. Tất cả các Pod trong Cluster khi gọi đến thongbao.congty.local sẽ được hướng thẳng đến IP 192.168.1.50.

Kết luận

Hiểu rõ DNS trong Kubernetes hoạt động ra sao là bước nền tảng giúp bạn quản trị mạng nội bộ hiệu quả, đảm bảo các ứng dụng microservices luôn giao tiếp mượt mà. Tuy nhiên, việc tự xây dựng và vận hành một cụm Kubernetes hoàn chỉnh từ con số không thường tiêu tốn rất nhiều thời gian và đòi hỏi đội ngũ kỹ thuật có chuyên môn sâu. Để tối ưu hóa nguồn lực, doanh nghiệp có thể sử dụng Viettel Dedicated Kubernetes Service (vDKS) – giải pháp Managed Kubernetes giúp khởi tạo, vận hành hệ thống và cấu hình mạng hoàn toàn tự động, bảo mật 24/7.

Tham khảo chi tiết tại đây: https://viettelidc.com.vn/viettel-kubernetes-service

Để được hỗ trợ tư vấn và tìm hiểu các dịch vụ của Viettel, bạn có thể liên hệ trực tiếp tới Viettel IDC qua các kênh:

- Hotline: 1800 8088 (miễn phí cước gọi)

- Fanpage: https://www.facebook.com/viettelidc  

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

28/09/2026

Trigger là gì trong DBMS? Cách hoạt động, các loại phổ biến và ứng dụng

Trigger là gì trong DBMS? Tìm hiểu cách trigger hoạt động, các loại phổ biến, ví dụ minh họa, ưu nhược điểm và khi nào nên sử dụng.

28/09/2026

Figma là gì? Nền tảng thiết kế và cộng tác trực tuyến

Figma là gì, có những tính năng nổi bật nào? Tìm hiểu Vector Network, Auto Layout, Dev Mode và vị thế hiện tại của Figma trong ngành thiết kế.

28/09/2026

Camera Cloud cần tốc độ mạng bao nhiêu? Cách tính băng thông cần thiết

Camera Cloud cần tốc độ mạng bao nhiêu? Tìm hiểu mức băng thông cần thiết, cách tính upload và các yếu tố ảnh hưởng đến tốc độ khi sử dụng Camera Cloud.

28/09/2026

Camera Cloud có bị hack không? Nguyên nhân và cách bảo mật

Camera Cloud có bị hack không? Tìm hiểu các rủi ro bảo mật, nguyên nhân bị xâm nhập và cách bảo vệ camera, tài khoản cùng dữ liệu hiệu quả.

28/09/2026

Viettel IDC: Nhà cung cấp VMware Sovereign Cloud duy nhất tại Đông Nam Á

Tại VMware Explore 2026 ở Las Vegas, Broadcom đã giới thiệu nhóm 57 nhà cung cấp dịch vụ đám mây chủ quyền trên nền tảng VMware Cloud Foundation. Viettel IDC là đơn vị duy nhất tại Đông Nam Á có tên trong danh sách này, đánh dấu bước tiến mới của doanh nghiệp Việt Nam trên thị trường hạ tầng cloud khu vực.

25/09/2026

Ghidra là gì? Chức năng và ứng dụng trong reverse engineering

Ghidra là gì? Tìm hiểu công cụ reverse engineering mã nguồn mở của NSA, các chức năng chính, ứng dụng thực tế và điểm khác biệt với IDA Pro.

25/09/2026

10 công cụ tối ưu hóa website theo từng mục tiêu

Tổng hợp 10 công cụ tối ưu hóa web cho tốc độ, SEO, trải nghiệm người dùng và chuyển đổi, kèm bảng so sánh và gợi ý lựa chọn theo nhu cầu.

25/09/2026

So sánh WHOIS và DNS Lookup: Điểm khác nhau và khi nào nên sử dụng

WHOIS và DNS Lookup khác nhau thế nào? Tìm hiểu định nghĩa, bảng so sánh, vai trò của RDAP thay thế WHOIS, và khi nào nên dùng công cụ nào.

25/09/2026

Cách test tải hệ thống: Quy trình và công cụ phổ biến

Cách test tải hệ thống hiệu quả gồm những bước nào? Tìm hiểu quy trình, chỉ số cần đo và công cụ phổ biến như JMeter, k6.

16/01/2025

Cloud Monitoring là gì? So sánh Hybrid Cloud và Multi Cloud Monitoring

Cloud Monitoring là quá trình theo dõi, quản lý và đánh giá hiệu suất của các tài nguyên và dịch vụ đám mây, bao gồm giám sát máy chủ, cơ sở dữ liệu, ứng dụng và hệ thống mạng