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 phòng thí nghiệm 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 đang 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ấu hình thay đổi như thế nào khi bạn tắt tính năng này.

Mục tiêu

Trong phòng thí nghiệm 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 một cụm GKE Tiêu chuẩn tiêu chuẩn bằng kênh phát hành nhanh
  • Thực thi một 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 mà không cần bộ nhớ đệm

2. Thiết lập phòng thí nghiệm

Thiết lập môi trường theo tốc độ của riêng bạn

  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.png37d264871000675d.png96d86d3d5655cdbe.png

  • Tên dự án là tên hiển thị của 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 thông tin này.
  • Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ 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ã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian diễn ra dự án.
  • Để bạn biết, 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ả 3 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 trên 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 bị tính phí ngoài phạm vi 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.

Khởi động Cloud Shell

Mặc dù 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 trên Cloud.

Trên Bảng điều khiển Google Cloud, 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 này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy 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 trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong 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 ở trên cùng bên phải của bảng điều khiển. Đồng thời đị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 phòng thí nghiệm 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 (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 từ 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. (Cụm này sẽ mất từ 4 đến 10 phút để được cung cấp)
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 bạn 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, đồng thời 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 sẽ tạo một nhóm đặc quyền trên mạng máy chủ lưu trữ để 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 điểm cần lưu ý: 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

Giờ đây, chúng ta sẽ xoá quy trình tối ưu hoá để xem cách hoạt động của ứng dụng mà không có quy trình này.

  1. Chuyển đến Cloud Shell rồi chạy lệnh sau. Lưu ý: Thao tác 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 nhóm nút khi GKE chuyển đổi các phiên bản
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 nhóm daemon vì chúng đã bị xoá.

  1. Chạy lạ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 bạn 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ỳ thông tin nào về đị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ộ nữa

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à các trường hợp sử dụng về mạng GKE

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: Tạo tác nhân AI bằng ADK:Nền tảng

Tham gia phòng thí nghiệm tiếp theo

Tiếp tục hành trình khám phá của bạn với Google Cloud và xem các bài tập thực hành khác trên Google Cloud Skills Boost: