Networking trong DevOps Hướng dẫn cho người mới bắt đầu

Mạng máy tính có thể nghe có vẻ khô khan hoặc quá kỹ thuật lúc đầu, nhưng thực sự nó là xương sống của mọi thứ mà DevOps đại diện: hợp tác, tự động hóa và hiệu quả. Dù là triển khai ứng dụng trên đám mây, tự động hóa pipeline hay khắc phục sự cố trong môi trường sản xuất, hiểu biết về cách mạng hoạt động có thể quyết định thành bại trong quy trình làm việc của bạn.

Trong bài viết này, chúng ta sẽ đề cập đến một số kiến thức cơ bản về mạng trong DevOps: tại sao nó lại quan trọng và làm thế nào bạn có thể sử dụng nó để tối ưu hóa quy trình của mình. Không có gì quá phức tạp, chỉ là một số mẹo thực tế để giúp bạn vượt qua thế giới mạng trong DevOps. Hãy bắt đầu nào!

Những nguyên tắc cơ bản về mạng trong DevOps

Được rồi, hãy phân tích nó: Mạng trong thế giới DevOps là gì? Nói một cách đơn giản, mạng là sự kết nối giữa các thiết bị, hệ thống và ứng dụng để chúng có thể giao tiếp và làm việc cùng nhau một cách trơn tru. Đối với DevOps, điều này có nghĩa là cơ sở hạ tầng, ứng dụng và công cụ của bạn đều cần phải hoạt động một cách hài hòa.

Các khái niệm cơ bản về mạng

Về cơ bản, mạng liên quan đến địa chỉ IP, DNS, cổng và giao thức. Hãy coi địa chỉ IP như địa chỉ nhà của hệ thống, DNS như bản đồ dịch tên thành địa chỉ, và cổng như các cửa cụ thể cho các loại lưu lượng truy cập nhất định. Những kiến thức cơ bản này cho phép ứng dụng của bạn giao tiếp với cơ sở dữ liệu và máy chủ.

Các giao thức và công cụ chính

Trong DevOps, bạn sẽ thường nghe về các giao thức như HTTP/HTTPS (cho lưu lượng web), SSH (để truy cập an toàn vào máy chủ) và FTP/SFTP (để chuyển tệp). Ngoài ra, các công cụ như cURL, Wireshark hoặc thậm chí bảng điều khiển của nhà cung cấp đám mây có thể giúp bạn khắc phục sự cố và tối ưu hóa cấu hình mạng.

Các lớp mạng và vai trò của chúng trong DevOps

Mạng được xây dựng dựa trên các lớp, giống như các lớp của một chiếc bánh. Mỗi lớp chịu trách nhiệm cho một nhiệm vụ cụ thể, từ việc truyền tải dữ liệu vật lý đến việc dịch nó thành thứ mà ứng dụng của bạn có thể hiểu được. Đối với DevOps, hai lớp quan trọng nhất là lớp vận chuyển, đảm bảo dữ liệu đến đúng nơi cần đến, và lớp ứng dụng, xử lý cách các ứng dụng tương tác với dữ liệu đó.

Nắm vững những kiến thức cơ bản là một chuyện, nhưng hoàn thiện mạng cho DevOps lại là một câu chuyện hoàn toàn khác. Khi đã nắm vững những điều này, việc tự động hóa, bảo mật và mở rộng cơ sở hạ tầng sẽ trở nên dễ dàng hơn nhiều.

Những thách thức về mạng trong DevOps

Không phải mọi thứ về mạng trong DevOps đều suôn sẻ. Có những thách thức bổ sung trong việc triển khai nhanh chóng, hệ thống phân tán và chiến lược ưu tiên đám mây, nơi mà đôi khi mạng có thể trở thành một mảnh ghép phức tạp. Hãy cùng thảo luận về một số vấn đề mà bạn có thể gặp phải.

Quản lý môi trường động

Trong DevOps, môi trường thay đổi thường xuyên — các container mới được khởi chạy, máy chủ mở rộng động và khối lượng công việc chuyển đổi giữa on-prem và đám mây. Theo dõi cấu hình mạng trong một môi trường nhanh chóng như vậy có thể khiến bạn cảm thấy choáng ngợp. Địa chỉ IP tĩnh và thiết lập thủ công? Hãy quên chúng đi. Bạn cần các công cụ tự động hóa và giải pháp có thể thích ứng nhanh chóng như cơ sở hạ tầng của bạn.

Đảm bảo khả năng mở rộng và độ tin cậy

Khi lưu lượng truy cập tăng đột biến trong quá trình ra mắt sản phẩm hoặc một sự kiện lớn, mạng của bạn phải xử lý tải mà không gặp vấn đề gì. Các nhóm DevOps thường gặp khó khăn trong việc mở rộng mạng một cách hiệu quả trong khi vẫn duy trì hiệu suất ổn định. Cân bằng tải, tự động mở rộng và các công cụ mạng đám mây như bộ điều khiển ingress của Kubernetes là cứu cánh trong những tình huống này.

Đối phó với rủi ro bảo mật

Khi các hệ thống và ứng dụng trở nên kết nối nhiều hơn, chúng cũng trở nên dễ bị tấn công hơn. Tường lửa bị cấu hình sai, cổng bị lộ hoặc API không an toàn có thể khiến mạng của bạn dễ bị tấn công. Trong quy trình DevOps, việc giữ bảo mật chặt chẽ trong khi đảm bảo tốc độ là một cuộc đấu tranh không ngừng.

Giám sát và khắc phục sự cố

Khi có sự cố xảy ra trong một hệ thống phân tán, việc tìm ra nguyên nhân gốc rễ có thể giống như tìm kim đáy bể. Đó là sự cố DNS? Định tuyến bị cấu hình sai? Hay điều gì đó sâu xa hơn? Nếu không có các công cụ giám sát và ghi nhật ký phù hợp, việc khắc phục sự cố mạng có thể tốn hàng giờ đồng hồ.

Hợp tác giữa các nhóm

Mạng không còn chỉ là trách nhiệm của nhóm IT. Trong DevOps, các nhóm phát triển, vận hành và bảo mật đều cần hợp tác trong các nhiệm vụ liên quan đến mạng. Thiếu thông tin hoặc hiểu biết chung có thể dẫn đến chậm trễ và sai sót.

Đối mặt với những thách thức này đòi hỏi sự kết hợp giữa các công cụ phù hợp (như nền tảng tự động hóa và giải pháp giám sát) và một văn hóa hợp tác mạnh mẽ.

Mạng trong các pipeline CI/CD

Mạng đóng vai trò quan trọng trong các pipeline tích hợp liên tục và triển khai liên tục (CI/CD), đóng vai trò là chất kết dính đảm bảo tất cả các hệ thống trong pipeline có thể giao tiếp hiệu quả. Nếu không có nền tảng mạng vững chắc, pipeline CI/CD của bạn có thể gặp phải sự chậm trễ, lỗi hoặc thậm chí thất bại hoàn toàn. Hãy cùng đi sâu vào các khía cạnh chính của mạng trong bối cảnh này.

Vai trò của mạng trong CI/CD

Các pipeline CI/CD liên quan đến nhiều công cụ, máy chủ và môi trường làm việc cùng nhau, thường là trên các hệ thống phân tán. Ví dụ:

  • Kiểm soát nguồn: Pipeline cần truy cập vào các kho lưu trữ như GitHub hoặc GitLab.

  • Máy chủ build: Các công cụ như Jenkins hoặc GitLab Runner yêu cầu kết nối để lấy mã, phụ thuộc và môi trường kiểm tra.

  • Mục tiêu triển khai: Dù là máy chủ đám mây, kho lưu trữ container hay môi trường on-prem, mạng đáng tin cậy đảm bảo triển khai trơn tru. Mạng đảm bảo giao tiếp liền mạch giữa các thành phần này, từ việc lấy mã đến triển khai sản phẩm cuối cùng.

Cấu hình mạng trong pipeline

Mạng bị cấu hình sai có thể khiến pipeline CI/CD thất bại. Các nhiệm vụ phổ biến bao gồm:

  • Thiết lập tường lửa và kiểm soát truy cập để chỉ cho phép lưu lượng được ủy quyền.
  • Cấu hình cài đặt DNS để đảm bảo định tuyến yêu cầu chính xác.
  • Đảm bảo VPN hoặc mạng riêng được thiết lập để kết nối an toàn với tài nguyên on-prem. Đối với các nhóm DevOps, sử dụng các công cụ Infrastructure as Code (IaC) như Terraform hoặc Ansible có thể giúp tự động hóa và quản lý các cấu hình này một cách hiệu quả.

Tự động hóa mạng

Tự động hóa là chìa khóa để giữ cho các pipeline CI/CD nhanh chóng và đáng tin cậy. Các nhóm DevOps thường tận dụng các công cụ như Kubernetes, Docker hoặc các tính năng mạng đám mây để:

  • Phân bổ IP động cho container.
  • Thiết lập bộ cân bằng tải để phân phối lưu lượng hiệu quả.
  • Tự động mở rộng tài nguyên mạng trong quá trình build hoặc triển khai có nhu cầu cao.

Vượt qua các vấn đề mạng phổ biến

Các nút thắt liên quan đến mạng có thể phát sinh do độ phân giải DNS chậm, kết nối không ổn định hoặc quy tắc tường lửa không chính xác. Các công cụ giám sát như Prometheus hoặc Grafana có thể giúp theo dõi hiệu suất mạng, trong khi nhật ký từ các công cụ như Jenkins hoặc GitLab có thể xác định nơi xảy ra sự cố.

Mạng cho ứng dụng đám mây bản địa

Khi xây dựng và triển khai các ứng dụng đám mây bản địa, mạng trở thành một phần cốt lõi để đảm bảo kết nối liền mạch, khả năng mở rộng và bảo mật. Các ứng dụng này phụ thuộc nhiều vào hệ thống phân tán, container và microservices, khiến mạng trở thành một thách thức năng động và phức tạp hơn. Hãy phân tích nó thành các thuật ngữ đơn giản.

Mạng trong đám mây

Các ứng dụng đám mây bản địa được thiết kế để chạy trong các môi trường như AWS, Azure hoặc Google Cloud, nơi các tài nguyên như tính toán, lưu trữ và mạng có tính đàn hồi cao.

Mạng trong đám mây bao gồm:

  • Virtual private clouds (VPCs): Mạng riêng của bạn trong đám mây nơi các tài nguyên được cách ly.
  • Subnets: Chia mạng của bạn thành các phần nhỏ hơn, dễ quản lý hơn để kiểm soát lưu lượng tốt hơn.
  • Bộ cân bằng tải: Phân phối lưu lượng đến nhiều máy chủ để đảm bảo độ tin cậy. Các nhà cung cấp đám mây thường xử lý nhiều công việc nặng nhọc, nhưng hiểu cách cấu hình các công cụ này đảm bảo hiệu suất và bảo mật tốt hơn.
  • Container và mạng: Hầu hết các ứng dụng đám mây bản địa sử dụng container được quản lý bởi các công cụ như Kubernetes. Mạng trong môi trường này liên quan đến:
  • Phát hiện dịch vụ: Đảm bảo các microservices có thể tìm và giao tiếp với nhau.
  • Mạng Kubernetes: Sử dụng các tính năng như ClusterIP, NodePort và Ingress để quản lý luồng lưu lượng.
  • Giao diện mạng container (CNI): Các plugin như Calico hoặc Flannel xử lý mạng giữa các container. Mục tiêu là đảm bảo các dịch vụ của bạn có thể tương tác trơn tru, dù chúng đang chạy trên cùng một máy chủ hay trải rộng trên nhiều cụm.

Xử lý mạng đa đám mây và hybrid cloud

Các ứng dụng đám mây bản địa thường trải rộng trên nhiều nhà cung cấp đám mây hoặc kết hợp môi trường on-prem và đám mây. Điều này đặt ra các thách thức như:

  • Độ trễ: Đảm bảo dữ liệu di chuyển nhanh chóng giữa các đám mây.
  • Kết nối liên thông: Sử dụng các công cụ như VPN hoặc dịch vụ đám mây cụ thể (ví dụ: AWS Transit Gateway) để liên kết các môi trường.
  • Tính nhất quán: Duy trì cấu hình và chính sách đồng nhất trên các nền tảng.

Bảo mật trong mạng đám mây bản địa

Mạng trong đám mây yêu cầu tập trung mạnh vào bảo mật. Các thực hành chính bao gồm:

  • Bảo mật API: Đảm bảo chỉ các máy khách được ủy quyền mới có thể truy cập dịch vụ của bạn.
  • Kiến trúc zero-trust: Xác minh mọi kết nối trước khi tin tưởng nó.
  • Tường lửa và nhóm bảo mật: Kiểm soát lưu lượng đến và đi với các quy tắc nghiêm ngặt. Mạng cho các ứng dụng đám mây bản địa có thể cảm thấy phức tạp, nhưng với các công cụ và thực hành phù hợp, nó sẽ trở nên dễ quản lý hơn nhiều. Một chiến lược mạng vững chắc đảm bảo ứng dụng của bạn luôn nhanh chóng, có thể mở rộng và bảo mật — sẵn sàng đáp ứng nhu cầu của người dùng hiện đại.

Tự động hóa mạng và Infrastructure as Code (IaC)

Trong thế giới DevOps tốc độ cao, cấu hình mạng thủ công không còn phù hợp nữa. Đây là lúc tự động hóa mạng và Infrastructure as Code (IaC) phát huy tác dụng. Những thực hành này cho phép bạn tự động hóa, quản lý và mở rộng cơ sở hạ tầng mạng một cách hiệu quả, giúp bạn có nhiều thời gian hơn cho đổi mới và ít thời gian hơn cho việc khắc phục sự cố.

Tự động hóa mạng là gì?

Tự động hóa mạng là việc sử dụng các công cụ và script để quản lý mạng mà không cần can thiệp thủ công. Thay vì cấu hình thủ công các switch, tường lửa hoặc định tuyến, tự động hóa cho phép bạn:

  • Tự động thiết lập và dỡ bỏ tài nguyên mạng.
  • Thích ứng với các thay đổi trong thời gian thực, như mở rộng cơ sở hạ tầng trong thời gian lưu lượng tăng đột biến.
  • Giảm lỗi do con người, thường là nguyên nhân gây ra cấu hình mạng sai. Ví dụ, các công cụ như Ansible hoặc Chef có thể tự động hóa các tác vụ như triển khai tường lửa, cập nhật bản ghi DNS hoặc cấu hình VPN chỉ với một vài dòng code.

Infrastructure as Code (IaC) là gì?

IaC là phương pháp định nghĩa và quản lý cơ sở hạ tầng bằng code thay vì các quy trình thủ công truyền thống. Khi áp dụng vào mạng, IaC cho phép bạn:

  • Viết các script có thể tái sử dụng để cấu hình mạng (như Terraform hoặc CloudFormation).
  • Kiểm soát phiên bản cấu hình mạng của bạn, để bạn có thể hoàn tác các thay đổi nếu có sự cố.
  • Đảm bảo tính nhất quán bằng cách áp dụng cùng một cấu hình trên các môi trường (dev, test, prod). Ví dụ, bạn có thể viết một script Terraform để tạo Virtual Private Cloud (VPC), định nghĩa các subnet và đính kèm bộ cân bằng tải — tất cả chỉ trong một lần chạy.

    Lợi ích của tự động hóa mạng và IaC

  • Tốc độ: Thiết lập tự động tiết kiệm hàng giờ so với quy trình thủ công.
  • Khả năng mở rộng: Dễ dàng xử lý các mạng phức tạp, phân tán trên nhiều nhà cung cấp đám mây.
  • Tính nhất quán: Tránh các vấn đề “nó chạy trên máy của tôi” với các cấu hình tiêu chuẩn.
  • Hợp tác: IaC tích hợp với các hệ thống kiểm soát phiên bản (như Git), cho phép các nhóm hợp tác trong các thay đổi mạng.

Các thực hành tốt nhất cho tự động hóa mạng và IaC

  • Sử dụng code mô-đun để đơn giản hóa và tái sử dụng cấu hình.
  • Kiểm tra các script IaC trong môi trường staging trước khi triển khai vào production.
  • Tài liệu hóa các script của bạn để mọi người trong nhóm hiểu điều gì đang xảy ra.
  • Kết hợp các công cụ IaC với các pipeline CI/CD để cập nhật liền mạch.

Giám sát và khắc phục sự cố mạng

Trong DevOps, việc giữ cho mạng của bạn hoạt động trơn tru là rất quan trọng. Mạng là xương sống của giao tiếp giữa cơ sở hạ tầng, ứng dụng và người dùng của bạn. Giám sát và khắc phục sự cố mạng đảm bảo rằng bất kỳ vấn đề nào đều được xác định và giải quyết nhanh chóng trước khi chúng ảnh hưởng đến hiệu suất. Hãy cùng tìm hiểu cách bạn có thể theo dõi sức khỏe mạng của mình.

Tầm quan trọng của giám sát mạng

Giám sát mạng giúp bạn theo dõi hiệu suất và phát hiện các vấn đề tiềm ẩn. Nó giống như có một bảng điều khiển cho chiếc xe của bạn — theo dõi tốc độ, nhiên liệu và trạng thái động cơ để bạn có thể hành động trước khi có sự cố. Các khía cạnh chính của giám sát mạng bao gồm:

  • Sử dụng băng thông: Kiểm tra xem bao nhiêu dung lượng mạng của bạn đang được sử dụng.
  • Độ trễ: Đo lường sự chậm trễ trong việc truyền dữ liệu giữa các điểm.
  • Mất gói tin: Theo dõi xem có bao nhiêu dữ liệu không đến được đích.
  • Thời gian hoạt động: Đảm bảo mạng và dịch vụ của bạn luôn sẵn sàng cho người dùng. Các công cụ như Prometheus, Nagios hoặc các giải pháp giám sát đám mây như AWS CloudWatch giúp bạn dễ dàng theo dõi các chỉ số này trong thời gian thực.

Các tình huống khắc phục sự cố mạng phổ biến

Khi có sự cố xảy ra, khắc phục sự cố giúp bạn tìm ra nguyên nhân gốc rễ và khắc phục nó. Một số vấn đề phổ biến bao gồm:

  • Kết nối chậm: Thường do tắc nghẽn băng thông hoặc độ trễ cao.
  • Dịch vụ không thể truy cập: Có thể do DNS bị cấu hình sai, tường lửa hoặc định tuyến.
  • Kết nối không ổn định: Có thể do lỗi phần cứng hoặc liên kết không ổn định.

Các bước khắc phục sự cố mạng

Khi khắc phục sự cố, hãy làm theo một cách tiếp cận có cấu trúc:

  • Xác định vấn đề: Bắt đầu với dữ liệu giám sát hoặc báo cáo từ người dùng để xác định nơi xảy ra sự cố.
  • Cô lập nguyên nhân: Kiểm tra nhật ký, kiểm tra kết nối (ví dụ: sử dụng ping hoặc traceroute) và xem xét các quy tắc tường lửa hoặc cấu hình DNS.
  • Áp dụng các biện pháp khắc phục: Dù là điều chỉnh cấu hình, khởi động lại dịch vụ hoặc thay thế phần cứng bị lỗi, hãy thực hiện các bước để giải quyết vấn đề.
  • Xác nhận khắc phục: Xác nhận rằng vấn đề đã được giải quyết và hiệu suất mạng đã trở lại bình thường.

Các công cụ tốt nhất để giám sát và khắc phục sự cố

Có rất nhiều công cụ giúp giám sát và khắc phục sự cố hiệu quả hơn:

  • Wireshark: Để phân tích lưu lượng mạng chi tiết.
  • Ping/Traceroute: Để kiểm tra kết nối và xác định các vấn đề định tuyến.
  • Grafana: Để tạo các bảng điều khiển trực quan về hiệu suất mạng.
  • ELK Stack (Elasticsearch, Logstash, Kibana): Để tập trung và phân tích nhật ký mạng.

Bảo mật trong mạng DevOps

Trong thế giới DevOps, nơi tốc độ và sự linh hoạt là chìa khóa, bảo mật mạng thường phải đối mặt với thách thức theo kịp các triển khai nhanh chóng và cơ sở hạ tầng đang phát triển. Tuy nhiên, với các hệ thống và ứng dụng ngày càng kết nối nhiều hơn, việc đảm bảo mạng an toàn là điều không thể thương lượng. Hãy cùng khám phá một số cách thực tế để tích hợp bảo mật vào các thực hành mạng DevOps của bạn.

Nhu cầu bảo mật mạng trong DevOps

Các nhóm DevOps quản lý các môi trường động nơi cơ sở hạ tầng mở rộng hoặc thu hẹp và các dịch vụ thường xuyên được cập nhật. Trong khi điều này tăng cường hiệu quả, nó cũng tạo ra cơ hội cho các lỗ hổng, như:

  • API và cổng bị lộ: Thường bị bỏ ngỏ một cách vô ý.
  • Cấu hình không an toàn: Các cài đặt mặc định thiếu các biện pháp bảo mật mạnh mẽ.
  • Tăng bề mặt tấn công: Với microservices và hệ thống phân tán, có nhiều điểm để kẻ tấn công nhắm đến. Một khuôn khổ bảo mật mạnh mẽ giúp ngăn chặn vi phạm, rò rỉ dữ liệu và thời gian chết, đảm bảo hệ thống của bạn luôn đáng tin cậy và kiên cường.

Các thực hành bảo mật cốt lõi cho mạng DevOps

Dưới đây là các chiến lược chính để bảo mật mạng của bạn mà không làm chậm quy trình DevOps:

  • Sử dụng tường lửa và nhóm bảo mật: Định nghĩa các quy tắc nghiêm ngặt cho lưu lượng đến và đi để kiểm soát mạng. Ví dụ, chỉ cho phép các IP hoặc dịch vụ cụ thể truy cập tài nguyên của bạn.
  • Mã hóa dữ liệu trong quá trình truyền và lưu trữ: Sử dụng các giao thức như TLS/SSL để bảo mật dữ liệu trong quá trình chuyển và các thuật toán mã hóa mạnh cho dữ liệu được lưu trữ.
  • Kiến trúc zero-trust: Áp dụng cách tiếp cận “không bao giờ tin tưởng, luôn xác minh”. Điều này có nghĩa là mọi kết nối, ngay cả trong mạng của bạn, đều phải được xác thực và ủy quyền.
  • Bảo mật API và microservices: Bảo vệ các điểm cuối bằng xác thực (ví dụ: OAuth) và giới hạn tốc độ để ngăn chặn lạm dụng.
  • Quét bảo mật tự động: Sử dụng các công cụ như Aqua, Qualys hoặc OpenSCAP để phát hiện các lỗ hổng trong cấu hình mạng và các phụ thuộc.

Các công cụ để bảo mật mạng DevOps

Có rất nhiều công cụ giúp bảo mật mạng DevOps dễ dàng hơn:

  • VPN: Để kết nối an toàn giữa môi trường on-prem và đám mây.
  • Công cụ bảo mật của nhà cung cấp đám mây: AWS Security Groups, Azure NSGs hoặc Google Cloud Firewalls để quản lý kiểm soát truy cập.
  • Công cụ SIEM (quản lý thông tin và sự kiện bảo mật): Các công cụ như Splunk hoặc ELK stack giúp giám sát và phát hiện các bất thường trong hoạt động mạng.

Cân bằng giữa bảo mật và tốc độ

Trong DevOps, thách thức là duy trì bảo mật mà không làm chậm triển khai. Để đạt được sự cân bằng này:

  • Tích hợp các kiểm tra bảo mật vào các pipeline CI/CD bằng các công cụ như Checkov hoặc Snyk.
  • Đào tạo nhóm của bạn về các thực hành mã hóa và cấu hình an toàn.
  • Thường xuyên cập nhật và vá hệ thống để luôn đi trước các lỗ hổng đã biết.

Kết luận

Mạng là xương sống của DevOps trong việc đảm bảo giao tiếp trơn tru, khả năng mở rộng và bảo mật của các ứng dụng hiện đại. Nắm vững mạng trong DevOps sẽ giúp bạn hiểu được những kiến thức cơ bản, giải quyết các thách thức, tự động hóa quy trình và thực thi bảo mật để xây dựng các hệ thống mạnh mẽ. Bằng cách nhúng các thực hành tốt nhất, tận dụng các công cụ phù hợp và thúc đẩy sự hợp tác, bạn có thể biến mạng từ một nút thắt thành một lợi thế.

Khi DevOps tiếp tục phát triển, việc chủ động và thích ứng với các yêu cầu thay đổi trong mạng sẽ là chìa khóa để thành công lâu dài trong việc cung cấp các giải pháp đáng tin cậy và hiệu suất cao.

Tham khảo

Networking in DevOps: Your Beginner Guide

Bài viết khác

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm