Sử dụng Private Service Connect để xuất bản và sử dụng các dịch vụ bằng GKE

1. Giới thiệu

Private Service Connect cho phép nhà sản xuất dịch vụ cung cấp dịch vụ riêng tư cho người tiêu dùng dịch vụ. Private Service Connect mang lại những lợi ích sau:

  • Mạng VPC của nhà sản xuất dịch vụ có thể hỗ trợ nhiều người dùng dịch vụ.
  • Mỗi người dùng kết nối với một địa chỉ IP nội bộ mà họ xác định. Private Service Connect thực hiện dịch địa chỉ mạng (NAT) để định tuyến yêu cầu đến nhà sản xuất dịch vụ.

45b90d50690dd111.png

Hình 2. Private Service Connect sử dụng các điểm cuối và tệp đính kèm dịch vụ để cho phép người dùng dịch vụ gửi lưu lượng truy cập từ mạng VPC của người dùng đến các dịch vụ trong mạng VPC của nhà sản xuất dịch vụ (nhấp để phóng to).

Kiến thức bạn sẽ học được

  • Lợi ích của Private Service Connect
  • Các khái niệm chính dành cho người dùng dịch vụ
  • Các khái niệm chính dành cho nhà sản xuất dịch vụ
  • Tạo môi trường nhà sản xuất
  • Hiển thị dịch vụ (môi trường nhà sản xuất) thông qua một tệp đính kèm dịch vụ
  • Tạo môi trường người tiêu dùng
  • Tạo quy tắc chuyển tiếp trong mạng lưới người tiêu dùng
  • Xác thực quyền truy cập của người tiêu dùng
  • Bật chế độ kiểm soát quyền truy cập theo chính sách
  • Sử dụng quy tắc tường lửa xuất để chặn quyền truy cập vào quy tắc chuyển tiếp của người tiêu dùng

Bạn cần có

  • Có kiến thức về việc triển khai Cụm và dịch vụ GKE
  • Kiến thức về trình cân bằng tải nội bộ
  • Có thể tạo VPC trong 2 dự án
  • Có thể tạo Cụm GKE

2. Lợi ích của Private Service Connect

Với PSC, bạn sẽ có một số lợi ích so với việc sử dụng VPC Peering:

Kiểm soát tốt hơn không gian IP riêng tư

  • Là người dùng dịch vụ, bạn có thể kiểm soát địa chỉ IP riêng tư được dùng để kết nối với dịch vụ được quản lý mà bạn muốn truy cập.
  • Là một người tiêu dùng dịch vụ, bạn không cần lo lắng về việc đặt trước dải địa chỉ IP riêng tư cho các dịch vụ phụ trợ được sử dụng trong VPC của bạn. Bạn chỉ cần chọn một địa chỉ IP trong mạng con của mình để kết nối với các dịch vụ của nhà sản xuất.
  • Là nhà sản xuất dịch vụ, bạn có thể chọn triển khai mô hình nhiều đối tượng thuê, trong đó VPC của bạn chứa các dịch vụ phục vụ nhiều VPC của người dùng. Người dùng có dải mạng con trùng lặp không còn là vấn đề nữa.
  • Là một nhà cung cấp dịch vụ, bạn có thể mở rộng quy mô dịch vụ của mình đến số lượng phiên bản máy ảo cần thiết mà không cần liên hệ với người dùng để có thêm địa chỉ IP.

Tăng cường bảo mật và tách biệt

  • Là một người tiêu dùng dịch vụ, chỉ bạn mới có thể bắt đầu liên lạc với nhà sản xuất dịch vụ. Khả năng kết nối một chiều này giúp đơn giản hoá đáng kể cấu hình tường lửa, nhưng cũng giảm rủi ro do lưu lượng truy cập giả mạo đến từ nhà sản xuất dịch vụ.
  • Là nhà sản xuất dịch vụ, bạn không cần thay đổi các quy tắc tường lửa dựa trên dải mạng con trong VPC của người dùng. Bạn chỉ cần tạo các quy tắc tường lửa cho dải địa chỉ IP NAT được định cấu hình cho dịch vụ của mình.

Khả năng mở rộng tốt hơn

  • PSC cho phép thiết kế có khả năng mở rộng cao bằng cách hỗ trợ hàng nghìn Người dùng và cho phép Nhà sản xuất dịch vụ cung cấp các dịch vụ đa khách hàng hoặc một khách hàng có khả năng mở rộng cao.
  • Là một người tiêu dùng dịch vụ sử dụng Private Service Connect, bạn có thể tạo tài nguyên theo yêu cầu trong VPC của mình. Quy mô của việc này không bị ảnh hưởng bởi số lượng tài nguyên như vậy được tạo trong VPC của nhà sản xuất.

3. Các khái niệm chính dành cho người dùng dịch vụ

Bạn có thể sử dụng các điểm cuối Private Service Connect để sử dụng các dịch vụ nằm ngoài mạng VPC của mình. Người dùng dịch vụ tạo các điểm cuối Private Service Connect kết nối với một dịch vụ mục tiêu.

Điểm cuối

Bạn sử dụng các điểm cuối Private Service Connect để kết nối với một dịch vụ mục tiêu. Các điểm cuối có địa chỉ IP nội bộ trong mạng VPC của bạn và dựa trên tài nguyên quy tắc chuyển tiếp.

Bạn gửi lưu lượng truy cập đến điểm cuối, điểm cuối này sẽ chuyển tiếp lưu lượng truy cập đó đến các mục tiêu bên ngoài mạng VPC.

Mục tiêu

Các điểm cuối Private Service Connect có một mục tiêu, đó là dịch vụ mà bạn muốn kết nối:

  • Một gói API:
  • Tất cả API: hầu hết các API của Google
  • VPC-SC: Các API mà VPC Service Controls hỗ trợ
  • Một dịch vụ đã phát hành trong một mạng VPC khác. Dịch vụ này có thể do tổ chức của bạn hoặc bên thứ ba quản lý.

Dịch vụ đã xuất bản

Để kết nối điểm cuối với dịch vụ của nhà sản xuất dịch vụ, bạn cần có tệp đính kèm dịch vụ cho dịch vụ đó. URI đính kèm dịch vụ có định dạng sau: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. Các khái niệm chính dành cho nhà sản xuất dịch vụ

Để cung cấp dịch vụ cho người tiêu dùng, bạn tạo một hoặc nhiều mạng con chuyên dụng để sử dụng cho tính năng chuyển đổi địa chỉ mạng (NAT) của địa chỉ IP người tiêu dùng. Sau đó, bạn tạo một phần đính kèm dịch vụ tham chiếu đến các mạng con đó.

Mạng con Kết nối dịch vụ riêng tư

Để cung cấp một dịch vụ, trước tiên, nhà sản xuất dịch vụ sẽ tạo một hoặc nhiều mạng con cho mục đích Private Service Connect.

Khi một yêu cầu được gửi từ mạng VPC của người dùng, địa chỉ IP nguồn của người dùng sẽ được dịch bằng NAT nguồn (SNAT) thành một địa chỉ IP được chọn trong một trong các mạng con Private Service Connect.

Nếu bạn muốn giữ lại thông tin địa chỉ IP kết nối của người dùng cá nhân, hãy xem phần Xem thông tin kết nối của người dùng cá nhân.

Bạn không thể dùng các mạng con này cho các tài nguyên như phiên bản máy ảo hoặc quy tắc chuyển tiếp. Các mạng con chỉ được dùng để cung cấp địa chỉ IP cho SNAT của các kết nối đến của người tiêu dùng.

Mạng con Private Service Connect phải chứa ít nhất một địa chỉ IP cho mỗi 63 VM người dùng để mỗi VM người dùng được phân bổ 1.024 bộ giá trị nguồn cho tính năng dịch địa chỉ mạng.

Kích thước tối thiểu cho một mạng con Private Service Connect là /24.

Tệp đính kèm dịch vụ

Nhà sản xuất dịch vụ cung cấp dịch vụ của họ thông qua một tệp đính kèm dịch vụ.

  • Để hiển thị một dịch vụ, nhà sản xuất dịch vụ sẽ tạo một tệp đính kèm dịch vụ tham chiếu đến quy tắc chuyển tiếp của trình cân bằng tải của dịch vụ.
  • Để truy cập vào một dịch vụ, người dùng dịch vụ sẽ tạo một điểm cuối tham chiếu đến tệp đính kèm dịch vụ.

Lựa chọn ưu tiên về kết nối

Khi tạo một dịch vụ, bạn sẽ chọn cách cung cấp dịch vụ đó. Bạn có hai tùy chọn:

  • Tự động chấp nhận các kết nối cho tất cả dự án – mọi người dùng dịch vụ đều có thể định cấu hình một điểm cuối và tự động kết nối với dịch vụ.
  • Chấp nhận các kết nối cho các dự án đã chọn – người tiêu dùng dịch vụ định cấu hình một điểm cuối để kết nối với dịch vụ và nhà sản xuất dịch vụ chấp nhận hoặc từ chối các yêu cầu kết nối.

Yêu cầu và giới hạn

  • Có áp dụng các giới hạn đối với Private Service Connect.
  • Bạn có thể tạo một tệp đính kèm dịch vụ trong GKE phiên bản 1.21.4-gke.300 trở lên.
  • Bạn không thể sử dụng cùng một mạng con trong nhiều cấu hình đính kèm dịch vụ.
  • Bạn phải tạo một dịch vụ GKE sử dụng trình cân bằng tải TCP/UDP nội bộ.

5. Môi trường thử nghiệm

Mạng lưới người tiêu dùng bao gồm một địa chỉ IP tĩnh được dùng để bắt nguồn các yêu cầu đến nhà sản xuất dịch vụ, ngoài target-service-attachment (đính kèm dịch vụ mục tiêu) ánh xạ đến service attachment (đính kèm dịch vụ) của nhà sản xuất (dịch vụ đã xuất bản).

1ce5607c0c56d77d.jpeg

Bây giờ, hãy cùng xem xét mạng lưới nhà sản xuất. Lưu ý rằng mạng nhà sản xuất không có mối liên kết với mạng người tiêu dùng. Thay vào đó, mạng nhà sản xuất chứa một tệp đính kèm dịch vụ (dịch vụ đã xuất bản) mà người tiêu dùng sử dụng cho các dịch vụ. Phần đính kèm dịch vụ của nhà sản xuất được một ILB L4 cổng vào GKE (dịch vụ đã xuất bản) hiển thị, cho phép giao tiếp với các Pod GKE và các ứng dụng được liên kết.

Mạng con NAT được dùng khi một yêu cầu được gửi từ mạng VPC của người dùng, địa chỉ IP nguồn của người dùng được dịch bằng NAT nguồn (SNAT) sang một địa chỉ IP được chọn từ một trong các mạng con Private Service Connect.

Bạn không thể dùng các mạng con này cho các tài nguyên như phiên bản máy ảo hoặc quy tắc chuyển tiếp. Các mạng con chỉ được dùng để cung cấp địa chỉ IP cho SNAT của các kết nối đến của người tiêu dùng.

Để tìm hiểu thêm về L4ILB cho GKE Private Service Connect và có quyền truy cập trực tiếp vào nội dung được dùng để tham khảo phòng thí nghiệm này, hãy xem phần sau.

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không dùng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, mã này sẽ "đóng băng" sau khi dự án được tạo.
  • Có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, hãy làm theo mọi hướng dẫn "dọn dẹp" ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.

Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

bce75f34b2c53987.png

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

f6ef2b5f13479f3a.png

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn chỉ cần một trình duyệt là có thể thực hiện mọi thao tác trong phòng thí nghiệm này.

6. Trước khi bắt đầu

Lớp học lập trình yêu cầu 2 dự án, mặc dù không bắt buộc đối với PSC. Lưu ý các tài liệu tham khảo để hỗ trợ một hoặc nhiều dự án.

Single Project – Update project to support producer and consumer network (Dự án đơn lẻ – Cập nhật dự án để hỗ trợ mạng lưới nhà sản xuất và người tiêu dùng)

Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Nhiều dự án – Cập nhật dự án để hỗ trợ mạng nhà sản xuất

Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

Xin lưu ý quy ước mã hoá màu sau đây:

f251ebb137e37136.png

7. Tạo mạng VPC của Nhà sản xuất

afe738fc869f0d6e.png

Mạng VPC

Từ Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

Tạo mạng con Cụm GKE

Từ Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

Tạo cụm GKE

Từ Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

Tạo một mạng con cho Private Service Connect (Mạng con NAT)

Bạn phải tạo một hoặc nhiều mạng con chuyên dụng để sử dụng với Private Service Connect. Nếu đang sử dụng Google Cloud Console để xuất bản một dịch vụ, bạn có thể tạo các mạng con trong quy trình đó.

Để biết thông tin về các mạng con Private Service Connect, hãy xem bài viết Mạng con Private Service Connect.

Từ Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. Triển khai khối lượng công việc và các dịch vụ

Tệp kê khai sau đây mô tả một Deployment chạy một hình ảnh vùng chứa ứng dụng web mẫu. Lưu tệp kê khai dưới dạng my-deployment.yaml từ Cloud Shell

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

Áp dụng tệp kê khai cho cụm của bạn từ Cloud Shell

kubectl apply -f my-deployment.yaml

Tạo dịch vụ

Tệp kê khai sau đây mô tả một dịch vụ tạo trình cân bằng tải TCP/UDP nội bộ trên cổng TCP 8080. Lưu tệp kê khai dưới dạng my-service.yaml từ Cloud Shell.

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

Áp dụng tệp kê khai cho cụm của bạn từ Cloud Shell

kubectl apply -f my-service.yaml

Tạo ServiceAttachment

Tệp kê khai sau đây mô tả một ServiceAttachment cho phép người dùng dịch vụ truy cập vào dịch vụ mà bạn đã tạo. Lưu tệp kê khai dưới dạng my-psc.yaml trong Cloud Shell.

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

Áp dụng tệp kê khai cho cụm của bạn từ Cloud Shell

kubectl apply -f my-psc.yaml

ServiceAttachment có các trường sau:

  • connectionPreference: lựa chọn ưu tiên kết nối xác định cách khách hàng kết nối với dịch vụ. Bạn có thể sử dụng tính năng phê duyệt dự án tự động bằng cách dùng ACCEPT_AUTOMATIC hoặc phê duyệt dự án rõ ràng bằng cách dùng ACCEPT_MANUAL. Để biết thêm thông tin, hãy xem bài viết Xuất bản dịch vụ bằng Private Service Connect.
  • natSubnets: danh sách tên tài nguyên mạng con để dùng cho tệp đính kèm dịch vụ.
  • proxyProtocol: khi được đặt thành true, IP nguồn của người dùng và mã nhận dạng kết nối Private Service Connect sẽ có trong các yêu cầu. Trường này không bắt buộc và mặc định là false nếu không được cung cấp.
  • consumerAllowList: danh sách các dự án người dùng được phép kết nối với ServiceAttachment. Bạn chỉ có thể sử dụng trường này khi connectionPreferenceACCEPT_MANUAL. Để biết thêm thông tin về trường này và các lựa chọn khác, hãy xem bài viết Xuất bản các dịch vụ bằng Kết nối dịch vụ riêng tư.

Xác thực nhà sản xuất

Xem thông tin chi tiết về Service Attachment

Bạn có thể xem thông tin chi tiết về một ServiceAttachment bằng lệnh sau đây trong Cloud Shell

kubectl describe serviceattachment emoji-sa

Xem ILB L4 của GKE

Trên bảng điều khiển đám mây, hãy chuyển đến Network Services (Dịch vụ mạng) → Load Balancing (Cân bằng tải) → Frontends (Giao diện người dùng)

Xác định địa chỉ IP giao diện người dùng phù hợp với mạng con của nút 192.168.10.0/24 đã xác định trước đó, hãy lưu ý đến ảnh chụp màn hình bên dưới, địa chỉ IP của bạn có thể khác.

ed7a25ed4774977b.png

Xem dịch vụ đã xuất bản

Trên bảng điều khiển đám mây, hãy chuyển đến Network Services (Dịch vụ mạng) → Private Service Connect (Dịch vụ kết nối riêng tư) → Published Services (Dịch vụ đã xuất bản)

Xác định dịch vụ bằng mạng được dùng trong phòng thí nghiệm, gke-producer-l4-vpc,,lưu ý ảnh chụp màn hình bên dưới, mặc dù giá trị Dịch vụ và Mục tiêu của bạn có thể khác

5a00836ee514b918.png

Nhấp vào tên dịch vụ để chuyển đến màn hình bên dưới, lưu ý thông tin chi tiết về tệp đính kèm dịch vụ được điền sẵn trong phần Thông tin cơ bản. Ngoài ra, hãy lưu ý rằng phần "Dự án được kết nối" đang trống vì người dùng chưa đăng ký dịch vụ. CHẤP NHẬNTỪ CHỐI sẽ vẫn bị mờ vì Lựa chọn ưu tiên về kết nối được đặt thành "ACCEPT_AUTOMATICALLY". Bạn có thể thay đổi lựa chọn này thành "ACCEPT_MANUAL" bất cứ lúc nào bằng cách sửa đổi tệp yaml đính kèm dịch vụ (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.png

9. Tạo mạng VPC cho người tiêu dùng

1f3c90f1e139e906.png

Trong phần sau, VPC người dùng sẽ được định cấu hình trong một dự án riêng biệt. Hoạt động giao tiếp giữa mạng lưới người tiêu dùng và nhà sản xuất được thực hiện thông qua tệp đính kèm dịch vụ được xác định trong mạng lưới người tiêu dùng.

Lớp học lập trình yêu cầu 2 dự án, mặc dù không bắt buộc đối với PSC. Lưu ý các tài liệu tham khảo để hỗ trợ một hoặc nhiều dự án.

Single Project – Update project to support producer and consumer network (Dự án đơn lẻ – Cập nhật dự án để hỗ trợ mạng lưới nhà sản xuất và người tiêu dùng)

Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Nhiều dự án – Cập nhật dự án để hỗ trợ mạng lưới người tiêu dùng

Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
echo $consumerproject

Mạng VPC

Từ Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

Tạo mạng con cho PSC

Từ Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1

Tạo một mạng con cho các phiên bản máy ảo

Từ Cloud Shell

gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject  --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1

Tạo địa chỉ IP tĩnh để truy cập vào dịch vụ đã xuất bản

Từ Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100

Tạo quy tắc cho tường lửa

Để cho phép IAP kết nối với các phiên bản máy ảo, hãy tạo một quy tắc tường lửa có:

  • Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn có thể truy cập bằng IAP.
  • Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Dải này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp TCP

Từ Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Mặc dù không bắt buộc đối với PSC, hãy tạo một quy tắc tường lửa xuất cảnh để giám sát lưu lượng truy cập PSC của người tiêu dùng đến tệp đính kèm dịch vụ của nhà sản xuất

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

10. Tạo phiên bản kiểm thử người tiêu dùng 1

Từ Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. Tạo phiên bản kiểm thử người tiêu dùng 2

Từ Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

12. Tạo một tệp đính kèm dịch vụ

Ở bước trước, bạn đã sao chép chuỗi Producer Service Attachment (Phần đính kèm dịch vụ của nhà sản xuất) vào một nơi an toàn. Hãy chèn giá trị đã lưu trữ vào trường "target-service-attachment".

7abaccc4e24f1ef7.png

Từ Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. Xác thực – Người tiêu dùng

Chúng tôi sẽ sử dụng nhật ký CURL và tường lửa để xác thực thông tin liên lạc của người tiêu dùng và nhà sản xuất.

Trong dự án của Consumer, các địa chỉ IP tĩnh được dùng để bắt đầu giao tiếp với Producer. Việc liên kết địa chỉ IP tĩnh với quy tắc chuyển tiếp của Người dùng được xác thực bằng cách thực hiện cú pháp sau.

1f3c90f1e139e906.png

Từ Consumer VPCs Cloud, hãy xác định quy tắc chuyển tiếp và IP tĩnh

gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1

Đầu ra bên dưới, chúng ta sẽ sử dụng 10.0.60.100 để liên hệ với nhà sản xuất ở bước sau

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

Xem Dịch vụ được kết nối

Trên bảng điều khiển đám mây, hãy chuyển đến Network Services (Dịch vụ mạng) → Private Service Connect (Kết nối dịch vụ riêng tư) → Connected Endpoints (Điểm cuối được kết nối) và xem điểm cuối mới tạo

206bc00297aaa260.png

Hãy đăng nhập vào consumer-instance-1 và kiểm tra quyền truy cập vào Dịch vụ do nhà sản xuất phát hành

Từ Cloud Shell, hãy mở một thẻ mới bằng cách nhấp vào dấu +

81f3210b29faebd3.png

Trên Cloud Shell, hãy thực hiện các thao tác sau:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"

Sau khi đăng nhập vào phiên bản consumer-instance-1, hãy thực hiện một lệnh curl đối với Địa chỉ IP của quy tắc chuyển tiếp 10.0.60.100

Từ Cloud Shell, hãy thực hiện các thao tác sau:

user@consumer-instance-1:~$ curl 10.0.60.100

Kết quả ví dụ

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

Hãy đăng nhập vào consumer-instance-2 và kiểm tra quyền truy cập vào Dịch vụ do nhà sản xuất phát hành

Từ Cloud Shell, hãy mở một thẻ mới bằng cách nhấp vào dấu +

81f3210b29faebd3.png

Trên Cloud Shell, hãy thực hiện các thao tác sau:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

Từ Cloud Shell, hãy thực hiện các thao tác sau:

user@consumer-instance-2:~$ curl 10.0.60.100

Kết quả ví dụ

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. Ghi nhật ký tường lửa – Xác thực được phân bổ

Sử dụng Trình khám phá nhật ký để xác thực quy tắc tường lửa "vpc-consumner-psc" đang ghi lại luồng giữa thực thể của VM và IP tĩnh

  1. Trên Cloud Console, hãy xác định mục Ghi nhật ký hoạt động → Trình khám phá nhật ký
  2. Trong trường Truy vấn, hãy cập nhật mục bên dưới bằng yourconsumerproject rồi chọn "Chạy truy vấn"

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. Kết quả truy vấn cung cấp thông tin sau đây cho mỗi ảnh chụp màn hình được cung cấp

23e427b3060473.png

  1. Mở rộng nhật ký (jsonPayload → Connection) và xác định đầu ra được cung cấp bên dưới. Lưu ý rằng dest_ip: 10.0.60.100 là IP TCP TĨNH dùng để truy cập vào Dịch vụ nhà sản xuất và src_ip: 10.0.70.10 hoặc 10.0.70.20 là(các) địa chỉ IP của phiên bản VM. Được phép xử lý.

2669743fd1f1cb0d.png

15. Xác thực – Nhà sản xuất

afe738fc869f0d6e.png

Trong dự án Producers, hãy xác minh rằng tệp đính kèm dịch vụ đã được kết nối thành công. Chuyển đến Network Services (Dịch vụ mạng) → Private Service Connect (Dịch vụ kết nối riêng tư) → Published Services (Dịch vụ đã phát hành)

89ded87a63888f60.png

Khi bạn nhấp vào dịch vụ này, dự án người dùng đã kết nối và trạng thái của bạn sẽ xuất hiện như minh hoạ bên dưới

15966d47423ebc5f.png

16. Hạn chế quyền truy cập vào Dịch vụ đã xuất bản

1f3c90f1e139e906.png

Cho đến nay, chúng ta đã xác nhận rằng cả hai phiên bản đều có quyền truy cập vào Dịch vụ đã xuất bản. Hãy tạo một Quy tắc tường lửa đầu ra để từ chối quyền truy cập của consumer-instance-2 vào Dịch vụ đã xuất bản.

Theo mặc định, GCP cho phép tất cả lưu lượng truy cập đi nhưng từ chối tất cả lưu lượng truy cập đến. Trong các bước sau, chúng ta sẽ tạo một quy tắc tường lửa dựa trên thẻ mạng "google2" đã xác định trước đó. Thẻ này được dùng khi tạo consumer-instance-2 để từ chối quyền truy cập vào Dịch vụ đã xuất bản.

7fa2cda1dfec33a.png

Mở một thẻ cloud shell mới bằng cách nhấp vào + thực thi quy tắc tường lửa sau trong cloud shell

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

Bây giờ, hãy kiểm thử xem consumer-instance-2 có thể truy cập vào Dịch vụ đã xuất bản hay không. Nếu phiên của bạn hết thời gian chờ, bạn sẽ cần mở một cloud shell + mới và đăng nhập vào VM như được trình bày chi tiết bên dưới.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

Trên Cloud Shell, hãy thực hiện các thao tác sau:

user@consumer-instance-2:~$ curl 10.0.60.100

Kết quả ví dụ

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

Ghi nhật ký tường lửa – Xác thực bị từ chối

Sử dụng Trình khám phá nhật ký để xác thực quy tắc tường lửa "psc-endpoint-deny-egress" đang ghi lại luồng dữ liệu giữa phiên bản máy ảo và IP tĩnh

  1. Trên Cloud Console, hãy xác định mục Ghi nhật ký hoạt động → Trình khám phá nhật ký
  2. Trong trường Truy vấn, hãy cập nhật mục bên dưới bằng yourconsumerproject rồi chọn "Chạy truy vấn"

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")

  1. Kết quả truy vấn cung cấp thông tin sau đây cho mỗi ảnh chụp màn hình được cung cấp

83b4fc7348ac93cd.png

  1. Mở rộng nhật ký và xác định đầu ra được cung cấp bên dưới. Lưu ý rằng dest_ip: 10.0.60.100 là IP TCP TĨNH và src_ip: 10.0.70.10 hoặc 10.0.70.20 là(các) địa chỉ IP của phiên bản VM. Kết quả là Từ chối.

a344f75f67590655.png

17. Các bước dọn dẹp

Các bước dọn dẹp mạng lưới nhà sản xuất

afe738fc869f0d6e.png

Xoá các thành phần trong phòng thí nghiệm khỏi một cloud shell trong thiết bị đầu cuối của dự án Producer

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906.png

Các bước dọn dẹp mạng lưới người tiêu dùng

Xoá các thành phần trong phòng thí nghiệm khỏi một cloud shell trong thiết bị đầu cuối của dự án Consumer

gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet

gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

18. Xin chúc mừng!

Chúc mừng bạn đã hoàn thành lớp học lập trình này.

Nội dung đã đề cập

  • Lợi ích của Private Service Connect
  • Các khái niệm chính dành cho người dùng dịch vụ
  • Các khái niệm chính dành cho nhà sản xuất dịch vụ
  • Tạo môi trường nhà sản xuất
  • Hiển thị dịch vụ (môi trường nhà sản xuất) thông qua một tệp đính kèm dịch vụ
  • Tạo môi trường người tiêu dùng
  • Tạo quy tắc chuyển tiếp trong mạng lưới người tiêu dùng
  • Xác thực quyền truy cập của người tiêu dùng
  • Bật chế độ kiểm soát quyền truy cập theo chính sách
  • Sử dụng quy tắc tường lửa xuất để chặn quyền truy cập vào quy tắc chuyển tiếp cho người tiêu dùng