Khám phá GKE NodeLocal DNSCache

1. Tổng quan

Bộ nhớ đệm DNS giúp cải thiện độ trễ tra cứu DNS bằng cách gửi các yêu cầu DNS của nhóm đến bộ nhớ đệm cục bộ trên cùng một nút trước. Điều này giúp thời gian tra cứu DNS nhất quán hơn và có thể giảm số lượng truy vấn DNS đến kube-dns hoặc Cloud DNS.

Trong bài tập thực hành này, bạn sẽ kiểm thử cách NodeLocal DNSCache xử lý lưu lượng truy cập DNS trong một cụm GKE. Bạn sẽ xác thực một cụm GKE Standard chạy phiên bản 1.34.1-gke.3720000 trở lên để xác nhận rằng cụm này được bật theo mặc định. Sau đó, hãy tắt để xem cách thay đổi cấu hình khi bạn tắt tính năng này.

Mục tiêu

Trong bài tập thực hành này, bạn sẽ tìm hiểu cách thực hiện nhiệm vụ sau:

  • Tạo VPC, mạng con và quy tắc tường lửa tuỳ chỉnh
  • Triển khai cụm GKE Standard tiêu chuẩn bằng kênh phát hành nhanh
  • Thực hiện một bài kiểm thử để xác minh rằng bộ nhớ đệm DNS LocalNode đã được bật
  • Tắt bộ nhớ đệm và xác minh trạng thái khi không có bộ nhớ đệm

2. Thiết lập bài tập thực hành

Thiết lập môi trường tự học

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Tên dự án là tên hiển thị cho những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật tên này.
  • Mã dự án là mã duy nhất trên tất cả các dự án của Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã ngẫu nhiên khác. Ngoài ra, bạn có thể thử mã của riêng mình và xem mã đó có dùng được hay không. Bạn không thể thay đổi mã này sau bước này và mã này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn tham khảo, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API của Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh phát sinh chi phí thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Bắt đầu Cloud Shell

Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Cloud.

Trên Google Cloud Console, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

Kích hoạt Cloud Shell

Quá trình cung cấp và kết nối với môi trường này chỉ mất vài phút. Khi hoàn tất, bạn sẽ thấy một nội dung như sau:

Ảnh chụp màn hình cửa sổ dòng lệnh Google Cloud Shell cho thấy môi trường đã kết nối

Máy ảo này được tải sẵn tất cả các công cụ phát triển mà bạn cần. Máy ảo này cung cấp một thư mục chính 5 GB liên tục và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất mạng và khả năng xác thực. Bạn có thể thực hiện tất cả công việc trong lớp học lập trình này trong một trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.

3. Thiết lập môi trường

Chúng ta sẽ tạo một VPC tuỳ chỉnh có các quy tắc về tường lửa. Nếu đã có VPC và Dự án, bạn có thể bỏ qua phần này.

Mở Cloud Shell ở đầu bảng điều khiển bên phải. Sau đó, định cấu hình như sau: b51b80043d3bac90.png

  1. Bật một số API mà chúng ta sẽ sử dụng trong bài tập thực hành này
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. Đặt một số biến. Các biến này là Mã dự án và Tên VPC o (bạn sẽ tạo VPC ở bước 3).
export projectid=$(gcloud config get-value project)
export vpc_name=gke-cache-vpc
export subnet_name=mainsubnet
export region=us-east1
export zone=us-east1-b
export cluster_name=cache-gke-cluster
export channel=rapid

export machine_type=e2-standard-4
echo $projectid
echo $vpc_name
  1. Bây giờ, hãy tạo một VPC tuỳ chỉnh có tên là gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. Tạo mạng con trong VPC mới
gcloud compute networks subnets create $subnet_name \
    --network=$vpc_name \
    --range=10.0.88.0/24 \
    --region=$region \
    --enable-private-ip-google-access \
    --project=$projectid
  1. Thêm quy tắc tường lửa vào VPC
gcloud compute firewall-rules create $vpc_name-allow-internal \
    --network=$vpc_name --allow=tcp,udp,icmp --source-ranges=10.0.88.0/24

gcloud compute firewall-rules create $vpc_name-allow-ssh \
    --network=$vpc_name --allow=tcp:22 --source-ranges=35.235.240.0/20

4. Tạo cổng NAT để giao tiếp qua Internet

Chúng ta cần cấp quyền truy cập bên ngoài исходящий vào Internet, vì vậy, hãy tạo một cổng Cloud NAT và đính kèm cổng đó.

Trong Cloud Shell, hãy sử dụng các lệnh sau

  1. Tạo Cloud NAT và cổng NAT
gcloud compute routers create gke-nat-router --network=$vpc_name --region=$region

gcloud compute routers nats create gke-nat-gw \
    --router=gke-nat-router --region=$region \
    --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges

5. Triển khai cụm GKE và xác minh

  1. Trong Google Cloud Shell, hãy tạo cụm có tên là cache-gke-cluster. Các cụm GKE Standard chạy phiên bản 1.34.1-gke.3720000 trở lên, NodeLocal DNSCache được bật theo mặc định. (Quá trình cung cấp cụm sẽ mất từ 4 đến 10 phút)
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
  1. Sau khi tạo cụm, hãy kết nối:
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. Bây giờ, hãy xác minh rằng NodeLocal DNSCache đã được bật.

Các lệnh này xác nhận rằng phiên bản là 1.34.1-gke.3720000 trở lên và xác nhận rằng tác nhân cục bộ đang chạy và các dịch vụ

kubectl version | grep "Server Version"

kubectl get pods -n kube-system -o wide | grep node-local-dns -w

kubectl get svc,endpoints -n kube-system -l k8s-app=kube-dns
  1. Tiếp theo, hãy chạy lệnh sau (Lệnh này tạo một nhóm đặc quyền trên mạng máy chủ để xác minh rằng các quy tắc iptables của nút đang chủ động chặn và định tuyến lưu lượng truy cập DNS đến bộ nhớ đệm cục bộ)
export KUBEDNS_IP=$(kubectl get svc kube-dns -n kube-system -o jsonpath='{.spec.clusterIP}')

kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
  --overrides='{"spec": {"hostNetwork": true}}' -- \
  sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"

Những nội dung cần tìm: Tìm -j NOTRACK. Điều này xác nhận rằng lưu lượng truy cập DNS đang bỏ qua bảng theo dõi kết nối.

7135447929b7c48f.png

6. Tắt NodeLocal DNSCache và xác minh

Bây giờ, chúng ta sẽ xoá tính năng tối ưu hoá để xem tính năng này hoạt động như thế nào khi không có tính năng tối ưu hoá.

  1. Chuyển đến Cloud Shell rồi chạy lệnh sau. Lưu ý: Lệnh này sẽ kích hoạt quá trình tạo lại nút, thường mất 3–5 phút cho mỗi bộ nút khi GKE luân chuyển các thực thể
gcloud container clusters update $cluster_name --zone=$zone --update-addons=NodeLocalDNS=DISABLED --quiet

kubectl get pods -n kube-system -o wide | grep node-local-dns -w

Bạn sẽ không thấy bất kỳ nhóm nào trong số này trong tập hợp daemon vì chúng đã bị xoá.

  1. Chạy lại bài kiểm thử
kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
  --overrides='{"spec": {"hostNetwork": true}}' -- \
  sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"

Sau khi tắt tiện ích bổ sung, đầu ra sẽ không còn chứa các quy tắc -j NOTRACK hoặc bất kỳ đề cập nào đến địa chỉ IP 169.254.20.10. Điều này có nghĩa là bạn không còn nhận được lợi ích của bộ nhớ đệm cục bộ

4693ee556701e145.png

7. Dọn dẹp

# 1. Delete the GKE Cluster
# This will remove the node and all system pods (including kube-dns)
gcloud container clusters delete $cluster_name --zone=$zone --quiet

# 2. Delete the Cloud NAT and Router
# It is best practice to remove these before the VPC
gcloud compute routers nats delete gke-nat-gw --router=gke-nat-router --region=$region --quiet
gcloud compute routers delete gke-nat-router --region=$region --quiet

# 3. Delete the Firewall Rules
gcloud compute firewall-rules delete $vpc_name-allow-internal $vpc_name-allow-ssh --quiet

# 4. Delete the Subnet and VPC
gcloud compute networks subnets delete $subnet_name --region=$region --quiet
gcloud compute networks delete $vpc_name --quiet

8. Các bước tiếp theo / Tìm hiểu thêm

Bạn có thể đọc thêm về tài liệu về mạng GKE và các trường hợp sử dụng

Codelab: Truy cập vào cuộc trò chuyện với Gemini 3 Pro bằng Python SDK thông qua điểm cuối Kết nối dịch vụ riêng tư

Codelab: Xây dựng tác nhân AI bằng ADK:Nền tảng

Tham gia lớp học lập trình tiếp theo

Tiếp tục hành trình của bạn với Google Cloud và xem các lớp học lập trình khác trong chương trình Google Cloud Skills Boost: