Multus CNI

Multus CNI Meta CNI Plugin Kubernetes Pod หลาย Network Interfaces Secondary Networks Data Plane แยก Management Data Storage SR-IOV High Performance

CDN Content Delivery Network เซิร์ฟเวอร์กระจายทั่วโลก Cache เนื้อหาใกล้ผู้ใช้ ลด Latency Cloudflare CloudFront Fastly Akamai

Multus CNI Setup

# === Multus CNI Installation และ Configuration ===

# 1. ติดตั้ง Multus CNI
# kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset-thick.yml

# 2. ตรวจสอบ
# kubectl get pods -n kube-system | grep multus
# kubectl get network-attachment-definitions

# 3. NetworkAttachmentDefinition — กำหนด Secondary Network
# apiVersion: k8s.cni.cncf.io/v1
# kind: NetworkAttachmentDefinition
# metadata:
#   name: data-network
# spec:
#   config: |
#     {
#       "cniVersion": "0.3.1",
#       "type": "macvlan",
#       "master": "eth1",
#       "mode": "bridge",
#       "ipam": {
#         "type": "host-local",
#         "subnet": "10.10.0.0/16",
#         "rangeStart": "10.10.1.20",
#         "rangeEnd": "10.10.3.250",
#         "routes": [{"dst": "0.0.0.0/0"}],
#         "gateway": "10.10.0.1"
#       }
#     }

# 4. SR-IOV Network (High Performance)
# apiVersion: k8s.cni.cncf.io/v1
# kind: NetworkAttachmentDefinition
# metadata:
#   name: sriov-net
#   annotations:
#     k8s.v1.cni.cncf.io/resourceName: intel.com/sriov_netdevice
# spec:
#   config: |
#     {
#       "cniVersion": "0.3.1",
#       "type": "sriov",
#       "vlan": 100,
#       "ipam": {
#         "type": "host-local",
#         "subnet": "10.20.0.0/24"
#       }
#     }

# 5. Pod with Multiple Networks
# apiVersion: v1
# kind: Pod
# metadata:
#   name: cdn-edge
#   annotations:
#     k8s.v1.cni.cncf.io/networks: data-network, sriov-net
# spec:
#   containers:
#   - name: edge-server
#     image: nginx:latest
#     ports:
#     - containerPort: 80
#     resources:
#       limits:
#         intel.com/sriov_netdevice: "1"

network_types = {
    "macvlan": {
        "description": "สร้าง Virtual NIC จาก Physical NIC",
        "performance": "ดี ใกล้เคียง Physical",
        "use_case": "ทั่วไป แยก Network",
    },
    "ipvlan": {
        "description": "คล้าย macvlan แต่ใช้ MAC เดียวกัน",
        "performance": "ดี",
        "use_case": "เมื่อ Switch จำกัด MAC Address",
    },
    "SR-IOV": {
        "description": "Hardware Virtualization ตรงจาก NIC",
        "performance": "ดีมาก ใกล้เคียง Bare Metal",
        "use_case": "High Performance, NFV, CDN Edge",
    },
    "bridge": {
        "description": "Linux Bridge เชื่อม Network",
        "performance": "ปานกลาง",
        "use_case": "ทดสอบ Development",
    },
}

print("Multus CNI Network Types:")
for net_type, info in network_types.items():
    print(f"\n  [{net_type}]")
    for key, value in info.items():
        print(f"    {key}: {value}")

CDN Configuration

# cdn_config.py — CDN Configuration
from dataclasses import dataclass, field
from typing import List, Dict

@dataclass
class CDNEdge:
    location: str
    ip: str
    capacity: str
    networks: List[str]

class CDNArchitecture:
    """CDN Architecture with Multus CNI"""

    def __init__(self):
        self.edges: List[CDNEdge] = []

    def add_edge(self, edge: CDNEdge):
        self.edges.append(edge)

    def show_topology(self):
        print(f"\n{'='*55}")
        print(f"CDN Edge Network Topology")
        print(f"{'='*55}")

        for edge in self.edges:
            print(f"\n  [{edge.location}] {edge.ip}")
            print(f"    Capacity: {edge.capacity}")
            print(f"    Networks: {', '.join(edge.networks)}")

    def cache_config(self):
        """CDN Cache Configuration"""
        cache_rules = {
            "Static Assets": {
                "pattern": "*.js, *.css, *.png, *.jpg, *.woff2",
                "ttl": "1 year (31536000s)",
                "cache_control": "public, max-age=31536000, immutable",
            },
            "HTML Pages": {
                "pattern": "*.html",
                "ttl": "5 minutes (300s)",
                "cache_control": "public, max-age=300, s-maxage=600",
            },
            "API Responses": {
                "pattern": "/api/*",
                "ttl": "0 (no cache) หรือ 60s",
                "cache_control": "private, no-cache หรือ max-age=60",
            },
            "Video/Audio": {
                "pattern": "*.mp4, *.webm, *.mp3",
                "ttl": "1 week (604800s)",
                "cache_control": "public, max-age=604800",
            },
        }

        print(f"\n  CDN Cache Rules:")
        for content, rule in cache_rules.items():
            print(f"\n    [{content}]")
            for key, value in rule.items():
                print(f"      {key}: {value}")

cdn = CDNArchitecture()

edges = [
    CDNEdge("Bangkok (TH)", "10.10.1.10", "100 Gbps",
            ["Management (eth0)", "Data (eth1-macvlan)", "Storage (eth2-sriov)"]),
    CDNEdge("Singapore (SG)", "10.10.2.10", "100 Gbps",
            ["Management (eth0)", "Data (eth1-macvlan)"]),
    CDNEdge("Tokyo (JP)", "10.10.3.10", "50 Gbps",
            ["Management (eth0)", "Data (eth1-macvlan)"]),
    CDNEdge("US West (US)", "10.10.4.10", "100 Gbps",
            ["Management (eth0)", "Data (eth1-sriov)"]),
]

for edge in edges:
    cdn.add_edge(edge)

cdn.show_topology()
cdn.cache_config()

# CDN Providers
providers = {
    "Cloudflare": {"type": "Global CDN + Security", "free_tier": "Yes", "edge_locations": "300+"},
    "AWS CloudFront": {"type": "AWS Integrated CDN", "free_tier": "1TB/month", "edge_locations": "450+"},
    "Fastly": {"type": "Edge Computing CDN", "free_tier": "Limited", "edge_locations": "80+"},
    "Akamai": {"type": "Enterprise CDN", "free_tier": "No", "edge_locations": "4000+"},
    "Bunny CDN": {"type": "Budget CDN", "free_tier": "Trial", "edge_locations": "120+"},
}

print(f"\n\nCDN Providers:")
for provider, info in providers.items():
    print(f"  {provider}: {info['type']} | Edges: {info['edge_locations']} | Free: {info['free_tier']}")

Nginx CDN Edge Config

# nginx_cdn.conf — Nginx CDN Edge Configuration

# # nginx.conf สำหรับ CDN Edge Server
# worker_processes auto;
# worker_rlimit_nofile 65535;
#
# events {
#     worker_connections 65535;
#     multi_accept on;
#     use epoll;
# }
#
# http {
#     # Performance
#     sendfile on;
#     tcp_nopush on;
#     tcp_nodelay on;
#     keepalive_timeout 65;
#     keepalive_requests 1000;
#
#     # Cache Path
#     proxy_cache_path /var/cache/nginx
#         levels=1:2
#         keys_zone=cdn_cache:100m
#         max_size=50g
#         inactive=7d
#         use_temp_path=off;
#
#     # Upstream Origin
#     upstream origin {
#         server origin.example.com:443;
#         keepalive 64;
#     }
#
#     server {
#         listen 80;
#         listen 443 ssl http2;
#         server_name cdn.example.com;
#
#         # SSL
#         ssl_certificate /etc/nginx/ssl/cert.pem;
#         ssl_certificate_key /etc/nginx/ssl/key.pem;
#         ssl_protocols TLSv1.2 TLSv1.3;
#
#         # Static Assets — Cache 1 Year
#         location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
#             proxy_pass https://origin;
#             proxy_cache cdn_cache;
#             proxy_cache_valid 200 365d;
#             proxy_cache_key $uri$is_args$args;
#             add_header X-Cache-Status $upstream_cache_status;
#             add_header Cache-Control "public, max-age=31536000, immutable";
#         }
#
#         # HTML — Cache 5 Minutes
#         location ~* \.html$ {
#             proxy_pass https://origin;
#             proxy_cache cdn_cache;
#             proxy_cache_valid 200 5m;
#             add_header X-Cache-Status $upstream_cache_status;
#         }
#
#         # API — No Cache
#         location /api/ {
#             proxy_pass https://origin;
#             proxy_cache off;
#             add_header Cache-Control "private, no-cache";
#         }
#
#         # Purge Cache
#         location /purge/ {
#             allow 10.0.0.0/8;
#             deny all;
#             proxy_cache_purge cdn_cache $uri;
#         }
#     }
# }

nginx_optimizations = {
    "sendfile": "ส่งไฟล์โดยตรงจาก Kernel ไม่ผ่าน User Space",
    "tcp_nopush": "ส่ง Headers และ Data พร้อมกัน",
    "keepalive": "ใช้ Connection ซ้ำ ลด Handshake",
    "proxy_cache": "Cache Response จาก Origin",
    "gzip": "บีบอัดข้อมูลก่อนส่ง",
    "http2": "Multiplexing หลาย Request บน Connection เดียว",
    "ssl_session_cache": "Cache SSL Session ลด Handshake",
}

print("Nginx CDN Optimizations:")
for opt, desc in nginx_optimizations.items():
    print(f"  {opt}: {desc}")

Best Practices

  • Multus: แยก Management Network กับ Data Network ชัดเจน
  • SR-IOV: ใช้ SR-IOV สำหรับ High Throughput CDN Edge Servers
  • CDN Cache: Static Assets cache นาน API cache สั้นหรือไม่ cache
  • Cache-Control: ใช้ immutable สำหรับ Versioned Assets
  • Purge: มี Cache Purge API สำหรับ Content Update
  • Monitoring: ติดตาม Cache Hit Ratio ควรมากกว่า 90%

Multus CNI คืออะไร

Meta CNI Plugin Kubernetes Pod หลาย Network Interfaces Secondary Networks แยก Management Data Storage SR-IOV High Performance NFV