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

16/10/2026

vMaaS cập nhật thêm mô hình AI mới - Một API, nhiều mô hình lựa chọn linh hoạt, chi phí không đổi

Viettel Model as a Service (vMaaS) cập nhật thêm Gemma 3, Qwen3-VL và Llama Nemotron, đồng thời hỗ trợ thêm hơn 40 mô hình AI theo nhu cầu. Tìm hiểu cách chọn mô hình phù hợp qua một API.

15/10/2026

Thông báo về việc tổ chức đấu giá tài sản thanh lý tháng 10/2026

Công ty Cổ phần Viettel – CHT thông báo về việc đấu giá đối với danh mục tài sản: Tài sản thanh lý bao gồm: Lô 1 - Bình ắc quy + Lô 2 - Tủ Rack và thiết bị cơ điện.

14/10/2026

So sánh IDS và IPS: Sự khác biệt và cách lựa chọn phù hợp

So sánh IDS và IPS giúp doanh nghiệp hiểu rõ cách hai giải pháp phát hiện, ngăn chặn xâm nhập và lựa chọn phương án bảo vệ hệ thống mạng phù hợp.

14/10/2026

NVMe Hosting là gì? Ưu điểm, so sánh và cách lựa chọn

NVMe Hosting là gì? Tìm hiểu ưu điểm, so sánh với SSD SATA và HDD, cùng cách lựa chọn hosting phù hợp để tối ưu hiệu năng website.

14/10/2026

Sự khác biệt giữa các dịch vụ hosting của Việt Nam với quốc tế

Tìm hiểu sự khác biệt giữa các dịch vụ hosting của Việt Nam với quốc tế về tốc độ, chi phí, công nghệ và hỗ trợ kỹ thuật để chọn giải pháp phù hợp.

14/10/2026

So sánh dịch vụ hosting tại Viettel IDC với những nhà cung cấp khác: Nên chọn bên nào?

So sánh dịch vụ hosting tại Viettel IDC với những nhà cung cấp khác về giá, cấu hình, hiệu năng và bảo mật để chọn giải pháp phù hợp cho doanh nghiệp.

14/10/2026

Những nền tảng điện toán đám mây nào phù hợp nhất cho doanh nghiệp nhỏ? Cách lựa chọn hiệu quả

Những nền tảng điện toán đám mây nào phù hợp cho doanh nghiệp nhỏ? Tìm hiểu các lựa chọn phổ biến và tiêu chí chọn nền tảng phù hợp.

14/10/2026

Cách chọn máy chủ phù hợp cho website nhỏ tại Việt Nam: Từ cấu hình đến chi phí

Cách chọn máy chủ phù hợp cho website nhỏ tại Việt Nam dựa trên cấu hình, nhu cầu sử dụng, chi phí và khả năng mở rộng.

14/10/2026

Những yếu tố quan trọng khi lựa chọn dịch vụ Cloud Database để đảm bảo khả năng mở rộng và độ tin cậy

Những yếu tố quan trọng khi lựa chọn dịch vụ Cloud Database giúp doanh nghiệp đảm bảo khả năng mở rộng, hiệu năng và độ tin cậy cho hệ thống.

14/10/2026

Lỗi SQL Server Setup failed: Nguyên nhân và cách khắc phục

Lỗi SQL Server Setup failed do đâu? Tìm hiểu nguyên nhân, cách kiểm tra và khắc phục lỗi để cài đặt SQL Server thành công.