AKS hỗ trợ các loại outbound chính sau: Load Balancer, NAT Gateway, và User-Defined Routing (UDR). Ngoài ra, còn có hai loại đặc biệt là none và block dành cho các cluster bị cô lập về mạng (Network Isolated Clusters)
1. Overview
1.1 Load Balancer
Đây là loại outbound mặc định khi tạo một cluster AKS. Hệ thống sẽ tự động tạo một Azure Standard Load Balancer với một địa chỉ IP công cộng để xử lý tất cả lưu lượng truy cập đi ra từ cluster.
- Ưu điểm:
- Nhược điểm:
1.2 NAT Gateway
Với loại này, cluster AKS sẽ sử dụng dịch vụ Azure NAT Gateway để quản lý lưu lượng truy cập ra ngoài.
managedNatGateway: Dành cho khi bạn sử dụng mạng ảo do AKS quản lý (managed VNet). AKS sẽ tự động tạo và gắn một NAT Gateway vào subnet của cluster.userAssignedNatGateway: Dành cho khi bạn sử dụng mạng ảo của riêng mình (bring-your-own VNet). Bạn phải tự tạo NAT Gateway trước khi tạo cluster.- Ưu điểm:
- Giải quyết vấn đề cạn kiệt cổng SNAT: NAT Gateway cung cấp một số lượng lớn cổng SNAT, giúp tránh các vấn đề liên quan đến cạn kiệt cổng so với Load Balancer.
- Khả năng mở rộng cao: Cung cấp kết nối ra ngoài đáng tin cậy và có khả năng mở rộng tốt hơn cho các cluster có quy mô lớn.
- Nhược điểm:
1.3 User-Defined Routing (UDR)
Đây là tùy chọn nâng cao, cho phép bạn toàn quyền kiểm soát đường đi của lưu lượng truy cập ra ngoài. Khi chọn loại này, AKS sẽ không tự động cấu hình đường ra. Thay vào đó, bạn phải tự định tuyến lưu lượng ra một thiết bị mạng như Azure Firewall, một gateway, hoặc một proxy.
- Ưu điểm:
- Kiểm soát toàn diện: Cho phép bạn kiểm soát và lọc lưu lượng ra ngoài một cách chi tiết, rất hữu ích cho các môi trường doanh nghiệp có yêu cầu bảo mật cao hoặc kiến trúc Hub-Spoke.
- Bảo mật nâng cao: Bạn có thể buộc tất cả lưu lượng truy cập đi qua một tường lửa (firewall) để kiểm tra và ghi log trước khi ra Internet.
- Không cần IP công cộng trực tiếp: Không yêu cầu cluster phải có IP công cộng được gán trực tiếp, tăng cường tính bảo mật.
- Nhược điểm:
- Cấu hình phức tạp: Đòi hỏi kiến thức chuyên sâu về mạng và phải tự cấu hình thủ công toàn bộ.
- Rủi ro cấu hình sai: Nếu không được định tuyến chính xác, cluster có thể mất kết nối ra ngoài.
- Cần chú ý định tuyến bất đối xứng (asymmetric routing): Phải cẩn thận khi cấu hình cho các luồng truy cập vào (ingress) để tránh các vấn đề về định tuyến.
2. Real Case to Apply
Nếu bạn hệ thống bạn sẽ mở rộng và bạn không có nhu cầu quản lý traffics một cách quá phức tạp thì sử dụng NAT Gateway là một cách hay cho việc out bound traffic.
Một yêu cầu là các node pools phải được assgin subnets trong cùng 1 vnet.

Chúng ta sẽ có 2 cách cấu hình terraform:
AKS tự tạo nat gateway:
outbound_type = “managedNATGateway”
resource "azurerm_kubernetes_cluster" "example" {
# ... other properties
network_profile {
network_plugin = "azure"
load_balancer_sku = "standard"
outbound_type = "managedNATGateway" # Use a managed NAT Gateway
# Configure the NAT Gateway
nat_gateway_profile {
managed_outbound_ip_count = 2 # Number of public IPs for the NAT Gateway
idle_timeout_in_minutes = 10
}
}
# ... other properties
}
Các nữa là AKS sử dụng Nat Gateway tồn tại trong vnet:
outbound_type = “userAssignedNATGateway”
resource "azurerm_kubernetes_cluster" "aks" {
name = "myakswincluster"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
dns_prefix = "myakswincluster-dns"
# The default node pool MUST be associated with the subnet.
default_node_pool {
name = "linuxpool"
node_count = 1
vm_size = "Standard_DS2_v2"
vnet_subnet_id = azurerm_subnet.aks_subnet.id # Assign the pre-existing subnet
}
# --- Configure the cluster for a User-Assigned NAT Gateway ---
network_profile {
network_plugin = "azure"
load_balancer_sku = "standard"
outbound_type = "userAssignedNATGateway" # Critical: Use this value
}
windows_profile {
admin_username = "azureuser"
admin_password = "Password1234!"
}
identity {
type = "SystemAssigned"
}
# Ensure the subnet association happens before the cluster is created
depends_on = [
azurerm_subnet_nat_gateway_association.aks_subnet_nat_assoc
]
}
Check Out bound:
az aks show --resource-group <Resource-Group-Name> --name <aks-cluster-name> --query "networkProfile.outboundType" >>output: "userAssignedNATGateway"
3) Critical considerations for using Windows on Azure Kubernetes Service (AKS).
tôi sẽ giải thích về tính năng “Manually disable OutboundNAT for Windows” trên AKS dựa vào tài liệu bạn cung cấp.
3.1) OutboundNAT trên Windows là gì?
Trên các node Windows trong AKS, hệ điều hành Windows có một cơ chế mặc định gọi là OutboundNAT. Cơ chế này tự động dịch địa chỉ IP của các pod (container) sang địa chỉ IP của máy ảo (node) khi có kết nối đi ra ngoài.
3.2) Vấn đề của OutboundNAT
Mặc dù tính năng này bật mặc định, nó có thể gây ra các vấn đề nghiêm trọng về kết nối và giao tiếp, đặc biệt là khi hệ thống có nhiều pod.
Vấn đề cốt lõi là sự cạn kiệt cổng (port exhaustion). OutboundNAT sử dụng các cổng trên địa chỉ IP của node để thực hiện việc dịch địa chỉ (NAT). Khi số lượng kết nối ra ngoài từ các pod trên cùng một node tăng cao, tất cả các cổng có sẵn có thể bị sử dụng hết. Điều này dẫn đến :
- Kết nối không ổn định: Các kết nối mới sẽ thất bại.
- Tái sử dụng cổng (node port reuse): Gây ra xung đột và làm mất kết nối đến các dịch vụ bên ngoài.
3.3) “Manually disable OutboundNAT for Windows” là gì?
Đây là một tùy chọn cho phép bạn tắt cơ chế OutboundNAT mặc định của Windows khi tạo một node pool mới cho Windows trong cluster AKS.
Khi bạn tắt OutboundNAT, bạn đang yêu cầu AKS không sử dụng cơ chế NAT tích hợp của Windows nữa. Thay vào đó, việc quản lý lưu lượng truy cập ra ngoài sẽ được chuyển giao hoàn toàn cho loại outbound mà bạn đã cấu hình cho toàn bộ cluster AKS (ví dụ: NAT Gateway hoặc UDR).
3.4) Tại sao cần tắt OutboundNAT?
Việc tắt OutboundNAT và chuyển sang dùng các giải pháp của Azure như NAT Gateway mang lại lợi ích lớn về hiệu năng và độ ổn định :
| Cơ chế SNAT | Số cổng có sẵn trên mỗi IP công cộng |
|---|---|
| Load Balancer (với OutboundNAT mặc định) | 64 cổng trên IP của host |
| NAT Gateway (khi đã tắt OutboundNAT) | 64,512 cổng |
| Azure Firewall (khi đã tắt OutboundNAT) | 2,496 cổng |
Như bạn thấy, NAT Gateway cung cấp số lượng cổng vượt trội, giải quyết triệt để vấn đề cạn kiệt cổng mà OutboundNAT của Windows gây ra.
3.5) Các điều kiện và giới hạn
Để có thể tắt OutboundNAT cho Windows, bạn cần tuân thủ các điều kiện sau :
- Phiên bản Kubernetes: Cluster AKS của bạn phải từ phiên bản 1.26 trở lên.
- Loại Outbound của Cluster: Bạn không thể sử dụng
LoadBalancerlàm loại outbound cho cluster. Thay vào đó, bạn phải cấu hình cluster để sử dụngNAT GatewayhoặcUDR(User-Defined Routing).
3.6) Cách thực hiện
3.6.1) az command line.
Bạn có thể tắt OutboundNAT khi thêm một node pool Windows mới vào cluster AKS bằng cách sử dụng cờ --disable-windows-outbound-nat trong lệnh az aks nodepool add.
Ví dụ:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name myWinNodePool \
--os-type Windows \
--node-count 3 \
--disable-windows-outbound-nat
Lệnh này sẽ tạo ra một node pool Windows mới mà không sử dụng cơ chế NAT mặc định của hệ điều hành, giúp các ứng dụng của bạn có kết nối ra ngoài ổn định và hiệu quả hơn.
3.6.2) Using Terraform

Chúng ta cần thêm windows_profile trong azurerm_kubernetes_cluster_node_pool
windows_profile { # forces replacement
outbound_nat_enabled = false # forces replacement
}
3.6.3) Check Windows profile.
az aks nodepool show \ --resource-group <resource-group> \ --cluster-name <aks-cluster-name> \ --name <windows-pool-name>
