Tìm hiểu về CNI

Tìm hiểu về CNI

Container Network Interface (CNI) là gì?

Giao diện mạng container (CNI) là một khung để cấu hình động các tài nguyên mạng. Nó sử dụng một nhóm thư viện và thông số kỹ thuật được viết bằng Go. Đặc tả plugin xác định giao diện để định cấu hình mạng, cung cấp địa chỉ IP và duy trì kết nối với nhiều máy chủ.

Khi được sử dụng với Kubernetes, CNI có thể tích hợp với kubelet để cho phép sử dụng mạng overlay hoặc underlay nhằm tự động định cấu hình mạng giữa các pod. Mạng overlay đóng gói lưu lượng mạng bằng giao diện ảo như VXLAN. Mạng underlay hoạt động ở cấp độ vật lý và bao gồm các thiết bị switch, router.

Sau khi chọn loại cấu hình mạng (overlay hoặc underlay) , container runtime sẽ xác định mạng mà containers sẽ join. container runtime thêm interface vào containers namespacec thông qua lệnh gọi đến plugin CNI và phân bổ các subnet thông qua gọi đến plugin IPAM.

CNI hỗ trợ kết nối mạng Kubernetes và cũng có thể được sử dụng với các orchestration plattform khác như OpenShift. CNI sử dụng phương pháp SDN để thống nhất giao tiếp của các containers trong cụm.

Giải thích về mạng Kubernetes

Kubernetes là một orchestration nguồn mở được phát triển bởi Google. Nó được sử dụng để quản lý và tự động hóa việc triển khai container trên cluster. Kubernetes cho phép bạn vận hành, lên lịch, giám sát và duy trì các container.

Kubernetes cũng có thể được sử dụng để kết nối mạng, cho phép quản trị viên di các container giữa các cơ sở hạ tầng khác nhau. Kubernetes cho phép các nhà phát triển nhanh chóng đóng gói và triển khai các ứng dụng bằng cơ sở hạ tầng ưa thích của họ, điều này rất hữu ích cho việc phát triển các phiên bản mới.

Với mạng Kubernetes, các thành phần Kubernetes có thể giao tiếp với các ứng dụng khác nhau và với nhau. Kubernetes khác với các nền tảng mạng khác ở chỗ nó có cấu trúc mạng phẳng, nghĩa là các cổng máy chủ không cần phải ánh xạ tới các cổng container. Nó cho phép bạn chạy một hệ thống phân tán, trong đó các máy được chia sẻ giữa các ứng dụng mà không cần phân bổ cổng động.

Ban đầu, các pod không có giao diện mạng. Để tạo giao diện mạng cho container, container runtime sẽ gửi lệnh Add đến plugin CNI. Sau khi network interface được tạo, JSON payload sẽ được chuyển về CNI.

Tại sao Kubernetes CNI?

CNI là một sáng kiến ​​của Tổ chức Điện toán Đám mây (CNCF).
CNI được tạo ra để làm cho các giải pháp mạng có thể tích hợp giữa các hệ thống orchestration và runtime.

CNI tập trung vào khả năng kết nối của mạng container và việc loại bỏ các tài nguyên đã được phân bổ khi các container bị terminate. Việc tập trung vào các mục tiêu này làm cho các thông số kỹ thuật của CNI trở nên đơn giản và cho phép chúng được áp dụng rộng rãi. Dự án CNI GitHub cung cấp thêm thông tin về các thông số kỹ thuật của CNI, bao gồm các plugin của bên thứ ba sử dụng nó.

Sự cần thiết của các Kubernetes network plugin

CNI có vô số plugin được hỗ trợ, với các framework chính như Kubernetes đã triển khai nó. Các plugin giải quyết các chức năng mạng vùng chứa khác nhau và phải tuân thủ các tiêu chuẩn CNI được xác định bởi đặc tả CNI.

CNI cung cấp thông số kỹ thuật cho nhiều plugin vì mạng rất phức tạp và nhu cầu của người dùng có thể khác nhau. Điều cần thiết là chọn các plugin phù hợp cho dự án và nhu cầu sử dụng của bạn.

Những mô hình mạng nào được sử dụng trong CNI?

Mạng CNI có thể được triển khai bằng mô hình encapsulated hoặc unencapsulated. XLAN là một ví dụ về mô hình được encapsulated , trong khi BGP là một ví dụ về mô hình unencapsulated.

Mạng encapsulated

Mô hình này đóng gói (encapsulates) mạng Lớp 2 trên mạng Lớp 3 của các máy K8s. Mạng lớp 2 bị cô lập nên không cần quảng bá định tuyến nó giúp cho sử dụng ít tài nguyên, đồng thời cung cấp khả năng xử lý được cải thiện với các gói tin lớn hơn—việc encapsulates lớp overlay tạo ra IP header cho các gói tin IP.

Port UDP được đóng gói giữa các worker trong Kubernetes, thông tin được chuyển đổi từ network control plane để đến địa chỉ MAC. Ví dụ về các mô hình mạng đóng gói phổ biến bao gồm VXLAN và Giao thức IPsec.

Nói một cách đơn giản, mô hình này cung cấp cầu nối kết nối các worker và pod trong Kubernetes. Trong pod, phần tử quản lý giao tiếp là Docker hoặc một container khác. Nó được áp dụng cho các trường hợp cần sử dụng bridge Lớp 2 vì nó nhạy cảm với độ trễ. Đối với các trung tâm dữ liệu ở các vị trí địa lý riêng biệt, điều quan trọng là giảm thiểu độ trễ giữa chúng để ngăn chặn sự phân đoạn mạng.

Ví dụ về các CNI tuân theo mô hình mạng này bao gồm Canal, Flannel và Weave.

Mạng unencapsulated

Mô hình này cung cấp mạng Lớp 3 để định tuyến các gói giữa các pod. Kubernetes phải quản lý bảng định tuyến. Giao thức mạng được triển khai để kết nối các workers và sử dụng BGP để phân phối thông tin định tuyến đến các pod.

Mô hình này liên quan đến việc mở rộng bộ định tuyến mạng giữa các worker. Mạng unencapsulated phù hợp với các trường hợp sử dụng định tuyến Lớp 3. Định tuyến được cập nhật động ở cấp hệ điều hành, giúp giảm độ trễ.

Ví dụ về các nhà cung cấp sử dụng mô hình mạng không đóng gói bao gồm Romana và Calico.

Kết nối Kubernetes với Calico

Kiến trúc mô-đun linh hoạt của Calico hỗ trợ nhiều tùy chọn triển khai, vì vậy bạn có thể chọn phương pháp kết nối mạng tốt nhất cho môi trường và nhu cầu cụ thể của mình. Điều này bao gồm khả năng chạy với nhiều plugin CNI và IPAM cũng như các loại mạng cơ bản, ở chế độ non-overlay hoặc overlay, có hoặc không có BGP.

Kiến trúc mô-đun linh hoạt của Calico dành cho mạng bao gồm những điều sau.

  • Plugin mạng Calico CNI – Kết nối các pod với định tuyến L3 bằng cách sử dụng một cặp thiết bị ethernet ảo (cặp veth).
  • Plugin Calico CNI IPAM – Phân bổ địa chỉ IP cho các pod trong một hoặc nhiều dải địa chỉ IP có thể định cấu hình, phân bổ động các khối IP nhỏ trên mỗi nút theo yêu cầu.
  • Chế độ overlay network – Calico cung cấp cả mạng encapsulated VXLAN hoặc IP-in-IP, bao gồm các chế độ chỉ mạng con chéo.
  • Chế độ non-overlay network Calico có thể cung cấp các mạng non-overlay chạy trên bất kỳ mạng L2 cơ bản nào, mạng L3 hoặc mạng có khả năng BGP.
  • Enforcement chính sách mạng – Công cụ thực thi chính sách mạng của Calico triển khai đầy đủ các tính năng Chính sách mạng Kubernetes, cùng với các tính năng mở rộng của Chính sách mạng Calico.

Ngoài việc cung cấp cả plugin mạng và IPAM, Calico còn tích hợp với một số plugin CNI của bên thứ ba khác và tích hợp nhà cung cấp đám mây, bao gồm Amazon VPC CNI, Azure CNI, nhà cung cấp đám mây Azure, nhà cung cấp đám mây Google, lưu trữ IPAM cục bộ và Flannel .

Nguồn tham khảo: https://www.tigera.io/learn/guides/kubernetes-networking/kubernetes-cni/

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply