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 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 tiêu dùng dịch vụ.
  • Mỗi người tiêu 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.pngS

Hình 2. Private Service Connect sử dụng các thiết bị đầu cuối và tệp đính kèm dịch vụ để cho phép người tiêu dùng dịch vụ gửi lưu lượng truy cập từ mạng VPC của người tiêu 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 việc kết nối dịch vụ riêng tư
  • Các khái niệm chính dành cho người sử 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 thực thể 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 dành cho người tiêu dùng
  • Tạo quy tắc chuyển tiếp trong mạng 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 vào chính sách
  • Sử dụng quy tắc tường lửa đầu ra để chặn quyền truy cập vào quy tắc chuyển tiếp người tiêu dùng

Bạn cần có

  • Có kiến thức về cách triển khai các 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 việc kết nối dịch vụ riêng tư

Khi sử dụng PSC, bạn được hưởng một số lợi ích so với việc sử dụng tính năng Kết nối ngang hàng VPC:

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

  • Là người sử dụng dịch vụ, bạn có thể kiểm soát địa chỉ IP riêng tư dùng để kết nối với dịch vụ được quản lý mà bạn muốn truy cập.
  • Là người sử dụng dịch vụ, bạn không cần phải lo lắng về việc dành riêng dải địa chỉ IP riêng cho các dịch vụ phụ trợ mà người dùng sử dụng trong VPC của mình. Bạn chỉ cần chọn một địa chỉ IP trong mạng con của riêng mình để kết nối với 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 người thuê bao, trong đó VPC của bạn chứa các dịch vụ cho nhiều VPC của người tiêu dùng. Việc khách hàng có phạm vi mạng con chồng chéo 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 cho nhiều phiên bản máy ảo (VM) tuỳ theo yêu cầu mà không cần phải liên hệ với người tiêu dùng để biết thêm địa chỉ IP.

Cải thiện khả năng bảo mật và khả năng tách biệt

  • Là người tiêu dùng dịch vụ, chỉ bạn mới có thể bắt đầu giao tiếp 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 đồng thời cũng giảm nguy cơ phát sinh lưu lượng truy cập giả mạo 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 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 có thể chỉ cần tạo 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.

Tăng khả năng mở rộng

  • PSC mang đến thiết kế có khả năng mở rộng cao bằng cách hỗ trợ hàng nghìn Người tiêu dùng, đồng thời cho phép Nhà sản xuất dịch vụ cung cấp các dịch vụ có khả năng mở rộng cao theo nhiều đối tượng thuê hoặc một đối tượng thuê.
  • Là một người sử dụng dịch vụ sử dụng kết nối dịch vụ riêng tư, 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 điều 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 sử dụng dịch vụ

Bạn có thể sử dụng điểm cuối Kết nối dịch vụ riêng tư để sử dụng các dịch vụ bên ngoài mạng VPC của mình. Người sử dụng dịch vụ tạo các điểm cuối Kết nối dịch vụ riêng tư để 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 của Private Service Connect để kết nối với một dịch vụ đích. Điểm cuối có địa chỉ IP nội bộ trong mạng VPC và dựa trên tài nguyên của quy tắc chuyển tiếp.

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

Mục tiêu

Các điểm cuối của Private Service Connect có một đích đến. Đó là dịch vụ mà bạn muốn kết nối:

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

Dịch vụ đã phát hành

Để kết nối điểm cuối với dịch vụ của trình tạo dịch vụ, bạn cần có tệp đính kèm dịch vụ cho dịch vụ. URI tệp đính kèm của dịch vụ có định dạng sau: project/SERVICE_PROJECT/PROJECT/REGION/serviceDownloads/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 dịch địa chỉ mạng (NAT) của địa chỉ IP của người tiêu dùng. Sau đó, bạn tạo một tệp đính kèm dịch vụ tham chiếu đến các mạng con đó.

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

Để cung cấp một dịch vụ, trước tiên, trình tạo dịch vụ sẽ tạo một hoặc nhiều mạng con có mục đích là Kết nối dịch vụ riêng tư.

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

Nếu bạn muốn giữ lại thông tin địa chỉ IP kết nối người tiêu dùng, hãy xem Xem thông tin kết nối người tiêu dùng.

Không thể sử 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. Mạng con chỉ được sử dụng để cung cấp địa chỉ IP cho SNAT của kết nối người tiêu dùng đến.

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

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

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

Các 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ụ.

  • Để cung cấp một dịch vụ, trình tạo 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 trình cân bằng tải của dịch vụ đó.
  • Để truy cập vào một dịch vụ, đối tượng sử 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 sử dụng dịch vụ đều có thể định cấu hình điểm cuối và tự động kết nối với dịch vụ.
  • Chấp nhận kết nối của các dự án đã chọn – đối tượng sử dụng dịch vụ định cấu hình điểm cuối để kết nối với dịch vụ và trình tạo dịch vụ sẽ chấp nhận hoặc từ chối yêu cầu kết nối.

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

  • Các giới hạn đối với Kết nối dịch vụ riêng tư sẽ được áp dụng.
  • Bạn có thể tạo 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 tệp đí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 kiểm thử

Mạng người tiêu dùng còn bao gồm một địa chỉ IP tĩnh dùng để tạo yêu cầu cho nhà sản xuất dịch vụ, ngoài các tệp đính kèm dịch vụ đích ánh xạ đến tệp đí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 mạng lưới nhà sản xuất. Hãy lưu ý rằng mạng lưới của nhà sản xuất không có mối liên kết đến mạng người tiêu dùng. Thay vào đó, mạng của 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ụ. Tệp đính kèm dịch vụ của nhà sản xuất bị lộ bởi một ILB (dịch vụ đã phát hành) của GKE L4 để cho phép giao tiếp với Nhóm GKE và ứng dụng 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 tiêu dùng, địa chỉ IP nguồn của người tiêu dùng được dịch bằng NAT nguồn (SNAT) thành địa chỉ IP được chọn từ một trong các mạng con Private Service Connect.

Không thể sử 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. Mạng con chỉ được sử dụng để cung cấp địa chỉ IP cho SNAT của kết nối người tiêu dùng đến.

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

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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.pngs

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ự không được API của Google sử 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 trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. 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 (và mã này thường được xác định là PROJECT_ID). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
  • Có giá trị thứ ba là Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở 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í 300 USD.

Khởi động Cloud Shell

Mặc dù bạn 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 trong Đám mây.

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

bce75f34b2c53987.png

Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:

f6ef2b5f13479f3a.png

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Phiên bản này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Bạn có thể thực hiện tất cả công việc trong phòng thí nghiệm này chỉ bằng một trình duyệt.

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

Lớp học lập trình này cần có 2 dự án, mặc dù không nhất thiết phải có PSC. Hãy lưu ý các tham chiếu để hỗ trợ một hoặc nhiều dự án.

Một dự án – Cập nhật dự án để hỗ trợ mạng lưới của nhà sản xuất và người tiêu dùng

Bên 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 lưới nhà sản xuất

Bên 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

Lưu ý quy ước mã tô màu sau đây:

f251ebb137e37136.png

7. Tạo mạng lưới VPC cho Nhà sản xuất

afe738fc869f0d6e.png

Mạng VPC

Của Cloud Shell

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

Tạo mạng con cụm GKE

Của 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

Của 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ạng con cho Kết nối dịch vụ riêng tư (NAT Subnet)

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ụ, thì bạn có thể tạo mạng con trong quy trình đó.

Để biết thông tin về mạng con Kết nối dịch vụ riêng tư, hãy xem phần Mạng con Kết nối dịch vụ riêng tư.

Của 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 tải công việc và dịch vụ

Tệp kê khai sau đây mô tả một Triển khai chạy 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ả 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 tệp đính kèm dịch vụ

Tệp kê khai sau đây mô tả một ServiceAttachment hiển thị dịch vụ mà bạn đã tạo cho người sử dụng dịch vụ. Lưu tệp kê khai dưới dạng my-psc.yaml từ 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 đây:

  • connectionPreference: lựa chọn ưu tiên về kết nối giúp 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 sử dụng hàm ACCEPT_AUTOMATIC hoặc phê duyệt dự án một cách rõ ràng bằng cách sử dụng hàm ACCEPT_AUTOMATIC. Để biết thêm thông tin, hãy xem phần Dịch vụ xuất bản bằng Private Service Connect.
  • natSubnets: danh sách tên tài nguyên mạng phụ để sử dụng cho tệp đính kèm dịch vụ.
  • proxyProtocol: khi bạn đặt chính sách này thành true, thì IP nguồn của người dùng và mã kết nối của Private Service Connect sẽ xuất hiện trong các yêu cầu. Trường này là 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 thông thường được phép kết nối với ServiceAttachment. Bạn chỉ có thể sử dụng trường này khi giá trị connectionPreferenceconnectionPreference. Để biết thêm thông tin về trường này và các lựa chọn khác, hãy xem phần Xuất bản dịch vụ bằng cách sử dụng Private Service Connect.

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

Xem chi tiết về Tệp đính kèm dịch vụ

Bạn có thể xem thông tin chi tiết về một ServiceAttachment bằng cách dùng lệnh sau trên Cloud shell

kubectl describe serviceattachment emoji-sa

Xem ILB của GKE L4

Trong Cloud Console, hãy chuyển đến phần Dịch vụ mạng → Cân bằng tải → Giao diện người dùng

Xác định địa chỉ IP giao diện người dùng căn chỉnh với mạng con của nút được xác định trước đó 192.168.10.0/24, lưu ý ả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

Trong Cloud Console, hãy chuyển đến phần Dịch vụ mạng → Kết nối dịch vụ riêng tư → Dịch vụ đã xuất bản

Xác định dịch vụ có 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 nhau

5a00836ee514b918.pngS

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

497f5f43920018c0.pngS

e246063a23771273.png

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

1f3c90f1e139e906.pngS

Trong phần sau, VPC của người tiêu dùng được định cấu hình trong một dự án riêng. Hoạt động giao tiếp giữa mạng 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 người tiêu dùng.

Lớp học lập trình này cần có 2 dự án, mặc dù không nhất thiết phải có PSC. Hãy lưu ý các tham chiếu để hỗ trợ một hoặc nhiều dự án.

Một dự án – Cập nhật dự án để hỗ trợ mạng lưới của nhà sản xuất và người tiêu dùng

Bên 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 cho người tiêu dùng

Bên 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

Của Cloud Shell

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

Tạo mạng con cho PSC

Của 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ạng con cho các thực thể máy ảo

Của 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 một địa chỉ IP tĩnh để truy cập vào dịch vụ đã phát hành

Của 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 về tường lửa

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

  • Áp dụng cho tất cả các thực thể máy ảo mà bạn muốn truy cập được bằng cách sử dụ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

Của 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 quy tắc tường lửa đầu ra để 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 dùng 1

Của 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ử 2 cho người dùng

Của 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 tệp đính kèm dịch vụ

Ở bước trước, bạn đã sao chép chuỗi Tệp đính kèm dịch vụ dành cho nhà sản xuất vào một nơi an toàn. Hãy chèn giá trị được lưu trữ vào tệp "target-service-Attach" (tệp đính kèm dịch vụ mục tiêu) .

7abacpc4e24f1ef7.png.

Của 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 CURL & nhật ký tường lửa để xác thực hoạt động giao tiếp của người tiêu dùng và nhà sản xuất.

Trong dự án của Người tiêu dùng, địa chỉ IP tĩnh được dùng để bắt nguồn hoạt động giao tiếp với Nhà sản xuất. Việc liên kết địa chỉ IP tĩnh với quy tắc chuyển tiếp người tiêu dùng sẽ được xác thực bằng cách thực hiện cú pháp sau.

1f3c90f1e139e906.pngS

Từ Vỏ sử dụng đám mây của VPC của người tiêu dùng, 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 để tiếp cận nhà sản xuất trong 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

Trong Cloud Console, hãy chuyển đến phần Dịch vụ mạng → Private Service Connect → Thiết bị đầu cuối được kết nối và xem điểm cuối mới tạo

206bc00297aaa260.pngs

Hãy đăng nhập vào consumer-instance-1 và kiểm tra quyền truy cập vào Producer Published Service

Từ Cloud shell, mở một tab mới bằng cách nhấp vào +

81f3210b29faebd3.pngs

Trên Cloud shell, hãy thực hiện những việ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 người tiêu dùng-1, hãy thực hiện cuộn tròn dựa trên quy tắc chuyển tiếp Địa chỉ IP 10.0.60.100

Trên Cloud shell, hãy thực hiện những việ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 Producer Published Service

Từ Cloud shell, mở một tab mới bằng cách nhấp vào +

81f3210b29faebd3.pngs

Trên Cloud shell, hãy thực hiện những việ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"

Trên Cloud shell, hãy thực hiện những việ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 dữ liệu giữa thực thể máy ảo và IP tĩnh

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

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

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

23e427b3060473.pngs

  1. Mở rộng nhật ký (jsonPayload → Kết nối) và xác định kết quả được cung cấp bên dưới. Lưu ý về dest_ip: 10.0.60.100 là IP StatIC TCP được sử dụng để truy cập Producer Service 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. Cho phép bố trí.

2669743fd1f1cb0d.pngS

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

afe738fc869f0d6e.png

Trong dự án Producers, hãy xác minh tệp đính kèm dịch vụ đã được kết nối thành công. Chuyển đến phần Dịch vụ mạng → Kết nối dịch vụ riêng tư → Dịch vụ đã phát hành

89ded87a63888f60.pngS

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

15966d47423ebc5f.pngS

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

1f3c90f1e139e906.pngS

Cho đến thời điểm này, chúng ta đã xác nhận 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 về tường lửa củ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 vào nhưng từ chối tất cả lưu lượng vào. Trong các bước sau, chúng ta sẽ tạo quy tắc tường lửa dựa trên thẻ mạng được xác định trước đó "google2" được dùng khi tạo phiên bản người dùng 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 dấu + và thực thi quy tắc tường lửa sau đây 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 cùng kiểm tra 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 rồi đăng nhập vào máy ảo như 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 những việ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 thực thể máy ảo và IP tĩnh

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

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

  1. Kết quả truy vấn cung cấp những thông tin sau theo 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 kết quả được cung cấp bên dưới. Lưu ý về dest_ip: 10.0.60.100 là IP StatIC TCP 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. Bị từ chối sắp xếp.

a344f75f67590655.png

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

Các bước dọn dẹp mạng Producer

afe738fc869f0d6e.png

Từ một shell đám mây trong thiết bị đầu cuối của dự án Producer, hãy xóa các thành phần trong phòng thí nghiệm

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.pngS

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

Từ một shell đám mây trong thiết bị đầu cuối của dự án Người tiêu dùng, hãy xoá các thành phần trong phòng thí nghiệm

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ội dung đã đề cập

  • Lợi ích của việc kết nối dịch vụ riêng tư
  • Các khái niệm chính dành cho người sử 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 thực thể 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 dành cho người tiêu dùng
  • Tạo quy tắc chuyển tiếp trong mạng 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 vào chính sách
  • Đã sử dụng quy tắc tường lửa đầu ra để chặn quyền truy cập vào quy tắc chuyển tiếp người tiêu dùng