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

วัตถุประสงค์การออกแบบ :

The KYPO Cyber Range Platform (KYPO CRP) เป็นโซลูชันโอเพนซอร์สที่พัฒนาโดย Masaryk University เพื่อสนับสนุนการฝึกอบรมและฝึกปฏิบัติการด้านความปลอดภัยทางไซเบอร์ ภายใต้ลิขสิทธิ์ MIT ทำให้องค์กรมีความยืดหยุ่นในการปรับแต่งและขยายแพลตฟอร์มเพื่อให้ตรงกับเป้าหมายการฝึกอบรมเฉพาะ KYPO CRP สร้างขึ้นบนการผสมผสานเทคโนโลยี OpenStack และ Kubernetes และรวมฟังก์ชันการทำงานที่สำคัญ เช่น การส่งมอบสถานการณ์ Capture-the-Flag (CTF) และการจัดการอินสแตนซ์เสมือน

คู่มือการติดตั้งอย่างเป็นทางการมีขั้นตอนการปรับใช้ที่คล่องตัว (คู่มืออย่างเป็นทางการ) เมื่อฉันทำตามคำแนะนำในการปรับใช้บน OpenStack ฉันพบว่าขาดการกำหนดค่าโดยละเอียดและโดยเฉพาะอย่างยิ่งเคล็ดลับการแก้ไขปัญหาบางอย่างที่ทำให้การปรับใช้ของผู้คนล้มเหลว วัตถุประสงค์ของบทความนี้คือเพื่อเชื่อมช่องว่างนั้นโดยนำเสนอคู่มือทีละขั้นตอนที่ครอบคลุมสำหรับการปรับใช้ KYPO CRP บน OpenStack-YOGA ซึ่งรวมถึงงานการกำหนดค่าล่วงหน้าที่จำเป็น คำแนะนำในการปรับใช้ที่สมบูรณ์โดยใช้ Terraform และ Helm และปัญหาทั่วไปที่ผู้ใช้อาจพบ พร้อมด้วยแนวทางแก้ไขที่เป็นประโยชน์

บทความนี้ประกอบด้วย 3 ส่วนหลัก:

  • การกำหนดค่าล่วงหน้า OpenStack : การตั้งค่าที่จำเป็นในสภาพแวดล้อม OpenStack-YOGA ของคุณก่อนที่จะปรับใช้ KYPO-CRP

  • ขั้นตอนการปรับใช้ KYPO : ขั้นตอนโดยละเอียดในการปรับใช้ KYPO-CRP โดยใช้ Terraform และปรับใช้แอปพลิเคชันโดยใช้ Helm แก้ไขคลัสเตอร์ KYPO-K8s และ KYPO-Web-dashboard

  • การแก้ไขปัญหาและการใช้งาน : วิธีการเข้าถึงแพลตฟอร์มหลังการปรับใช้และแก้ไขปัญหาทั่วไปที่พบระหว่างการตั้งค่า

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

บทนำ

The KYPO Cyber Range Platform (KYPO CRP) ออกแบบมาเพื่อรองรับความต้องการด้านการฝึกอบรมทั้งในเชิงวิชาการและวิชาชีพ สร้างขึ้นโดยใช้เทคโนโลยีที่ทันสมัย เช่น k8s คอนเทนเนอร์ ไมโครเซอร์วิส และโครงสร้างพื้นฐานในรูปแบบโค้ด ทำให้เป็นโซลูชันที่ยืดหยุ่น ปรับขนาดได้ และคุ้มค่าสำหรับการสร้างสถานการณ์ความปลอดภัยทางไซเบอร์ที่สมจริง

KYPO-CRP ช่วยให้สามารถสร้างแซนด์บ็อกซ์ที่ปรับแต่งได้ ทั้งใน คลาวด์ และ ภายในองค์กร ช่วยให้ผู้เรียนมีส่วนร่วมในการฝึกปฏิบัติ เช่น ความท้าทาย Capture-the-Flag (CTF) และการจำลองเหตุการณ์ทางไซเบอร์ แพลตฟอร์มนี้เป็นโอเพนซอร์สอย่างสมบูรณ์และพร้อมใช้งานภายใต้ลิขสิทธิ์ MIT ช่วยให้องค์กรสามารถปรับแต่งการปรับใช้ให้เข้ากับโครงสร้างพื้นฐานและเป้าหมายการฝึกอบรมที่เป็นเอกลักษณ์ของตนได้ แหล่งอ้างอิงหลักของบทความนี้อิงตามลิงก์สองลิงก์ด้านล่าง:

บทความนี้ให้คำแนะนำทีละขั้นตอนโดยละเอียดเกี่ยวกับการปรับใช้ KYPO-CRP บน OpenStack-YOGA ดังแสดงในแผนภาพด้านล่าง

s_0315.png

Figure-00: แผนภาพขั้นตอนการทำงานของการปรับใช้ เวอร์ชัน v_0.1.3 (2025)

กระบวนการปรับใช้แบ่งออกเป็นสี่ขั้นตอนหลัก:

  • กำหนดค่า OpenStack ล่วงหน้า – ตั้งค่าการกำหนดค่า OpenStack ที่จำเป็นและข้อกำหนดเบื้องต้น

  • ปรับใช้ทรัพยากรพื้นฐาน OpenStack – ใช้ไฟล์ Terraform พื้นฐานของ KYPO เพื่อปรับใช้โครงสร้างพื้นฐานพื้นฐาน

  • ปรับใช้แอปพลิเคชัน KYPO CRP Helm – ปรับใช้เลเยอร์แอปพลิเคชันโดยใช้ Helm และไฟล์ Terraform ส่วนหัวของ KYPO

  • สรุปการกำหนดค่า – ตั้งค่าคลัสเตอร์ Kubernetes ให้สมบูรณ์และการกำหนดค่าแดชบอร์ด


ภาพรวมเทคโนโลยี KYPO-CRP

KYPO-CRP อิงตามแนวทางที่ทันสมัย เช่น คอนเทนเนอร์ โครงสร้างพื้นฐานในรูปแบบโค้ด ไมโครเซอร์วิส และซอฟต์แวร์โอเพนซอร์ส รวมถึงเทคโนโลยีผู้ให้บริการคลาวด์ - OpenStack โครงสร้างระบบแสดงดังด้านล่าง:

s_0419.png

Figure-01: แผนภาพขั้นตอนการทำงานของระบบ KYPO_CRP เวอร์ชัน v_0.1.3 (2025)

KYPO CRP ใช้วิธีการเปิดแบบเดียวกันสำหรับเนื้อหาเช่นเดียวกับสถาปัตยกรรมเพื่อส่งเสริมการสร้างชุมชนผู้ฝึกสอนและสนับสนุนการแบ่งปันส่วนประกอบการสร้างการฝึกอบรม ด้วยเหตุผลดังกล่าว เครื่องเสมือน เครือข่าย และการฝึกอบรมทั้งหมดถูกกำหนดไว้ในภาษาการทำให้เป็นอนุกรมข้อมูลที่มนุษย์อ่านได้ JSON และ YAML หรือใช้ซอฟต์แวร์โอเพนซอร์ส Packer เพื่อสร้างเครื่องเสมือนและ Ansible สำหรับอธิบายเนื้อหาของเครื่อง

โหนดควบคุม KYPO กำลังรันคลัสเตอร์ K8s ที่มีพ็อดต่างๆ ในโหนด OpenStack "default-kubernetes-cluster" คุณสามารถรับสถานะได้ดังแสดงด้านล่าง:

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  

การเตรียม OpenStack

ก่อนที่จะปรับใช้ KYPO-CRP คุณต้องกำหนดค่าการตั้งค่าหลายอย่างในสภาพแวดล้อม OpenStack ของคุณ ซึ่งรวมถึงการสร้างข้อมูลรับรองแอปพลิเคชันสำหรับ KYPO และการตั้งค่ารสชาติที่จำเป็นเพื่อให้แน่ใจว่าเครื่องเสมือน (VM) สามารถจัดเตรียมได้อย่างถูกต้อง

สร้างข้อมูลรับรองแอปพลิเคชัน OpenStack สำหรับ KYPO-CRP

ขั้นตอนที่ 1: เข้าสู่ระบบแดชบอร์ด OpenStack-YOGA ในฐานะผู้ดูแลระบบ ภายใต้ Identity -> Application Credential และสร้างข้อมูลรับรองดังแสดงด้านล่าง:

s_0518.png

Figure-02: สร้างข้อมูลรับรองแอปพลิเคชัน OpenStack เวอร์ชัน v_0.1.3 (2025)

สำหรับบทบาทข้อมูลรับรอง ให้เลือกทั้ง 4 บทบาท: admin, user, member, reader และทำเครื่องหมายที่ช่องทำเครื่องหมาย Unrestricted

ขั้นตอนที่ 2: ดาวน์โหลดไฟล์ app-cred-xxx-open-rc.sh และ clouds.yaml (ดังแสดงใน file/app-cred-kypotest7-openrc.sh และ files/clouds.yaml )

ตัวอย่างของ 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

ตัวอย่างของ 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"

คุณยังสามารถสร้างข้อมูลรับรองแอปพลิเคชันในโหนด OpenStack Controller ด้วยคำสั่งด้านล่าง:

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

กำหนดค่ารสชาติ OpenStack ที่จำเป็น

ตรวจสอบให้แน่ใจว่ามี VM flavors ต่อไปนี้ในสภาพแวดล้อม OpenStack ของคุณ สิ่งเหล่านี้ใช้ระหว่างการปรับใช้ KYPO-CRP สำหรับการจัดสรรทรัพยากรการประมวลผล:

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

Note: These flavor names must exactly match those referenced in KYPO’s Terraform scripts and for the standard.xlarge it will be good to use 16 vCPU and 32GB Ram, otherwise based on my test there will be high possibility the deployment will hang or fail if you use 8vCPU and 16GB.

อีกสิ่งหนึ่งที่สำคัญมากคือ หากความคืบหน้าในการปรับใช้ของคุณล้มเหลว และคุณต้องการปรับใช้อีกครั้งตั้งแต่เริ่มต้น คุณต้องทำการตั้งค่าล้างข้อมูลดังต่อไปนี้ มิฉะนั้น มีความเป็นไปได้สูงที่การปรับใช้อีกครั้งจะล้มเหลวอีกครั้ง:

หากคุณต้องการล้าง/ลบอินสแตนซ์ KYPO ทั้งหมดออกจาก OpenStack นี่คือพารามิเตอร์ที่ต้องลบ:

  • ล้าง keypair ที่มีชื่อ '-kypo' เช่น (Admin Kypo หรือ kypo-kypo)

  • ปล่อย OpenStack float IP address 2 รายการที่ KYPO ใช้

  • ลบเราเตอร์ kypo-public

  • ลบ kypo-instance ทั้งหมด: [ลบ default-p000000000-* ทั้งหมด]

  • ลบเครือข่าย kypo-base: [หากเกิดข้อผิดพลาดในการลบ ให้ล้างพอร์ต เครือข่ายย่อยของเครือข่าย แล้วลบอีกครั้ง]

  • ล้างกลุ่มความปลอดภัยที่ KYPO สร้างขึ้นทั้งหมด

  • ลบ subnet "sandbox" ภายใต้เครือข่าย "provider"


การปรับใช้ทรัพยากรพื้นฐานของ OpenStack

ส่วนนี้เป็นไปตามคู่มือการปรับใช้อย่างเป็นทางการจากที่เก็บ KYPO GitLab:🔗 คำแนะนำในการปรับใช้ BASE.md

กำหนดค่าไฟล์การติดตั้งล่วงหน้า

ขั้นตอนที่ 1 โคลนที่เก็บการปรับใช้ KYPO CRP

SSH เข้าสู่โหนดคอนโทรลเลอร์ OpenStack ของคุณ และโคลนสคริปต์การปรับใช้ KYPO CRP อย่างเป็นทางการ (v1.1.4):

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

ขั้นตอนที่ 2: คัดลอกไฟล์ข้อมูลรับรองไปยังคอนโทรลเลอร์

คัดลอก app-credxxx-open-rc.sh และ clouds.yaml ที่สร้างไว้ก่อนหน้านี้ scp โหนดคอนโทรลเลอร์ OpenStack วางไฟล์ clouds.yaml ภายใต้โฟลเดอร์ tf-head-services และ tf-openstac-base ดังที่แสดงด้านล่าง:

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

ขั้นตอนที่ 3: ขั้นตอนที่ 3: อัปเดตไฟล์ผู้ให้บริการ Terraform

แก้ไขไฟล์ tf-openstack-base/provider.tf เพื่อกำหนดผู้ให้บริการ OpenStack โดยเพิ่ม 3 บรรทัดด้านล่างในไฟล์

provider "openstack" {
 cloud = "openstack"
}

ขั้นตอนที่ 4: อัปเดตตัวแปรพื้นฐาน

แก้ไข tf-openstack-base/tfvars/vars-base.tfvars ด้วยพารามิเตอร์เหล่านี้:

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

Note: When I follow the Kypo-Crp official web use the vars-all.tfvars, there will be high possibility the KYPO-k8s cluster uag-service container get crash during the deployment.

ขั้นตอนที่ 5: ติดตั้ง Terraform

sudo apt install snapd
sudo snap install terraform --classic

ปรับใช้ทรัพยากรพื้นฐานของ OpenStack

ขั้นตอนที่ 1: โหลดข้อมูลรับรองแอปพลิเคชัน

เปิดใช้งานข้อมูลรับรองแอปพลิเคชัน OpenStack สำหรับ Terraform โดยการ sourcing สคริปต์:

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

ขั้นตอนที่ 2: กำหนดค่าเครือข่ายภายนอก

คัดลอกและแก้ไขไฟล์ตัวแปรการปรับใช้:

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

ระบุเครือข่าย OpenStack ภายนอกของคุณ:

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

เพิ่มสตริง provider ลงในพารามิเตอร์ external_network_name ใน deployment.tfvars ดังที่แสดงด้านล่าง:

external_network_name = "provider"

ขั้นตอนที่ 3: เรียกใช้การปรับใช้ Terraform

เริ่มต้นและใช้การกำหนดค่า Terraform (แนะนำให้รันภายใต้ sudo และเพิ่ม auto-approve):

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

ขั้นตอนที่ 4: บันทึกข้อมูลเอาต์พุต

เมื่อการปรับใช้สำเร็จ Terraform จะส่งออกข้อมูลการกำหนดค่า Kubernetes และ proxy ที่สำคัญ บันทึกข้อมูลนี้ไว้สำหรับขั้นตอนการปรับใช้ถัดไป:

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

ขั้นตอนที่ 5: ตรวจสอบการเชื่อมต่อ

ตรวจสอบว่าพอร์ตที่จำเป็น (เช่น SSH, HTTP, HTTPS) เปิดอยู่บน IP ของคลัสเตอร์ Kubernetes หรือไม่:

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

สำคัญ : พอร์ตทั้ง 5 พอร์ตต้องเปิดอยู่ มิฉะนั้นหมายความว่าคลัสเตอร์ K8s บางพ็อดมีปัญหา และส่วนใหญ่มักจะเป็นปัญหาของการเริ่มต้นเราเตอร์ traefik ล้มเหลว หากคุณเข้าสู่ระบบโหนดควบคุม KYPO และแสดงรายการกระบวนการ สถานการณ์ปกติจะเป็นดังนี้:

s_0619.png

Figure-03: รายการกระบวนการ KYPO K8s ปกติ เวอร์ชัน v_0.1.3 (2025)

หากไม่ได้เริ่ม traefik ซึ่งหมายความว่าการปรับใช้ล้มเหลว (ดังแสดงด้านล่าง)

s_0718.png

Figure-04: รายการกระบวนการ KYPO K8s ที่มีข้อยกเว้น เวอร์ชัน v_0.1.3 (2025)

ในการแก้ปัญหานี้ คุณต้องเปลี่ยนเวอร์ชันในไฟล์ deployment.tfvars สองบรรทัดนี้เป็นเวอร์ชันที่ถูกต้อง:

kypo_crp_head_version         = "1.1.1"
kypo_postgres_version         = "1.0.0"

และเราจะเห็นว่าในเวอร์ชันคอมมิตของ KYPO repo 4b3b918 พวกเขายังได้ลดระดับเพื่อแก้ไขข้อผิดพลาดนี้:

s_0816.png

การปรับใช้แอปพลิเคชัน Helm ของ KYPO-CRP

เมื่อโครงสร้างพื้นฐาน OpenStack พร้อมแล้ว ขั้นตอนต่อไปคือการปรับใช้แอปพลิเคชัน KYPO Cyber Range Platform (CRP) โดยใช้ Helm

ขั้นตอนที่ 1: กำหนดค่าตัวแปรการปรับใช้

นำทางไปยังไดเรกทอรี tf-head-services ซึ่งมีไฟล์กำหนดค่า Terraform สำหรับการปรับใช้ส่วนประกอบ KYPO CRP:

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

แก้ไขไฟล์ tfvars/deployment.tfvars และป้อนค่าที่ได้จากขั้นตอนการตั้งค่าโครงสร้างพื้นฐานก่อนหน้า ด้านล่างนี้คือตัวอย่างการกำหนดค่า:

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
  }
}

หมายเหตุสำคัญ: สำหรับ gen_user_count โปรดตั้งค่าเป็นตัวเลขขนาดใหญ่ เช่น 300 มิฉะนั้นคุณต้องไปที่พ็อด K8s เพื่อเพิ่มผู้ใช้ใหม่หลังจากปรับใช้เสร็จสิ้น ต่อไปฉันจะแสดงวิธีเพิ่มผู้ใช้ใหม่

ขั้นตอนที่ 2: ปรับใช้ KYPO CRP ด้วย Terraform

เมื่อกำหนดค่าไฟล์ deployment.tfvars แล้ว ให้เริ่มต้น Terraform และใช้การกำหนดค่าเพื่อติดตั้งแอปพลิเคชัน Helm ของ KYPO CRP:

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

ข้อสังเกต: หากคุณต้องการเริ่มต้นการปรับใช้ใหม่ทั้งหมด โปรดลบไฟล์ terraform.tfstate

กระบวนการติดตั้งจะใช้เวลาประมาณ 9 - 13 นาที หากไม่มีข้อผิดพลาดเกิดขึ้น

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.

หากคุณพบว่าการติดตั้งใช้เวลานานกว่าครึ่งชั่วโมง มีความเป็นไปได้สูงที่การปรับใช้จะล้มเหลว จากการทดสอบของฉัน บางครั้งจะหมดเวลา บางครั้งก็จะค้างอยู่ที่นั่น

ขั้นตอนที่ 3: ทดสอบการเข้าถึง Kypo-dashboard และเข้าสู่ระบบ

เข้าถึงแดชบอร์ด KYPO โดย URL https:// หากแดชบอร์ดด้านล่างปรากฏขึ้น ซึ่งหมายความว่าคลัสเตอร์ KYPO K8s ปรับใช้สำเร็จดังแสดงด้านล่าง เข้าสู่ระบบด้วยผู้ดูแลระบบที่เรากำหนดค่าไว้เมื่อสักครู่นี้

s_0912.png

แต่เมื่อคุณเข้าสู่ระบบเพื่อสร้างแซนด์บ็อกซ์ มันจะล้มเหลว คุณต้องเปลี่ยนการตั้งค่า K8s บางอย่าง จากนั้นคุณจึงจะเริ่มใช้งานได้

เปลี่ยนการกำหนดค่าคลัสเตอร์ Kypo-Kubernetes

หากคุณไม่สามารถสร้างแซนด์บ็อกซ์ด้วยผู้ดูแลระบบได้สำเร็จหลังการติดตั้ง ในการแก้ไขปัญหานี้ จำเป็นต้องมีการปรับเปลี่ยนด้วยตนเองภายในสภาพแวดล้อมคลัสเตอร์ Kubernetes ของ KYPO ขั้นตอนต่อไปนี้แสดงรายละเอียดวิธีการกำหนดค่าคลัสเตอร์เพื่อแก้ไขปัญหา

ขั้นตอนที่ 1: เตรียมคีย์สาธารณะ Kypo K8s เพื่อเข้าสู่ระบบ Kypo K8s-Node

เยี่ยมชม: https://www.base64decode.org/ และครอบคลุมสตริง proxy_key proxy_key = "LS0tLS1CRUdJTiBFQyB..." ใน deployment.tfvars ไปยังไฟล์คีย์และบันทึกเนื้อหาใน key.pem

ขั้นตอนที่ 2: เข้าสู่ระบบ KYPO Kubernetes Node

scp key.pem ไปยังโหนดควบคุม OpenStack และ ssh ไปยัง k8s cluster vm ด้วยคีย์

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

ขั้นตอนที่ 3: กำหนดค่า Host Aliases สำหรับการแก้ไข DNS ที่เสีย

หากสภาพแวดล้อม OpenStack ขาดการแก้ไขชื่อ DNS ให้แก้ไขไฟล์การปรับใช้ KYPO ด้วยตนเองเพื่อใช้ hostAliases เรียกใช้คำสั่งด้านล่างทีละรายการ:

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

สำหรับการปรับใช้แต่ละครั้ง ให้เพิ่มเนื้อหาด้านล่างภายใต้ specs.template.specs หลังจากการกำหนดค่า 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: {}        
...        

อ้างอิง: https://serverfault.com/questions/895088/can-host-aliases-be-assigned-to-deployments-in-kubernetes-if-so-how

ขั้นตอนที่ 4: แก้ไขข้อผิดพลาด Git Clone (การติดตั้ง libguac)

Kypo-Crp มีข้อผิดพลาดหนึ่งอย่างในการติดตั้ง lib "guacamole guacd" โดยใช้ apt install หลังจาก branch v1.0.10 พวกเขาแก้ไขข้อผิดพลาดแล้ว เข้าสู่ระบบคลัสเตอร์ kypo-k8s และแก้ไข internal git pod:

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

ขั้นตอนที่ 5: ทดสอบ Sandbox Definition และ Pool Allocation

ตอนนี้คุณสามารถเข้าสู่ระบบ KYPO-dashboard เพื่อกำหนด test sandbox โดยใช้ git ด้านล่างเพื่อทำการทดสอบ:

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

จากนั้นสร้าง sand box pool และจัดสรร sandbox หนึ่งรายการเพื่อตรวจสอบว่า kypo ทำงานหรือไม่:

s_1011.png

หากทั้ง 3 ขั้นตอนผ่านโดยไม่มีข้อผิดพลาด (ดังแสดงด้านบน) ซึ่งหมายความว่าการกำหนดค่าทั้งหมดทำงานได้ตามปกติและการปรับใช้ KYPO บน OpenStack สำเร็จ


เพิ่มผู้ใช้ใหม่หลายคนใน KYPO-CRP

หากคุณต้องการเพิ่มผู้ใช้ใหม่มากขึ้น คุณต้องเข้าสู่ระบบ KYPO K8s node ตามส่วนก่อนหน้าด้วยไฟล์ key:

ssh [email protected] -i key.pem 

จากนั้นใช้ KYPO users API ดังที่แสดงในส่วนการปรับใช้ พอร์ต 8084 ไม่ได้เปิดให้ภายนอก ดังนั้นจึงสามารถทำได้ภายใน K8s node เท่านั้น

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

สร้างไฟล์ users.json อย่างง่ายด้วยผู้ใช้ใหม่ที่คุณต้องการเพิ่ม:

{
  "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"
}

ชื่อผู้ใช้สำหรับเข้าสู่ระบบต้องเป็นชื่ออีเมล sub จากนั้นใช้ curl เพื่อโพสต์ข้อมูลผู้ใช้ใหม่:

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\"}"

หากคุณต้องการสร้างผู้ใช้ 100 คน ให้สร้างโปรแกรม python อย่างง่ายบน node และเรียกใช้:

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())

หลังจากที่คุณเพิ่มผู้ใช้แล้ว ให้ไปที่เว็บเพื่อดาวน์โหลดข้อมูลผู้ใช้ หรือใช้ curl GET ข้อมูลผู้ใช้ด้วย ID สมมติว่ามีผู้ใช้ 300 คนแล้ว ถ้าฉันเพิ่มผู้ใช้อีกหนึ่งคนคือ user-301 ID ของผู้ใช้ใหม่จะเป็น 301

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

จากนั้นเราจะได้รับรหัสผ่านที่ระบบสร้างขึ้นจากข้อมูลการตอบกลับ

{
  "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
        }
      ],
    }
  ],
}

ตอนนี้คุณสามารถเริ่มใช้ KYPO เพื่อสร้าง sandbox สำหรับการทดสอบได้แล้ว


ลิงก์อ้างอิง


ขอบคุณที่สละเวลาตรวจสอบรายละเอียดบทความ หากคุณมีคำถามและข้อเสนอแนะ หรือพบข้อผิดพลาดของโปรแกรม โปรดส่งข้อความถึงฉันได้เลย ขอบคุณมากหากคุณสามารถแสดงความคิดเห็นและแบ่งปันคำแนะนำในการปรับปรุง เพื่อให้เราสามารถปรับปรุงงานของเราให้ดีขึ้นได้ ~


แก้ไขล่าสุดโดย LiuYuancheng([email protected]) เมื่อวันที่ 19/07/2025 หากคุณมีปัญหาหรือพบข้อผิดพลาดใดๆ โปรดส่งข้อความถึงฉัน .

  RELATED

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

  COMMENTS

0

No comment for this article.