Mạng Linux & Container/Tổng kết module & track Networking
21/21
Bài 21 / 21~12 phútKubernetes Networking (nhập môn)Miễn phí lượt xem

Tổng kết module & track Networking

Recap K8s networking + cả track foundations→web→containers. Cheat sheet pod/CNI/Service, glossary, 5 self-assessment, học tiếp mesh/eBPF.

TL;DR: Module 3 scale plumbing M1–M2 lên cluster: pod = netns + IP phẳngCNI (interface gắn veth/bridge/route) → Service + kube-proxy (VIP + DNAT/IPVS) → Ingress/NodePort/LB (cửa L4/L7) → NetworkPolicy (filter theo identity, chỉ khi CNI enforce). Kubernetes không invent TCP stack mới. Bookmark trang này: map K8s ↔ Linux/Docker, cheat sheet lệnh, glossary, self-assessment 5 outcome, nhìn lại cả track foundations → web → containers, và gợi ý học tiếp (service mesh, eBPF — ngoài scope course này).

Đã đi qua những gì

Bạn bắt đầu từ contract pod: mỗi pod một IP cluster-wide; model pod-to-pod không NAT; container trong pod share một netns (localhost, cùng port space); pause/infra giữ netns. Dưới hood: cùng veth + bridge/route Module 1–2 — chỉ đơn vị deploy đổi từ “một container” sang “một pod”.

Tiếp theo CNI: kubelet gọi binary theo spec interface — Flannel / Calico / Cilium là implementation, không phải “mạng K8s”. Trade-off overlay (encapsulation, dễ multi-subnet) vs routed (route/BGP thuần, latency/ops khác). Plugin không implement NetworkPolicy ⇒ YAML policy im lặng.

Rồi Service: ClusterIP là VIP (không process listen); Endpoints/EndpointSlice là sổ backend; kube-proxy rewrite (iptables DNAT hoặc IPVS) tới pod IP:port — đúng họ DNAT Module 2, quy mô nhiều backend. Expose: ClusterIP nội bộ; NodePort/LoadBalancer L4 ra ngoài; Ingress (cần controller) route L7 host/path + TLS.

Cuối NetworkPolicy: default allow nếu chưa có policy chạm pod; isolation khi có; selector pod/namespace/ipBlock; rule additive (union); default-deny hay quên DNS egress. Pitfall cứng: policy không enforce nếu CNI không hỗ trợ — full-mesh dù YAML xanh.

Bản đồ module (khái niệm):

flowchart LR
    P["1. Pod network<br/>flat IP + shared netns"] --> C["2. CNI<br/>plugin interface"]
    C --> S["3. Service<br/>kube-proxy DNAT/IPVS"]
    S --> I["4. Ingress / L4 entry<br/>host path TLS"]
    I --> N["5. NetworkPolicy<br/>identity filter"]

🗺️ Bản đồ cả track Networking

Ba course tuần tự — mỗi tầng giả định tầng dưới đã thấm:

flowchart TB
    F["Tier 1 — Foundations<br/>packet, IP, route, port, DNS"]
    W["Tier 2 — Web<br/>TCP/UDP, HTTP, TLS, cong cu"]
    C["Tier 3 — Containers<br/>stack, netns, NAT, K8s"]
    F --> W --> C
CourseBạn mang đi được gìLink
Networking FoundationsPacket đi từ máy bạn tới server: model TCP/IP, địa chỉ & định tuyến, port/socket, DNS.Bắt đầu track
Networking WebTCP vs UDP, HTTP/web, TLS + chứng chỉ, bộ công cụ debug (dig/curl/ss/tcpdump).Tiếp theo
Networking Containers (course này)Plumbing Linux → Docker-style bridge + SNAT/DNAT → nhập môn K8s (pod/CNI/Service/Ingress/NetworkPolicy).Capstone track

Cheat sheet dọc track (một dòng mỗi chặng)

ChặngÝ chính
Packet / stackNIC → softirq → sk_buff → netfilter → socket
IP + routeL3 tới host; bảng route quyết định next hop
Port / socketProcess listen; ss soi local
DNSTên → IP trước khi TCP
TCP / HTTP / TLSByte stream, request/response, kênh mã hoá
netns + veth + bridgeIsolation + cáp + LAN ảo (docker0)
SNAT / DNATEgress MASQUERADE; publish port PREROUTING
Pod + CNInetns scale + plugin gắn mạng
Service + IngressVIP + DNAT/IPVS; cửa L4/L7
NetworkPolicyFilter identity — cần CNI enforce

🗺️ Cheat sheet Module 3

Map K8s → plumbing Linux / Docker

Khái niệm K8sMap M1–M2Nhìn nhanh
PodNetwork namespace (+ multi-container share)kubectl execip addr / ss trong pod
Pod IPIP trên eth trong netns podkubectl get pod -o wide
Pause / infraProcess giữ netns sốngXoá pod = teardown netns + iface
CNI pluginScript veth + bridge/route/overlay thay Docker daemonBinary + conf trong /etc/cni/net.d (tuỳ distro)
Service ClusterIPVIP — không listen processkubectl get svc — dải service CIDR
kube-proxy (iptables)DNAT / probability load-balance (họ Module 2)Survey iptables -t nat -L -n (node)
kube-proxy (IPVS)Virtual server L4 trong kernelipvsadm -Ln (khi mode IPVS)
Endpoints / EndpointSliceSổ pod IP:port backendkubectl get endpoints / endpointslice
NodePortDNAT host:nodePort → podMở L4 trên mọi node
LoadBalancerCloud/provider VIP → NodePort/backendL4 ngoài cluster
Ingress + controllerProxy L7 (host/path) + TLSYAML Ingress không thay controller
NetworkPolicyfilter theo label (dataplane CNI)Không enforce nếu plugin không support

Lệnh survey (cluster demo)

ViệcLệnh
Pod IP + nodekubectl get pods -o wide
Service + ClusterIPkubectl get svc / kubectl describe svc NAME
Backend thậtkubectl get endpoints NAME / kubectl get endpointslice
Vào netns “view” podkubectl exec -it POD -- ip -br a / ss -lntp
Events / selector`kubectl describe pod
NetworkPolicy listkubectl get networkpolicy -A
CNI conf trên node (lab)ls /etc/cni/net.d (SSH/node shell; tuỳ kind/k3s path)

Bốn kiểu expose — chọn theo chiều traffic

KiểuTầngAi thấyKhi nào
ClusterIPL4 VIP nội bộTrong clusterService-to-service
NodePortL4 host portNgoài qua nodeIP:nodePortLab / on-prem đơn giản
LoadBalancerL4 VIP ngoàiInternet/VPC qua providerCloud production L4
IngressL7 host/path (+ TLS)HTTP(S) đa service một IPAPI/web nhiều host/path

NetworkPolicy — checklist 30 giây

  1. Có policy chạm pod subject chưa? (chưa → default allow.)
  2. CNI/plugin có enforce NetworkPolicy không?
  3. Cả hai phía (ingress subject + egress peer) có rule cho phép không?
  4. Default-deny egress: đã cho DNS (port 53) chưa?
  5. Selector label khớp thật (kubectl get pod --show-labels)?

📖 Glossary module & track (rút gọn)

Thuật ngữĐịnh nghĩa 1 câu
Pod network modelMọi pod IP thấy nhau (trong model); không NAT pod-to-pod trừ segmentation có chủ đích.
Shared netnsMọi container trong pod dùng chung IP, port space, localhost.
Pause / infra containerContainer “ngủ” giữ network namespace khi app container join cùng ns.
CNIContainer Network Interface — spec gọi plugin gắn/tháo mạng pod; không phải một hãng.
OverlayGói pod bọc thêm (vd VXLAN) để đi trên underlay — trade-off ops vs encapsulation.
Routed / BGP CNIPod IP được route thuần (không bọc) — latency/ops khác overlay.
ClusterIPVIP Service nội cluster; không process listen.
kube-proxyAgent node rewrite/load-balance traffic tới Service → pod (iptables hoặc IPVS).
EndpointSliceAPI object (thay/kèm Endpoints) liệt kê backend pod sẵn sàng.
NodePortMở port trên mỗi node, forward vào Service/pod.
LoadBalancerService type + VIP provider (cloud/metalLB…) trước cluster.
IngressAPI L7 (host/path); cần Ingress controller triển khai thật.
NetworkPolicyPolicy filter traffic pod theo label/namespace/CIDR — dataplane do CNI.
Default denyPolicy cô lập: không match rule ⇒ drop (sau khi isolation bật).
netns / veth / bridgePlumbing M1–M2: isolation, cáp ảo, switch L2 — nền pod + Docker bridge.
SNAT / DNAT / MASQUERADERewrite source/dest trên netfilter — egress container & publish port; họ hàng Service.

⚠️ Pitfall tổng hợp (M3 + nối track)

  • "ClusterIP timeout từ laptop = Service hỏng." VIP thường chỉ trong cluster — curl từ ngoài không chứng minh pod chết.
  • "Pod IP = Service IP." Pod IP ephemeral + eth thật; ClusterIP là VIP rewrite.
  • "Cài Calico/Cilium = hiểu CNI." Học interface trước brand; đổi plugin không đổi contract pod model.
  • "Ingress YAML apply xong là có HTTPS." Không controller / sai class ⇒ object nằm im; TLS còn Secret + terminate đúng hop.
  • "NetworkPolicy default deny mọi thứ an toàn ngay." Quên DNS egress = app “mất mạng” theo cách khó đọc; và không có enforce = YAML trang trí.
  • "Timeout app K8s = restart pod." Map lại: DNS (tier 1–2) → TCP/TLS → netns/veth/CNI → Service endpoints/kube-proxy → policy — cùng mindset chặng đã học cả track.
  • "kind = production CNI." kind đủ minh hoạ pod IP/Service; NetworkPolicy có thể không enforce — đó là bài học pitfall, không phải “K8s sai”.

✅ Self-assessment

Bạn đã đạt module này nếu trả lời được:

  • Explain mô hình pod networking (flat IP, shared netns, pause container) và liên hệ veth/bridge
  • Explain CNI là interface (không implementation) và trade-off overlay vs routed
    • Nếu chưa: 02 — CNI là gì; spec vs Flannel/Calico/Cilium; bảng overlay vs routed; policy phụ thuộc plugin.
  • Trace traffic tới pod qua Service và kube-proxy (iptables/IPVS)
  • Compare ClusterIP, NodePort, LoadBalancer và Ingress theo chiều traffic L4/L7
  • Design NetworkPolicy ingress/egress cơ bản và nhận biết khi policy không có hiệu lực
    • Nếu chưa: 05 — NetworkPolicy; isolation, both-sides allow, default-deny + DNS, CNI không enforce.

Nhìn lại course — ba module containers

ModulePlumbing bạn đã “sờ”
M1 — Linux Network InternalsStack, veth/tun/tap, bridge, iptables/netfilter
M2 — Container Networkingnetns, bridge from scratch, SNAT, DNAT, nsenter/tcpdump
M3 — Kubernetes NetworkingPod, CNI, Service/kube-proxy, Ingress, NetworkPolicy

Nếu self-assessment còn trống: quay đúng bài concept (không nhảy YAML production). Capstone chỉ chắc khi M1–M2 đã thấm tay.

Học tiếp (ngoài scope v1)

Course dừng ở bản đồ nhập môn K8s networking. Các chủ đề sau không nằm trong scope v1 — học khi đã debug được pod/Service/policy bằng plumbing Linux:

HướngVì sao để sauGợi ý tiếp cận
Service mesh (Istio, Linkerd, Cilium service mesh…)Thêm data plane sidecar/ztunnel, mTLS, traffic policy L7 chồng lên Service/CNI — dễ nhầm “mesh = thay CNI”.Nắm Service + NetworkPolicy trước; rồi lab mesh trên cluster demo, trace thêm hop proxy.
eBPF dataplane (Cilium eBPF, kube-proxy replacement…)Bypass/cạnh iptables, observability sâu, map kernel — ops và failure mode khác rule netfilter cổ điển.Giữ mental model “rewrite + filter trên path”; học eBPF như implementation mới của cùng ý.
Multi-cluster / Gateway APIMở rộng Ingress/L7 và east-west đa cluster — API và topology phức tạp hơn v1.Đọc Gateway API sau khi Ingress + controller đã rõ.
Network observabilityHubble, flow log, packet path multi-hop mesh.tcpdump/Hubble chỉ mạnh khi đã biết điểm capture (M2 debug).
Ranh giới course

Trong scope: đọc và debug pod IP, CNI cơ bản, Service/kube-proxy, expose L4/L7, NetworkPolicy “có/không enforce”.
Ngoài scope: vận hành mesh production, viết eBPF, multi-CNI HA, platform networking cloud chi tiết. Đừng coi thiếu mesh/eBPF là “course dở” — đó là tầng sau khi nền tảng đã chắc.

Track Networking — bạn đã đi hết ba course. Giữ trang này + recap M1/M2 làm cheat sheet khi on-call: mọi “mạng K8s hỏng” cuối cùng vẫn là packet, namespace, rule, và process listen.

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên