How to Deploy KYPO_CRP on OpenStack-YOGA

English 简体中文 繁体中文 ภาษาไทย Tiếng Việt
Summary

KYPO Cyber Range Platform (CRP) is an open-source solution for cybersecurity training, leveraging OpenStack and Kubernetes. This guide provides a comprehensive, step-by-step deployment process for KYPO CRP on OpenStack-YOGA, filling gaps in official documentation with detailed configurations and troubleshooting. The deployment involves initial OpenStack pre-configuration, deploying base infrastructure using Terraform, and subsequently deploying the KYPO CRP Helm application. Critical post-deployment steps include configuring Kubernetes host aliases and fixing a Git clone bug to ensure sandbox functionality. The article also details how to add new users programmatically via the KYPO API.

title25.png

Mục đích thiết kế :

KYPO Cyber Range Platform (KYPO CRP) là một giải pháp mã nguồn mở được phát triển bởi Masaryk University để hỗ trợ đào tạo và diễn tập an ninh mạng. Được cấp phép theo giấy phép MIT, nó cung cấp sự linh hoạt cho các tổ chức để tùy chỉnh và mở rộng nền tảng để đáp ứng các mục tiêu đào tạo cụ thể. KYPO CRP được xây dựng trên sự kết hợp của các công nghệ OpenStack và Kubernetes và tích hợp các chức năng chính như phân phối kịch bản Capture-the-Flag (CTF) và quản lý phiên bản ảo.

Hướng dẫn cài đặt chính thức cung cấp một quy trình triển khai hợp lý (hướng dẫn chính thức), khi tôi làm theo hướng dẫn để triển khai trên OpenStack, tôi thấy nó thiếu một số cấu hình chi tiết và đặc biệt là một số mẹo khắc phục sự cố khiến việc triển khai của mọi người không thành công. Mục đích của bài viết này là để thu hẹp khoảng cách đó bằng cách trình bày một hướng dẫn từng bước toàn diện để triển khai KYPO CRP trên OpenStack-YOGA. Nó bao gồm các tác vụ tiền cấu hình cần thiết, hướng dẫn triển khai hoàn chỉnh bằng Terraform và Helm, và các vấn đề thường gặp mà người dùng có thể gặp phải, cùng với các giải pháp thực tế của chúng.

Bài viết này bao gồm 3 phần chính:

  • Tiền cấu hình OpenStack : Thiết lập cần thiết trong môi trường OpenStack-YOGA của bạn trước khi triển khai KYPO-CRP.

  • Các bước triển khai KYPO : Các quy trình chi tiết để triển khai KYPO-CRP bằng Terraform và triển khai các ứng dụng bằng Helm, sửa đổi cụm KYPO-K8s và KYPO-Web-dashboard.

  • Khắc phục sự cố và sử dụng : Cách truy cập nền tảng sau khi triển khai và giải quyết các vấn đề thường gặp trong quá trình thiết lập.

# Author:      Yuancheng Liu
# Created:     2023/02/20
# Version:     v_0.1.3
# License:     MIT License 

Giới thiệu

KYPO Cyber Range Platform (KYPO CRP) được thiết kế để hỗ trợ cả nhu cầu đào tạo học thuật và chuyên nghiệp. Nó được xây dựng bằng các công nghệ hiện đại như k8s, container, microservice và cơ sở hạ tầng dưới dạng mã, làm cho nó trở thành một giải pháp linh hoạt, có khả năng mở rộng và hiệu quả về chi phí để tạo ra các kịch bản an ninh mạng thực tế.

KYPO-CRP cho phép tạo ra các sandbox có thể tùy chỉnh—cả trên cloudon-premises—cho phép người học tham gia vào các bài tập đào tạo thực hành, chẳng hạn như các thử thách Capture-the-Flag (CTF) và mô phỏng sự cố mạng. Nền tảng này hoàn toàn là mã nguồn mở và có sẵn theo giấy phép MIT, cho phép các tổ chức điều chỉnh việc triển khai cho cơ sở hạ tầng và mục tiêu đào tạo riêng của họ. Tham khảo chính của bài viết này dựa trên hai liên kết dưới đây:

Bài viết này cung cấp một hướng dẫn chi tiết, từng bước để triển khai KYPO-CRP trên OpenStack-YOGA, như được minh họa trong sơ đồ bên dưới.

s_0315.png

Hình-00: Sơ đồ quy trình triển khai, phiên bản v_0.1.3 (2025)

Quy trình triển khai được chia thành bốn giai đoạn chính:

  • Tiền cấu hình OpenStack – Thiết lập các cấu hình và điều kiện tiên quyết cần thiết của OpenStack.

  • Triển khai tài nguyên cơ sở OpenStack – Sử dụng các tệp Terraform cơ sở của KYPO để triển khai cơ sở hạ tầng nền tảng.

  • Triển khai ứng dụng KYPO CRP Helm – Triển khai lớp ứng dụng bằng Helm và các tệp Terraform đầu của KYPO.

  • Hoàn tất cấu hình – Hoàn thành thiết lập cụm Kubernetes và cấu hình dashboard


Tổng quan về công nghệ KYPO-CRP

KYPO-CRP hoàn toàn dựa trên các phương pháp tiếp cận hiện đại như container, cơ sở hạ tầng dưới dạng mã, microservice và phần mềm mã nguồn mở, bao gồm công nghệ nhà cung cấp cloud - OpenStack. Cấu trúc hệ thống được hiển thị bên dưới:

s_0419.png

Hình-01: Sơ đồ quy trình hệ thống KYPO_CRP, phiên bản v_0.1.3 (2025)

KYPO CRP sử dụng cùng một phương pháp mở cho nội dung như đối với kiến trúc của nó để khuyến khích tạo ra một cộng đồng các nhà đào tạo và hỗ trợ chia sẻ các khối xây dựng đào tạo. Vì lý do đó, máy ảo, mạng và đào tạo hoàn toàn được xác định bằng các ngôn ngữ tuần tự hóa dữ liệu có thể đọc được bằng con người JSON và YAML hoặc sử dụng phần mềm mã nguồn mở Packer để xây dựng máy ảo và Ansible để mô tả nội dung máy.

Nút điều khiển KYPO đang chạy một cụm K8s với các pod khác nhau. Trong nút OpenStack "default-kubernetes-cluster", bạn có thể nhận được trạng thái của chúng như hiển thị bên dưới:

ubuntu@default-kubernetes-cluster:~$ kubectl get pods
NAME                                                READY   STATUS    RESTARTS   AGE
postgres-7bfcbc4f85-dfd29                           1/1     Running   0          6d7h
guacamole-5bdfd984c6-p7zh8                          1/1     Running   0          6d7h
kypo-redis-76854b59f6-99gjm                         1/1     Running   0          6d7h
angular-frontend-64b6fbbbfd-5kzrl                   1/1     Running   0          6d7h
guacd-56b6cdd9f8-gwkm9                              1/1     Running   0          6d7h
kypo-syslog-ng-88ddbcd69-w88gx                      1/1     Running   0          6d7h
mitre-service-55ff5578b6-qlc88                      1/1     Running   0          6d7h
oidc-issuer-ldap-867758c7bb-2t6z5                   1/1     Running   0          6d7h
answers-storage-5b4db578ff-96fh2                    1/1     Running   0          6d7h
kypo-logstash-7b75dc8d4f-m94vv                      1/1     Running   0          6d7h
smart-assistant-688b8b4c75-hfqfg                    1/1     Running   0          6d7h
uag-service-5b4dbc95ff-glg6t                        1/1     Running   0          6d7h
sandbox-service-worker-ansible-5cd8b97694-pg7gr     1/1     Running   0          6d7h
sandbox-service-worker-openstack-6457799f98-275q2   1/1     Running   0          6d7h
sandbox-service-worker-default-864c85b46c-h6lrf     1/1     Running   0          6d7h
sandbox-service-worker-default-864c85b46c-dwjkc     1/1     Running   0          6d7h
sandbox-service-worker-openstack-6457799f98-zmx5z   1/1     Running   0          6d7h
sandbox-service-worker-ansible-5cd8b97694-8rvww     1/1     Running   0          6d7h
training-feedback-service-84c547d664-w4hjd          1/1     Running   0          6d7h
adaptive-training-service-59964c9778-v2gtk          1/1     Running   0          6d7h
kypo-elasticsearch-5c894f9b65-fw4q6                 1/1     Running   0          6d7h
sandbox-service-7cf4b8d7db-76s5n                    1/1     Running   0          6d7h
training-service-6699b78459-mvftz                   1/1     Running   0          6d7h
elasticsearch-service-7db4866fb6-bt5vt              1/1     Running   0          6d7h
oidc-issuer-app-fc9ff8856-db6jq                     1/1     Running   0          6d7h
git-internal-c959ccff5-c9xgq  

Chuẩn bị OpenStack

Trước khi triển khai KYPO-CRP, bạn cần định cấu hình một số cài đặt trong môi trường OpenStack của mình. Điều này bao gồm việc tạo một ứng dụng xác thực cho KYPO và thiết lập các flavor cần thiết để đảm bảo máy ảo (VM) có thể được cung cấp một cách chính xác.

Tạo ứng dụng xác thực OpenStack cho KYPO-CRP

Bước-1: Đăng nhập vào dashboard OpenStack-YOGA với tư cách quản trị viên, Trong Identity -> Application Credential và tạo thông tin xác thực như hình bên dưới:

s_0518.png

Hình-02: Tạo ứng dụng xác thực OpenStack, phiên bản v_0.1.3 (2025)

Đối với vai trò thông tin xác thực, hãy chọn tất cả 4 vai trò: admin, user, member, reader và đánh dấu vào hộp kiểm Unrestricted.

Bước-2: Tải xuống tệp app-cred-xxx-open-rc.shclouds.yaml (như được hiển thị trong file/app-cred-kypotest7-openrc.shfiles/clouds.yaml )

Ví dụ về app-cred-kypotest7-openrc.sh:

#!/usr/bin/env bash
export OS_AUTH_TYPE=v3applicationcredential
export OS_AUTH_URL=http://controller2:5000/v3/
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME="RegionOne"
export OS_INTERFACE=public
export OS_APPLICATION_CREDENTIAL_ID=9cd30053e56d4981806e83f08c2cb831
export OS_APPLICATION_CREDENTIAL_SECRET=kypotest7

Ví dụ về clouds.yaml:

clouds:
  openstack:
    auth:
      auth_url: http://controller2:5000/v3/
      application_credential_id: "9cd30053e56d4981806e83f08c2cb831"
      application_credential_secret: "kypotest7"
    region_name: "RegionOne"
    interface: "public"
    identity_api_version: 3
    auth_type: "v3applicationcredential"

Bạn cũng có thể tạo ứng dụng xác thực trong nút OpenStack Controller bằng các lệnh bên dưới:

openstack application credential create --secret "kypotest7" --description "2nd Kypo installation" --role admin --role user --role reader --role member kypotest7

Định cấu hình các OpenStack Flavor cần thiết

Đảm bảo rằng các VM flavor sau có sẵn trong môi trường OpenStack của bạn. Chúng được sử dụng trong quá trình triển khai KYPO-CRP để phân bổ tài nguyên tính toán:

Flavor VCPUs Disk (GB) RAM (MB)
csirtmu.tiny1x2 1 20 1024
standard.tiny 1 1 512
standard.small 1 20 2048
standard.medium 2 40 4096

Lưu ý: Các tên flavor này phải khớp chính xác với những tên được tham chiếu trong các tập lệnh Terraform của KYPO và đối với standard.xlarge, nên sử dụng 16 vCPU và 32GB Ram, nếu không, dựa trên thử nghiệm của tôi, khả năng cao là quá trình triển khai sẽ bị treo hoặc thất bại nếu bạn sử dụng 8vCPU và 16GB.

Một điều rất quan trọng khác là nếu tiến trình triển khai của bạn không thành công và bạn muốn triển khai lại từ đầu, bạn cần thực hiện thiết lập dọn dẹp sau, nếu không, khả năng cao là việc triển khai lại sẽ lại thất bại:

Nếu bạn cần xóa/gỡ bỏ tất cả các phiên bản KYPO khỏi OpenStack, đây là các tham số cần được gỡ bỏ:

  • Xóa keypair với tên '-kypo' chẳng hạn như (Admin Kypo hoặc kypo-kypo)

  • Giải phóng 2 địa chỉ IP động OpenStack mà KYPO đã sử dụng.

  • Xóa bộ định tuyến kypo-public.

  • Xóa tất cả các kypo-instance: [xóa tất cả default-p000000000-* ]

  • Xóa mạng kypo-base: [nếu gặp lỗi xóa, hãy làm sạch cổng, mạng con của mạng và xóa lại]

  • Xóa tất cả các nhóm bảo mật do KYPO tạo.

  • Xóa mạng con "sandbox" bên dưới mạng "provider".


Triển khai Tài nguyên Cơ bản OpenStack

Phần này tuân theo hướng dẫn triển khai chính thức từ kho lưu trữ KYPO GitLab:🔗 Hướng dẫn Triển khai BASE.md

Cấu hình trước các Tệp Cài đặt

Bước 1: Sao chép Kho lưu trữ Triển khai KYPO CRP

SSH vào một trong các nút bộ điều khiển OpenStack của bạn và sao chép các tập lệnh triển khai KYPO CRP chính thức (v1.1.4):

git clone -b v1.1.4 https://gitlab.ics.muni.cz/muni-kypo-crp/devops/kypo-crp-tf-deployment.git

Bước 2: Sao chép Tệp Thông tin xác thực vào Bộ điều khiển

Sao chép app-credxxx-open-rc.shclouds.yaml đã tạo trước đó, scp nút bộ điều khiển OpenStack, đặt tệp clouds.yaml bên dưới thư mục tf-head-servicestf-openstac-base như hình bên dưới:

kypo@controller2:~/kypoInstall/kypo-crp-tf-deployment/tf-head-services$ ls
clouds.yaml kypo.tf provider.tf README.md terraform.tfstate terraform.tfstate.backup tfvars values.yaml variables.tf

Bước 3: Bước 3: Cập nhật Tệp Nhà cung cấp Terraform

Sửa đổi tệp tf-openstack-base/provider.tf để xác định nhà cung cấp OpenStack bằng cách thêm 3 dòng bên dưới vào tệp.

provider "openstack" {
 cloud = "openstack"
}

Bước 4: Cập nhật Các biến Cơ bản

Chỉnh sửa tf-openstack-base/tfvars/vars-base.tfvars với các tham số sau:

deploy_flavors                      = false
deploy_kubernetes_cluster           = true
kypo_kubernetes_cluster_flavor_name = "standard.xlarge"
kypo_proxy_flavor_name             = "standard.medium"

Lưu ý: Khi tôi làm theo trang web chính thức của Kypo-Crp sử dụng vars-all.tfvars, khả năng cao là vùng chứa uag-service của cụm KYPO-k8s sẽ bị treo trong quá trình triển khai.

Bước 5: Cài đặt Terraform

sudo apt install snapd
sudo snap install terraform --classic

Triển khai Tài nguyên Cơ bản OpenStack

Bước 1: Tải Thông tin xác thực Ứng dụng

Kích hoạt thông tin xác thực ứng dụng OpenStack cho Terraform bằng cách tìm nguồn tập lệnh:

source /path/to/app-cred--openrc.sh

Bước 2: Định cấu hình Mạng Bên ngoài

Sao chép và sửa đổi tệp biến triển khai:

cd tf-openstack-base
cp tfvars/deployment.tfvars-template tfvars/deployment.tfvars

Xác định mạng OpenStack bên ngoài của bạn:

openstack network list --external --column Name
+----------+
| Name     |
+----------+
| provider |
+----------+

Thêm chuỗi provider vào tham số external_network_name trong deployment.tfvars như hình bên dưới:

external_network_name = "provider"

Bước 3: Chạy Triển khai Terraform

Khởi tạo và áp dụng cấu hình Terraform (khuyên dùng chạy dưới quyền sudo và thêm tự động phê duyệt):

sudo terraform init
terraform apply --auto-approve -var-file tfvars/deployment.tfvars -var-file tfvars/vars-base.tfvars

Bước 4: Ghi lại Thông tin Đầu ra

Sau khi triển khai thành công, Terraform sẽ xuất dữ liệu cấu hình proxy và Kubernetes chính. Lưu thông tin này cho bước triển khai tiếp theo:

cluster_ip = "192.168.200.207"
kubernetes_client_certificate = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0t...="
kubernetes_client_key = "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0..."
proxy_host = "192.168.200.216"
proxy_key = "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS..."

Bước 5: Xác minh Kết nối

Kiểm tra xem các cổng cần thiết (ví dụ: SSH, HTTP, HTTPS) có mở trên IP cụm Kubernetes hay không:

yuancheng@kcontroller1:~/kypoInstall/kypo-crp-tf-deployment/tf-openstack-base$ nmap -F 192.168.200.207
Starting Nmap 7.80 ( https://nmap.org ) at 2023-02-02 06:41 UTC
Nmap scan report for 192.168.200.207
Host is up (0.00018s latency).
Not shown: 95 filtered ports
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   open   http
443/tcp  open   https
515/tcp  closed printer
8443/tcp closed https-alt

Quan trọng: Tất cả 5 cổng phải được mở, nếu không có nghĩa là cụm K8s có một số pod gặp sự cố và hầu hết thời gian đó sẽ là sự cố khi khởi tạo bộ định tuyến traefik. Nếu bạn đăng nhập vào nút bộ điều khiển KYPO và liệt kê quy trình, tình hình bình thường sẽ như sau:

s_0619.png

Hình-03: Danh sách quy trình KYPO K8s bình thường, phiên bản v_0.1.3 (2025)

Nếu traefik không khởi động, có nghĩa là quá trình triển khai đã thất bại (như hình bên dưới)

s_0718.png

Hình-04: Danh sách quy trình KYPO K8s ngoại lệ, phiên bản v_0.1.3 (2025)

Để giải quyết vấn đề này, bạn cần thay đổi phiên bản trong tệp deployment.tfvars, 2 dòng phiên bản này là chính xác:

kypo_crp_head_version         = "1.1.1"
kypo_postgres_version         = "1.0.0"

Và chúng ta có thể thấy rằng trong phiên bản cam kết kho lưu trữ KYPO 4b3b918, họ cũng đã hạ cấp để sửa lỗi này:

s_0816.png

Triển khai Ứng dụng Helm KYPO-CRP

Với cơ sở hạ tầng cơ bản OpenStack đã sẵn sàng, giai đoạn tiếp theo là triển khai ứng dụng Nền tảng Phạm vi Mạng KYPO (CRP) bằng Helm.

Bước 1: Định cấu hình Biến Triển khai

Điều hướng đến thư mục tf-head-services, chứa các tệp cấu hình Terraform để triển khai các thành phần KYPO CRP:

cd tf-head-services
cp tfvars/deployment.tfvars-template tfvars/deployment.tfvars

Chỉnh sửa tệp tfvars/deployment.tfvars và điền các giá trị được thu thập từ bước thiết lập cơ sở hạ tầng trước đó. Dưới đây là cấu hình mẫu:

acme_contact = "[email protected]"
application_credential_id = "9cd30053e56d4981806e83f08c2cb831"
application_credential_secret = "kypotest7"
gen_user_count = "100"

git_config = {
  type                 = "INTERNAL"
  server               = "git-internal.kypo"
  sshPort              = 22
  restServerUrl        = "http://git-internal.kypo:5000/"
  user                 = "git"
  privateKey           = ""
  accessToken          = "no-gitlab-token"
  ansibleNetworkingUrl = "[email protected]:/repos/backend-python/ansible-networking-stage/kypo-ansible-stage-one.git"
  ansibleNetworkingRev = "v1.0.10"
}

guacamole_admin_password = "password"
guacamole_user_password  = "password"

head_host = "192.168.200.207"
head_ip   = "192.168.200.207"

kubernetes_host                = "192.168.200.207"
kubernetes_client_certificate = ""
kubernetes_client_key         = ""

kypo_crp_head_version   = "1.1.1"
kypo_postgres_version   = "1.0.0"
os_auth_url             = "http://10.0.6.4:5000/v3/"

oidc_providers = [
  {
    url              = "https://192.168.200.207:443/csirtmu-dummy-issuer-server/"
    logoutUrl        = "https://192.168.200.207:443/csirtmu-dummy-issuer-server/endsession"
    clientId         = "bFkibCmIhdoJJjExCZzuKSeOfDdjYkJETIjn"
    label            = "Login with local issuer"
    issuerIdentifier = ""
    userInfoUrl      = ""
    responseType     = ""
  }
]

proxy_host = "192.168.200.216"
proxy_key  = ""

users = {
  "kypo-admin" = {
    iss        = "https://192.168.200.207:443/csirtmu-dummy-issuer-server/"
    password   = "password"
    email      = "[email protected]"
    fullName   = "Demo Admin"
    givenName  = "Demo"
    familyName = "Admin"
    admin      = true
  }
}

Lưu ý quan trọng: Đối với gen_user_count, vui lòng đặt một số lớn như 300, nếu không bạn cần vào pod K8s để thêm người dùng mới sau khi quá trình triển khai hoàn tất. Sau này tôi sẽ chỉ cho bạn cách thêm người dùng mới.

Bước 2: Triển khai KYPO CRP bằng Terraform

Với tệp deployment.tfvars đã được định cấu hình, hãy khởi tạo Terraform và áp dụng cấu hình để cài đặt ứng dụng Helm KYPO CRP:

terraform apply --auto-approve -var-file=tfvars/deployment.tfvars

Nhận xét: Nếu bạn muốn bắt đầu một quá trình triển khai mới hoàn toàn, vui lòng xóa tệp terraform.tfstate.

Quá trình cài đặt sẽ mất khoảng 9 - 13 phút nếu không có lỗi xảy ra.

module.kypo_crp.helm_release.kypo_crp_head: Still creating... [11m20s elapsed]
module.kypo_crp.helm_release.kypo_crp_head: Still creating... [11m30s elapsed]
module.kypo_crp.helm_release.kypo_crp_head: Creation complete after 11m34s [id=kypo-crp-head]
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

Nếu bạn thấy quá trình cài đặt mất hơn nửa giờ, thì khả năng cao là quá trình triển khai sẽ thất bại, dựa trên thử nghiệm của tôi, đôi khi nó sẽ hết thời gian, đôi khi nó sẽ bị treo ở đó.

Bước 3: Kiểm tra quyền truy cập vào Kypo-dashboard và đăng nhập

Truy cập trang tổng quan KYPO bằng url https://, nếu trang tổng quan bên dưới hiển thị, có nghĩa là cụm KYPO K8s đã được triển khai thành công như hiển thị bên dưới. Đăng nhập bằng người dùng quản trị mà chúng ta đã định cấu hình ngay bây giờ.

s_0912.png

Nhưng khi bạn đăng nhập để tạo sandbox, nó sẽ không thành công, bạn cần thay đổi một số cài đặt K8s thì mới có thể bắt đầu sử dụng.

Thay đổi Cấu hình Cụm Kypo-Kubernetes

Nếu bạn không thể tạo sandbox thành công với quyền quản trị viên sau khi cài đặt. Để giải quyết vấn đề này, cần phải điều chỉnh thủ công bên trong môi trường cụm KYPO Kubernetes. Các bước sau đây trình bày chi tiết cách định cấu hình cụm để giải quyết vấn đề.

Bước 1: Chuẩn bị Khóa Công khai Kypo K8s để đăng nhập vào Kypo K8s-Node

Truy cập: https://www.base64decode.org/ và bao gồm chuỗi proxy_key proxy_key = "LS0tLS1CRUdJTiBFQyB..." trong deployment.tfvars vào tệp khóa và lưu nội dung trong key.pem

Bước 2: Đăng nhập vào Nút KYPO Kubernetes

scp key.pem vào nút bộ điều khiển OpenStack và ssh vào vm cụm k8s bằng khóa.

chmod 0600 key.pem
ssh [email protected] -i key.pem

Bước 3: Định cấu hình Bí danh Máy chủ cho Phân giải DNS Bị hỏng

Nếu môi trường OpenStack thiếu khả năng phân giải tên DNS, hãy chỉnh sửa thủ công các tệp triển khai KYPO để sử dụng hostAliases. Chạy từng lệnh bên dưới:

sudo kubectl edit deployment sandbox-service -n kypo
sudo kubectl edit deployment sandbox-service-worker-ansible -n kypo  
sudo kubectl edit deployment sandbox-service-worker-openstack -n kypo  
sudo kubectl edit deployment oidc-issuer-ldap -n kypo
sudo kubectl edit deployment sandbox-service-worker-default -n kypo

cho mỗi triển khai, hãy thêm nội dung bên dưới vào specs.template.specs sau cấu hình containers:

...
   - mountPath: /root/.ssh/kypo-crp-proxy-key  
      name: kypo-crp-proxy-key  
      subPath: kypo-crp-proxy-key    
    - mountPath: /var/opt/kypo/kypo-ansible-runner-volumes   
      name: ansible-runner-vol 
    - mountPath: /root/.ssh/git-ssh-key  
      name: git-ssh-key          
      subPath: git-ssh-key  
  dnsPolicy: ClusterFirst   
  # Add the below host aliases part:
  hostAliases:   
  - hostnames:   
    - controller2  
    ip: 10.0.6.4    
  # -------------------------------
  restartPolicy: Always                                                               
  schedulerName: default-scheduler                                                   
  securityContext: {}        
...        

Tham khảo: https://serverfault.com/questions/895088/can-host-aliases-be-assigned-to-deployments-in-kubernetes-if-so-how

Bước 4: Sửa Lỗi Sao Chép Git (cài đặt libguac)

KYPO-Crp có một lỗi khi cài đặt lib "guacamole guacd" bằng cách sử dụng apt install. Sau nhánh v1.0.10, họ đã sửa lỗi. Đăng nhập vào cụm kypo-k8s và chỉnh sửa pod git nội bộ:

spec:
  template:
    spec:
      containers:
        - name: git-internal-ssh
          lifecycle:
            postStart:
              exec:
                command:
                - sh
                - -c
                - |
                  mkdir -p /assets/keys
                  ssh-keygen -y -f /tmp/keys/git-ssh-key > /assets/keys/git-ssh-key.pub
                  cat /assets/keys/git-ssh-key.pub > /home/git/.ssh/authorized_keys
                  git clone -q --bare https://gitlab.ics.muni.cz/muni-kypo-crp/prototypes-and-examples/sandbox-definitions/small-sandbox.git /repos/prototypes-and-examples/sandbox-definitions/small-sandbox.git
                  git clone -q --bare https://gitlab.ics.muni.cz/muni-kypo-crp/prototypes-and-examples/sandbox-definitions/kypo-crp-demo-training.git /repos/prototypes-and-examples/sandbox-definitions/kypo-crp-demo-training.git
                  git clone -q --bare https://gitlab.ics.muni.cz/muni-kypo-crp/prototypes-and-examples/sandbox-definitions/kypo-crp-demo-training-adaptive.git /repos/prototypes-and-examples/sandbox-definitions/kypo-crp-demo-training-adaptive.git
                  # Add the branch version as shown below: 
                  git clone -b v1.0.10 -q --bare https://gitlab.ics.muni.cz/muni-kypo-crp/backend-python /ansible-networking-stage/kypo-ansible-stage-one.git /repos/backend-python/ansible-networking-stage/kypo-ansible-stage-one.git
...

Bước 5: Kiểm Tra Định Nghĩa Sandbox và Phân Bổ Pool

Bây giờ bạn có thể đăng nhập vào KYPO-dashboard để xác định một sandbox thử nghiệm bằng cách sử dụng git bên dưới để thực hiện kiểm tra:

URL: [email protected]:/repos/prototypes-and-examples/sandbox-definitions/kypo-crp-hack-training-linear.git
Revision: master

Sau đó, tạo một sand box pool và phân bổ một sandbox để kiểm tra xem kypo có hoạt động không:

s_1011.png

Nếu tất cả 3 giai đoạn đều vượt qua mà không có lỗi (như hình trên), điều đó có nghĩa là tất cả cấu hình đang hoạt động bình thường và việc triển khai KYPO trên OpenStack thành công.


Thêm Nhiều Người Dùng Mới Trong KYPO-CRP

Nếu bạn muốn thêm nhiều người dùng mới, bạn cần đăng nhập vào nút KYPO K8s như phần trước với tệp khóa:

ssh [email protected] -i key.pem 

Sau đó, sử dụng KYPO users API, như được hiển thị trong phần triển khai, cổng 8084 không được mở ra bên ngoài, vì vậy điều này chỉ có thể được thực hiện bên trong nút K8s.

https://localhost:8084/kypo-rest-user-and-group/api/v1/users

Tạo một tệp users.json đơn giản với những người dùng mới bạn muốn thêm:

{
  "users": [
    {
      "sub": "[email protected]",
      "iss": "https://192.168.200.207:443/csirtmu-dummy-issuer-server/",
      "full_name": "user301",
      "given_name": "",
      "family_name": ""
    }, 
    {
      "sub": "[email protected]",
      "iss": "https://192.168.200.207:443/csirtmu-dummy-issuer-server/",
      "full_name": "user302",
      "given_name": "",
      "family_name": ""
    }...
  ],
  "groupName": "group1"
}

Tên người dùng đăng nhập cần là tên email phụ. Sau đó, sử dụng curl để đăng thông tin người dùng mới:

curl -X POST "http://localhost:8084/kypo-rest-user-and-group/api/v1/users" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"users\": [ { \"sub\": \"[email protected]\", \"iss\": \"https://192.168.200.207:443/csirtmu-dummy-issuer-server/\", \"full_name\": \"user301\", \"given_name\": \"\", \"family_name\": \"\" }, { \"sub\": \"[email protected]\", \"iss\": \"https://192.168.200.207:443/csirtmu-dummy-issuer-server/\", \"full_name\": \"user302\", \"given_name\": \"\", \"family_name\": \"\" } ], \"groupName\": \"group1\"}"

Nếu bạn muốn tạo 100 người dùng, hãy tạo một chương trình python đơn giản trên nút và chạy:

import requests
import json

url = "https://localhost:8084/kypo-rest-user-and-group/api/v1/users"
data = json.load(users.json)
response = requests.post(url, json=data) # Sends JSON in the body
print(response.status_code)
print(response.json())

Sau khi bạn thêm người dùng, hãy truy cập trang web để tải xuống thông tin người dùng hoặc sử dụng curl GET thông tin người dùng với ID, giả sử đã có 300 người dùng, thì nếu tôi thêm một người dùng nữa user-301, thì ID của người dùng mới là 301.

curl -X GET "http://localhost:8084/kypo-rest-user-and-group/api/v1/users/301" -H "accept: application/json"

Sau đó, chúng ta có thể nhận mật khẩu do hệ thống tạo từ dữ liệu phản hồi

{
  "content": [
    {
      "sub": "[email protected]",
      "iss": "https://192.168.200.207:443/csirtmu-dummy-issuer-server/",
      "fullName": "John Doe",
      "mail": "[email protected]",
      "givenName": "",
      "familyName": "",
      "password": "ZLUyJJ62ej"
      "roles": [
        {
          "idOfMicroservice": 5,
          "nameOfMicroservice": "kypo-training",
          "description": "This role will allow you to create and delete groups.",
          "role_type": "ROLE_USER",
          "id": 301
        }
      ],
    }
  ],
}

Bây giờ bạn có thể bắt đầu sử dụng KYPO để tạo sandbox để thử nghiệm.


Liên Kết Tham Khảo


Cảm ơn bạn đã dành thời gian xem chi tiết bài viết, nếu bạn có bất kỳ câu hỏi và đề xuất nào hoặc tìm thấy bất kỳ lỗi chương trình nào, vui lòng nhắn tin cho tôi. Rất cảm ơn nếu bạn có thể đưa ra một số nhận xét và chia sẻ bất kỳ lời khuyên cải tiến nào để chúng tôi có thể làm cho công việc của mình tốt hơn ~


Chỉnh sửa lần cuối bởi LiuYuancheng([email protected]) vào ngày 19/07/2025, nếu bạn có bất kỳ vấn đề nào hoặc tìm thấy bất kỳ lỗi nào, vui lòng gửi tin nhắn cho tôi .

  RELATED

No related programming articles found. Browse all programming tutorials and articles.

  COMMENTS

0

No comment for this article.