Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Gateway API
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

[AKS/K8S] Optimize Network Outbout for AKS/K8S Cluster on Azure.

Posted on October 3, 2025October 3, 2025 By nim No Comments on [AKS/K8S] Optimize Network Outbout for AKS/K8S Cluster on Azure.

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)

Contents

Toggle
  • 1. Overview
    • 1.1 Load Balancer
    • 1.2 NAT Gateway
    • 1.3 User-Defined Routing (UDR)
  • 2. Real Case to Apply
  • 3) Critical considerations for using Windows on Azure Kubernetes Service (AKS).
    • 3.1) OutboundNAT trên Windows là gì?
    • 3.2) Vấn đề của OutboundNAT
    • 3.3) “Manually disable OutboundNAT for Windows” là gì?
    • 3.4) Tại sao cần tắt OutboundNAT?
    • 3.5) Các điều kiện và giới hạn
    • 3.6) Cách thực hiện
      • 3.6.1) az command line.
      • 3.6.2) Using Terraform
      • 3.6.3) Check Windows profile.

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:
    • Đơn giản và tự động: Cấu hình mặc định, dễ triển khai nhất vì Azure tự động quản lý toàn bộ thiết lập.
    • Tương thích tốt: Hỗ trợ đầy đủ cho các Kubernetes service có loại là LoadBalancer.
  • Nhược điểm:
    • Nguy cơ cạn kiệt cổng SNAT (SNAT port exhaustion): Khi số lượng kết nối ra ngoài lớn, các cổng SNAT có sẵn trên Load Balancer có thể bị sử dụng hết, dẫn đến lỗi kết nối.
    • Yêu cầu IP công cộng: Không phù hợp với các môi trường yêu cầu không được phép có IP công cộng vì lý do bảo mật.

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.

Có hai chế độ con :

  • 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:
    • Yêu cầu cấu hình trước (với userAssignedNatGateway): Bạn phải tự chuẩn bị tài nguyên NAT Gateway nếu dùng mạng ảo của riêng mình.
    • Chi phí phát sinh: Có thể tốn thêm chi phí cho dịch vụ NAT Gateway.

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ế SNATSố 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 LoadBalancer làm loại outbound cho cluster. Thay vào đó, bạn phải cấu hình cluster để sử dụng NAT Gateway hoặc UDR (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>
Azure Cloud

Post navigation

Previous Post: [Azure] az command helpful
Next Post: Fixing Flameshot Display Issues with Non-Integer DPI Scaling

More Related Articles

[vnet/Azure] VNet provisioning via Terraform. Azure Cloud
[Azure] The subscription is not registered to use namespace ‘Microsoft.ContainerService’ Azure Cloud
Beautiful Infratructure AWS - Amazon Web Service
[Azure/MongoDB] Creating Azure Cosmos DB for MongoDB (RU) Azure Cloud
[Service Endpoint] Explain the Service Endpoint in Azure VNet. Azure Cloud
Create Service Bus on azure Azure Cloud

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Telegram/Openclaw] Configure openclaw bot in a Telegram group. March 31, 2026
  • Tutorial: Gateway API + Traefik + oauth2-proxy (Microsoft Entra ID) March 30, 2026
  • Full + incremental backup: When restoring, do deleted files come back? March 27, 2026
  • [K8S] Create long-lived kubeconfig on k8s March 23, 2026
  • [Android Phone] How to ssh to Android Phone. March 20, 2026

Archives

  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • AI
    • OpenClaw
  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Gateway API
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2026 NimTechnology.