Kubernetes Networking - Hướng dẫn Toàn diện về Khái niệm Mạng trong Kubernetes



Blog này trên Kubernetes Networking sẽ đi sâu vào các khái niệm liên quan đến Kubernetes như giao tiếp với nhóm, dịch vụ và mạng xâm nhập.

Trong blog trước trên , bạn chắc hẳn đã hiểu về Kubernetes. Trong blog này về mạng Kubernetes, tôi sẽ chủ yếu tập trung vào các khái niệm mạng liên quan đến Kubernetes.

Trong blog này trên Kubernetes Networking, bạn sẽ hiểu các chủ đề sau:





Kubernetes là gì?

Bạn có thể định nghĩa Kubernetes là một công cụ điều phối vùng chứa mã nguồn mở cung cấp một nền tảng di động để tự động hóa việc triển khai các ứng dụng được chứa trong vùng chứa.

Bây giờ, bất kỳ ai làm việc với Kubernetes đều phải hiểu rõ về Kubernetes Cluster vì điều đó sẽ giúp bạn hiểu Kubernetes Networking.



Kubernetes Cluster

Nền tảng Kubernetes cung cấp khả năng quản lý trạng thái mong muốn, cho phép các dịch vụ cụm chạy, cấu hình được cung cấp trong cơ sở hạ tầng. Hãy để tôi giải thích bằng một ví dụ.

Hãy xem xét một tệp YAML có tất cả thông tin cấu hình cần được cung cấp vào các dịch vụ cụm. Vì vậy, tệp này được cung cấp cho API của các dịch vụ cụm, và sau đó, nó sẽ tùy thuộc vào các dịch vụ cụm để tìm ra cách lập lịch nhóm trong môi trường. Vì vậy, giả sử có hai hình ảnh vùng chứa cho nhóm 1 với ba bản sao và một hình ảnh vùng chứa cho nhóm 2 có hai bản sao, dịch vụ cụm sẽ tùy thuộc vào các dịch vụ cụm để phân bổ các cặp bản sao nhóm này cho các nhân viên.

gọi bằng tham chiếu c ++

Kubernetes Cluster - Kubernetes Networking - Edureka



Tham khảo sơ đồ trên. Bây giờ, như bạn có thể thấy rằng các dịch vụ cụm đã phân bổ công nhân đầu tiên với hai cặp bản sao nhóm, công nhân thứ hai với một cặp bản sao nhóm đơn và công nhân thứ ba với hai cặp bản sao nhóm. Bây giờ, quá trình Kubelet chịu trách nhiệm giao tiếp các dịch vụ cụm với người lao động.

Vì vậy, toàn bộ thiết lập này của các dịch vụ cụm và chính các nhân viên tạo nên Cụm Kubernetes !!

Bạn nghĩ các nhóm được phân bổ riêng lẻ này giao tiếp với nhau như thế nào?

Câu trả lời nằm ở Kubernetes Networking!

Đăng ký kênh youtube của chúng tôi để cập nhật những thông tin mới ..!

Chủ yếu có 4 vấn đề cần giải quyết với các khái niệm mạng.

  • Giao tiếp vùng chứa với vùng chứa
  • Pod to pod Giao tiếp
  • Giao tiếp từ nhóm đến dịch vụ
  • Giao tiếp bên ngoài dịch vụ

Bây giờ, hãy để tôi cho bạn biết các vấn đề trên được giải quyết như thế nào với Kubernetes Networking.

Mạng Kubernetes

Giao tiếp giữa các nhóm, các dịch vụ và các dịch vụ bên ngoài với các nhóm trong một cụm mang lại khái niệm về mạng Kubernetes.

Vì vậy, để bạn hiểu rõ hơn, hãy để tôi chia các khái niệm thành các phần sau.

  • Giao tiếp nhóm & vùng chứa
  • Dịch vụ
  • Kết nối bên ngoài với dịch vụ qua mạng Ingress

Giao tiếp nhóm & vùng chứa

Trước khi tôi cho bạn biết làm thế nào để nhóm giao tiếp, hãy để tôi giới thiệu với bạn vỏ là gì?

Vỏ

Pod là đơn vị cơ bản của các ứng dụng Kubernetes, bao gồm một hoặc nhiều vùng chứa được phân bổ trên cùng một máy chủ để chia sẻ ngăn xếp mạng và các tài nguyên khác. Vì vậy, điều này ngụ ý rằng tất cả các vùng chứa trong một nhóm có thể tiếp cận với người khác trên một máy chủ cục bộ.

Bây giờ, hãy để tôi tóm tắt cho bạn về cách các nhóm này giao tiếp với nhau?

Có 2 loại giao tiếp. Các giao tiếp giữa các nútgiao tiếp nội bộ nút.

Vì vậy, hãy bắt đầu với giao tiếp nội bộ, nhưng trước đó, hãy để tôi giới thiệu với bạn các thành phần của mạng nhóm.

Intra-node Under Network

Mạng nội bộ nhóm về cơ bản là giao tiếp giữa hai nút khác nhau trên cùng một nhóm. Hãy để tôi giải thích cho bạn với một ví dụ.

Giả sử một gói đang đi từ pod1 đến pod2.

  • Gói tin rời mạng của Pod 1 tại eth0 và đi vào mạng gốc tại veth0
  • Sau đó, gói tin được chuyển đến cầu nối Linux (cbr0) để phát hiện ra đích bằng cách sử dụng yêu cầu ARP
  • Vì vậy, nếu veth1 có IP, bridge sẽ biết nơi chuyển tiếp gói tin.

Bây giờ, tương tự, hãy để tôi cho bạn biết về giao tiếp nhóm giữa các nút.

Bạn quan tâm đến Học Kubernetes?
Nút liên trong mạng

Hãy xem xét hai nút có không gian tên mạng, giao diện mạng và cầu nối Linux khác nhau.

Bây giờ, giả sử một gói đi từ pod1 đến pod4 nằm trên một nút khác.

  • Gói tin rời khỏi mạng nhóm 1 và đi vào mạng gốc tại veth0
  • Sau đó, gói tin được chuyển đến cầu nối Linux (cbr0) có trách nhiệm thực hiện yêu cầu ARP để tìm đích.
  • Sau khi cầu nối nhận ra rằng nhóm này không có địa chỉ đích, gói tin sẽ quay lại giao diện mạng chính eth0.
  • Bây giờ gói tin rời khỏi nút 1 để tìm điểm đến của nó trên nút kia và đi vào bảng định tuyến, người định tuyến gói đến nút có khối CIDR chứa pod4.
  • Vì vậy, bây giờ gói tin đến node2 và sau đó cầu nối lấy gói tin đó thực hiện một yêu cầu ARP để tìm ra rằng IP thuộc về veth0.
  • Cuối cùng, gói tin đi qua cặp ống dẫn và đến pod4.

Vì vậy, đó là cách các nhóm giao tiếp với nhau. Bây giờ, hãy tiếp tục và xem các dịch vụ trợ giúp như thế nào trong việc giao tiếp các nhóm.

Vì vậy, bạn nghĩ các dịch vụ là gì?

Dịch vụ

Về cơ bản, các dịch vụ là một loại tài nguyên định cấu hình proxy để chuyển tiếp các yêu cầu tới một nhóm các nhóm, nhóm này sẽ nhận lưu lượng truy cập & được xác định bởi bộ chọn. Khi dịch vụ được tạo, nó có địa chỉ IP được chỉ định sẽ chấp nhận các yêu cầu trên cổng.

Giờ đây, có nhiều loại dịch vụ khác nhau cung cấp cho bạn tùy chọn để hiển thị dịch vụ bên ngoài địa chỉ IP cụm của bạn.

Các loại dịch vụ

Chủ yếu có 4 loại dịch vụ.

ClusterIP: Đây là loại dịch vụ mặc định hiển thị dịch vụ trên IP nội bộ cụm bằng cách làm cho dịch vụ chỉ có thể truy cập được trong cụm.

NodePort: Điều này hiển thị dịch vụ trên IP của mỗi Node tại một cổng tĩnh. Từ một ClusterIP dịch vụ mà dịch vụ NodePort sẽ định tuyến, được tạo tự động. Chúng tôi có thể liên hệ với dịch vụ NodePort bên ngoài cụm.

Cân bằng tải: Đây là loại dịch vụ hiển thị dịch vụ ra bên ngoài bằng cách sử dụng bộ cân bằng tải của nhà cung cấp dịch vụ đám mây. Vì vậy, các dịch vụ NodePort và ClusterIP, mà bộ cân bằng tải bên ngoài sẽ định tuyến, được tạo tự động.

Tên bên ngoài : Loại dịch vụ này ánh xạ dịch vụ tới nội dung của externalName trường bằng cách trả về CNAME ghi lại với giá trị của nó.

Vì vậy, những người đó là tất cả về dịch vụ. Bây giờ, bạn có thể tự hỏi làm thế nào để các dịch vụ bên ngoài kết nối với các mạng này phải không?

Chà, đó không ai khác ngoài Mạng Ingress .

Mạng Ingress

Chà, mạng Ingress là cách mạnh mẽ nhất để hiển thị các dịch vụ vì nó là một tập hợp các quy tắc cho phép kết nối đến, có thể được định cấu hình để cung cấp dịch vụ ra bên ngoài thông qua các URL có thể truy cập. Vì vậy, về cơ bản nó hoạt động như một điểm vào đến cụm Kubernetes quản lý quyền truy cập bên ngoài vào các dịch vụ trong một cụm.

Bây giờ, hãy để tôi giải thích cho bạn về hoạt động của Ingress Network bằng một ví dụ.

Chúng tôi có 2 nút, có không gian tên mạng gốc và nhóm với một cầu nối Linux. Ngoài ra, chúng tôi cũng có một thiết bị ethernet ảo mới được gọi là flannel0 (plugin mạng) được thêm vào mạng gốc.

Bây giờ, chúng ta muốn gói tin chuyển từ pod1 sang pod 4.

  • Vì vậy, gói tin rời mạng của pod1 tại eth0 và đi vào mạng gốc tại veth0.
  • Sau đó, nó được chuyển cho cbr0, điều này thực hiện yêu cầu ARP tìm đích và sau đó nó phát hiện ra rằng không ai trên nút này có địa chỉ IP đích.
  • Vì vậy, cầu gửi gói đến flannel0 khi bảng tuyến của nút được cấu hình bằng flannel0.
  • Bây giờ, daemon flannel nói chuyện với máy chủ API của Kubernetes để biết tất cả các IP nhóm và các nút tương ứng của chúng để tạo ánh xạ cho các IP nhóm đến các IP nút.
  • Plugin mạng bao bọc gói này trong một gói UDP với các tiêu đề bổ sung thay đổi IP nguồn và đích đến các nút tương ứng của chúng và gửi gói này ra ngoài qua eth0.
  • Bây giờ, vì bảng định tuyến đã biết cách định tuyến lưu lượng giữa các nút, nó sẽ gửi gói tin tới nút đích2.
  • Gói tin đến eth0 của node2 và quay trở lại flannel0 để khử đảo lộn và phát nó trở lại trong không gian tên mạng gốc.
  • Một lần nữa, gói tin được chuyển tiếp đến cầu nối Linux để thực hiện một yêu cầu ARP để tìm ra IP thuộc về veth1.
  • Cuối cùng, gói tin đã vượt qua mạng gốc và đến được Pod4 đích.

Vì vậy, đó là cách các dịch vụ bên ngoài được kết nối với sự trợ giúp của mạng xâm nhập. Bây giờ, khi tôi đang nói về Plugin mạng, hãy để tôi giới thiệu với bạn danh sách các plugin mạng phổ biến hiện có.

Bây giờ, tôi đã nói với bạn rất nhiều về Mạng Kubernetes, hãy để tôi cho bạn xem một nghiên cứu điển hình thực tế.

Nghiên cứu điển hình: Thuật sĩ làm giàu bằng cách sử dụng mạng Kubernetes

Wealth Wizards là một nền tảng lập kế hoạch tài chính trực tuyến kết hợp kế hoạch tài chính và công nghệ phần mềm thông minh để cung cấp lời khuyên từ chuyên gia với chi phí hợp lý.

Thách thức

Giờ đây, điều cực kỳ quan trọng đối với công ty là phải nhanh chóng phát hiện và loại bỏ các lỗ hổng mã với khả năng hiển thị đầy đủ trên môi trường đám mây của họ nhưng muốn kiểm soát lưu lượng thông qua các hạn chế truy cập.

Vì vậy, họ đã sử dụng cơ sở hạ tầng Kubernetes để quản lý việc cung cấp và triển khai các cụm với sự trợ giúp của các công cụ để quản lý việc triển khai và cấu hình các microservices trên các cụm Kube.

Họ cũng sử dụng một tính năng chính sách mạng của Kubernetes để cho phép họ kiểm soát lưu lượng truy cập thông qua các hạn chế truy cập.

Vấn đề là, các chính sách này hướng đến ứng dụng và chỉ có thể phát triển với các ứng dụng, nhưng không có thành phần nào để thực thi các chính sách này.

Vì vậy, giải pháp duy nhất mà công ty có thể tìm ra cho việc này là sử dụng một plugin mạng và do đó họ bắt đầu sử dụng Weave Net.

Giải pháp

Plugin mạng này tạo ra một mạng ảo có bộ điều khiển chính sách mạng để quản lý và thực thi các quy tắc trong Kubernetes. Không chỉ điều này, mà nó còn kết nối các vùng chứa Docker trên nhiều máy chủ và cho phép tự động khám phá chúng.

Vì vậy, giả sử bạn có một khối lượng công việc trong cụm và bạn muốn dừng bất kỳ khối lượng công việc nào khác trong cụm đang nói chuyện với nó. Bạn có thể đạt được điều này bằng cách tạo chính sách mạng hạn chế quyền truy cập và chỉ cho phép xâm nhập vào nó thông qua bộ điều khiển xâm nhập trên một cổng cụ thể.

Giờ đây, với việc triển khai của anh ấy trên mỗi nút Kubernetes, plugin quản lý định tuyến giữa các nhóm và có quyền truy cập để thao tác các quy tắc IPtables. Nói một cách dễ hiểu, mỗi chính sách được chuyển đổi thành một tập hợp các quy tắc IPtables, được phối hợp và định cấu hình trên mỗi máy để dịch các thẻ Kubernetes.

Được rồi, bây giờ bạn đã trải qua quá nhiều lý thuyết về Mạng Kubernetes, hãy để tôi chỉ cho bạn cách nó được thực hiện trên thực tế.

Thực hành

Vì vậy, với giả định rằng tất cả các bạn đã cài đặt Kubernetes trên hệ thống của mình, tôi có một kịch bản để giới thiệu.

Giả sử bạn muốn lưu trữ tên sản phẩm và ID sản phẩm, bạn sẽ cần một ứng dụng web. Về cơ bản, bạn cần một vùng chứa cho ứng dụng web và bạn cần một vùng chứa nữa làm MySQL cho phần phụ trợ và vùng chứa MySQL đó phải được liên kết với vùng chứa ứng dụng web.

Làm thế nào về việc tôi thực hiện ví dụ nêu trên một cách thực tế.

Bắt đầu nào!

Bước 1: Tạo một thư mục trong thư mục mong muốn của bạn và thay đổi đường dẫn thư mục làm việc đến thư mục đó.

mkdir HandsOn cd HandsOn /

Bước 2: Bây giờ, hãy tạo các tệp YAML triển khai cho ứng dụng web và cơ sở dữ liệu MySQL.

Bước 3: Sau khi bạn tạo tệp triển khai, hãy triển khai cả hai ứng dụng.

kubectl apply -f webapp.yml kubectl apply -f mysql.yml

Bước 3.1: Kiểm tra cả hai lần triển khai.

kubectl nhận triển khai

Bước 4: Bây giờ, bạn phải tạo dịch vụ cho cả hai ứng dụng.

kubectl apply -f webservice.yml kubectl apply -f sqlservice.yml

Bước 4.1: Sau khi các dịch vụ được tạo, hãy triển khai các dịch vụ.

Bước 4.2: Kiểm tra xem các dịch vụ đã được tạo hay chưa.

kubectl nhận dịch vụ

Bước 5: Bây giờ, hãy kiểm tra cấu hình của các nhóm đang chạy.

kubectl lấy vỏ

Bước 6: Đi vào vùng chứa bên trong nhóm ứng dụng web.

kubectl execute -it container_id bash nano var / www / html / index.php

Bước 6.1 : Bây giờ, hãy thay đổi $ servername từ localhost sang tên dịch vụ SQL là “ webapp-sql1 ”Trong trường hợp này, và mật khẩu $ từ “” đến “ edureka ”. Ngoài ra, hãy điền tất cả các chi tiết cơ sở dữ liệu được yêu cầu và lưu tệp index.php của bạn bằng cách sử dụng phím tắt Ctrl + x và sau đó bấm Y để lưu và nhấn đi vào .

Bước 7: Bây giờ, hãy đi vào vùng chứa MySQL có trong nhóm.

kubectl thực thi nó container_id bash

Bước 7.1: Nhận quyền truy cập để sử dụng vùng chứa MySQL.

mysql -u root -p edureka

Trong đó -u đại diện cho người dùng và -p là mật khẩu của máy tính của bạn.

Bước 7.2: Tạo cơ sở dữ liệu trong MySQL sẽ được sử dụng để lấy dữ liệu từ ứng dụng web.

TẠO CƠ SỞ DỮ LIỆU Sản phẩm

Bước 7.3: Sử dụng cơ sở dữ liệu đã tạo.

SỬ DỤNG Chi tiết sản phẩm

Bước 7.4: Tạo một bảng trong cơ sở dữ liệu này trong MySQL sẽ được sử dụng để lấy dữ liệu từ ứng dụng web.

TẠO sản phẩm BẢNG (product_name VARCHAR (10), product_id VARCHAR (11))

Bước 7.5: Bây giờ, thoát khỏi vùng chứa MySQL bằng cách sử dụng lệnh lối ra .

Bước 8: Kiểm tra số cổng mà ứng dụng web của bạn đang hoạt động.

kubectl nhận dịch vụ

Bước 8.1: Bây giờ, hãy mở ứng dụng web trên số cổng được phân bổ của ứng dụng đó.

Bước 9: Khi bạn nhấp vào Gửi truy vấn , đi đến nút mà dịch vụ MySQL của bạn đang chạy và sau đó vào bên trong vùng chứa.

Điều này sẽ hiển thị cho bạn kết quả của tất cả các sản phẩm trong danh sách mà bạn đã điền thông tin chi tiết.

Bạn quan tâm đến Học Kubernetes?

Nếu bạn thấy blog Kubernetes Networking này có liên quan, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu.