การวิเคราะห์ Kubernetes RBAC ทำให้ง่าย
Krane เป็นเครื่องมือวิเคราะห์ Kubernetes RBAC แบบง่าย ๆ มันระบุความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้นในการออกแบบ K8S RBAC และให้คำแนะนำเกี่ยวกับวิธีการลดลง Krane Dashboard นำเสนอท่าทางความปลอดภัย RBAC ปัจจุบันและให้คุณนำทางผ่านคำจำกัดความของมัน
คุณสามารถเริ่มต้นกับ Krane โดยการติดตั้งผ่านแผนภูมิ Helm ในคลัสเตอร์ Kubernetes เป้าหมายของคุณหรือเรียกใช้ในเครื่องด้วย Docker
สันนิษฐานว่าคุณติดตั้ง Helm CLI บนเครื่องของคุณแล้ว
$ helm repo add appvia https://appvia.github.io/krane
$ helm repo update
$ helm install krane appvia/krane --namespace krane --create-namespaceติดตามเอาท์พุทการติดตั้งแผนภูมิ Helm เกี่ยวกับวิธีการพอร์ตไปข้างหน้า Krane Dashboard
สันนิษฐานว่าคุณมีนักเทียบท่าที่ทำงานบนเครื่องในพื้นที่ของคุณ ติดตั้ง compose นักเทียบท่าถ้าคุณยังไม่ได้
Krane ขึ้นอยู่กับ Redisgraph docker-compose stack กำหนดสิ่งที่จำเป็นทั้งหมดในการสร้างและเรียกใช้บริการ Krane ในพื้นที่ นอกจากนี้ยังจะดูแลการพึ่งพา Redisgraph
docker-compose up -d
ภาพ Krane Docker จะถูกสร้างไว้ล่วงหน้าโดยอัตโนมัติหากยังไม่ได้อยู่ในเครื่องท้องถิ่น
โปรดทราบว่าเมื่อใช้งาน docker-compose ในพื้นที่ Krane จะไม่เริ่ม รายงาน RBAC และ แดชบอร์ด โดยอัตโนมัติ แต่คอนเทนเนอร์จะนอนเป็นเวลา 24 ชั่วโมงโดยค่าเริ่มต้น - ค่านี้สามารถปรับได้ใน docker-compose.override.yml EXEC ลงในคอนเทนเนอร์ KRANE ที่กำลังรันเพื่อเรียกใช้คำสั่ง docker-compose ท้องถิ่นจะติดตั้ง kube config ( ~/.kube/config ) ภายในคอนเทนเนอร์ช่วยให้คุณสามารถเรียกใช้รายงานกับกลุ่ม Kubernetes ที่คุณสามารถเข้าถึงได้แล้ว
Exec ลงในคอนเทนเนอร์ Krane ที่กำลังทำงาน
docker-compose exec krane bash เมื่ออยู่ในคอนเทนเนอร์คุณสามารถเริ่มใช้คำสั่ง krane ลอง krane -help
krane -hเพื่อตรวจสอบว่าบริการใดที่ทำงานอยู่และพอร์ตที่เกี่ยวข้อง:
docker-compose ps
เพื่อหยุด Krane และบริการการพึ่งพา:
docker-compose down
$ krane --help
NAME:
krane
DESCRIPTION:
Kubernetes RBAC static analysis & visualisation tool
COMMANDS:
dashboard Start K8s RBAC dashboard server
help Display global or [command] help documentation
report Run K8s RBAC report
GLOBAL OPTIONS:
-h, --help
Display help documentation
-v, --version
Display version information
-t, --trace
Display backtrace when an error occurs
AUTHOR:
Marcin Ciszak <[email protected]> - Appvia Ltd <appvia.io>
kubectl ท้องถิ่นในการเรียกใช้รายงานกับคลัสเตอร์ที่ทำงานอยู่คุณต้องจัดทำบริบท kubectl
krane report -k <context>
นอกจากนี้คุณยังสามารถส่งธง -c <cluster-name> หากคุณวางแผนที่จะเรียกใช้เครื่องมือกับหลายกลุ่มและกราฟ RBAC ดัชนีแยกต่างหากสำหรับแต่ละชื่อคลัสเตอร์
ในการเรียกใช้รายงานกับไฟล์ RBAC YAML/JSON ในพื้นที่ให้จัดเตรียมเส้นทางไดเรกทอรี
krane report -d </path/to/rbac-directory>
หมายเหตุ: Krane คาดว่าไฟล์ต่อไปนี้ (ในรูปแบบ Yaml หรือ JSON) จะแสดงอยู่ในเส้นทางไดเรกทอรีที่ระบุ:
หากนโยบายความปลอดภัยของ POD ไม่ได้ใช้งานคุณอาจข้ามความคาดหวังข้างต้นโดยการสร้างไฟล์ psp ด้วยตนเองด้วยเนื้อหาต่อไปนี้:
{
"items" : []
} หมายเหตุ PodSecurityPolicy ถูกเลิกใช้ใน Kubernetes v1.21 และถูกลบออกจาก Kubernetes ใน v1.25
ในการเรียกใช้รายงานจากคอนเทนเนอร์ที่ทำงานในคลัสเตอร์ Kubernetes
krane report --incluster
หมายเหตุ: บัญชีบริการที่ Krane ใช้จะต้องเข้าถึงทรัพยากร RBAC ดูข้อกำหนดเบื้องต้นสำหรับรายละเอียด
เพื่อตรวจสอบความถูกต้องของคำจำกัดความ RBAC เป็นขั้นตอนในไปป์ไลน์ CI/CD
krane report --ci -d </path/to/rbac-directory>
หมายเหตุ: Krane คาดว่าจะมีการประชุมการตั้งชื่อบางอย่างสำหรับไฟล์ทรัพยากร RBAC ที่เก็บไว้ในเครื่อง ดูหัวข้อด้านบน ในการเรียกใช้คำสั่ง krane ขอแนะนำให้ผู้ดำเนินการ CI อ้างอิง quay.io/appvia/krane:latest Docker Image
โหมด CI เปิดใช้งานโดย --ci Flag Krane จะส่งคืนรหัสสถานะที่ไม่ใช่ศูนย์พร้อมกับรายละเอียดของการทำลายกฎความเสี่ยงเมื่อตรวจพบอันตรายอย่างน้อยหนึ่งครั้ง
ในการดูทรี RBAC Facets กราฟเครือข่ายและการค้นพบรายงานล่าสุดคุณต้องเริ่มเซิร์ฟเวอร์แดชบอร์ดก่อน
krane dashboard
Cluster Flag -c <cluster-name> อาจถูกส่งผ่านหากคุณต้องการเรียกใช้แดชบอร์ดกับชื่อคลัสเตอร์เฉพาะ แดชบอร์ดจะค้นหาข้อมูลที่เกี่ยวข้องกับชื่อคลัสเตอร์ที่ระบุซึ่งถูกแคชในระบบไฟล์
คำสั่งด้านบนจะเริ่มต้นเว็บเซิร์ฟเวอร์ท้องถิ่นบนพอร์ตเริ่มต้น 8000 และแสดงลิงค์แดชบอร์ด
Krane ดัชนี RBAC เข้ามาใน Redisgraph สิ่งนี้ช่วยให้เราสามารถสอบถามเครือข่ายการพึ่งพาได้อย่างมีประสิทธิภาพและเพียงแค่ใช้ชุดย่อยของ CypherQL ที่ได้รับการสนับสนุนโดย Redisgraph
โหนดต่อไปนี้ถูกสร้างขึ้นในกราฟสำหรับวัตถุ RBAC ที่เกี่ยวข้อง:
Psp - โหนด PSP ที่มีแอตทริบิวต์รอบนโยบายความปลอดภัยของ POD ใช้ได้เฉพาะเมื่อทำงานกับ K8S <1.25Rule - กฎกฎแสดงถึงกฎการควบคุมการเข้าถึงรอบ ๆ ทรัพยากร KubernetesRole - บทบาทแสดงถึงบทบาทหรือคลัสเตอร์ที่กำหนด แอตทริบิวต์ kind กำหนดประเภทของบทบาทSubject - หัวเรื่องแสดงถึงนักแสดงที่เป็นไปได้ทั้งหมดในคลัสเตอร์ ( kind : ผู้ใช้กลุ่มและ serviceAccount)Namespace - โหนดเนมสเปซ Kubernetes :SECURITY - กำหนดลิงก์ระหว่างกฎและโหนด PSP ใช้ได้เฉพาะเมื่อทำงานกับ K8S <1.25:GRANT - กำหนดลิงก์ระหว่างบทบาทและกฎที่เกี่ยวข้องกับบทบาทนั้น:ASSIGN - กำหนดลิงก์ระหว่างนักแสดง (หัวเรื่อง) และบทบาท/คลัสเตอร์ที่กำหนด (โหนดบทบาท):RELATION - กำหนดลิงก์ระหว่างโหนดนักแสดงสองคนที่แตกต่างกัน (หัวเรื่อง):SCOPE - กำหนดลิงก์ระหว่างบทบาทและโหนดเนมสเปซ:ACCESS - กำหนดลิงก์ระหว่างหัวเรื่องและโหนดเนมสเปซ:AGGREGATE -กำหนดลิงก์ระหว่าง ClusterRoles (หนึ่ง clusterrole รวมตัวอื่น) A-(aggregates)->B:COMPOSITE -กำหนดลิงก์ระหว่าง clusterroles (หนึ่ง clusterrole สามารถรวมกันในอีก) A<-(is a composite of)-B ขอบทั้งหมดเป็นแบบสองทิศทางซึ่งหมายความว่ากราฟสามารถสอบถามได้ในทิศทางใดทิศทางหนึ่ง ข้อยกเว้นเท่านั้นคือ :AGGREGATE และ :COMPOSITE ซึ่งเป็นทิศทางเดียวแม้ว่าจะเกี่ยวข้องกับโหนดขอบเดียวกัน
ในการสอบถามกราฟโดยตรงคุณสามารถ EXEC ลงในคอนเทนเนอร์ redisgraph ที่กำลังทำงานเริ่ม redis-cli และเรียกใช้การสืบค้นโดยพลการของคุณ ทำตามคำแนะนำอย่างเป็นทางการสำหรับตัวอย่างคำสั่ง
นอกจากนี้คุณยังสามารถสอบถามกราฟจาก Krane Console EXEC แรกในการเรียกใช้ Krane Container จากนั้น
# Start Krane console - this will open interactive ruby shell with Krane code preloaded
console
# Instantiate Graph client
graph = Krane :: Clients :: RedisGraph . client cluster : 'default'
# Run arbitrary CypherQL query against indexed RBAC Graph
res = graph . query ( %Q(
MATCH (r:Rule {resource: "configmaps", verb: "update"})<-[:GRANT]-(ro:Role)<-[:ASSIGN]-(s:Subject)
RETURN s.kind as subject_kind, s.name as subject_name, ro.kind as role_kind, ro.name as role_name) )
# Print the results
res . print_resultset # Results...
+----------------+--------------------------------+-----------+------------------------------------------------+
| subject_kind | subject_name | role_kind | role_name |
+----------------+--------------------------------+-----------+------------------------------------------------+
| ServiceAccount | bootstrap-signer | Role | system:controller:bootstrap-signer |
| User | system:kube-controller-manager | Role | system::leader-locking-kube-controller-manager |
| ServiceAccount | kube-controller-manager | Role | system::leader-locking-kube-controller-manager |
| User | system:kube-scheduler | Role | system::leader-locking-kube-scheduler |
| ServiceAccount | kube-scheduler | Role | system::leader-locking-kube-scheduler |
+----------------+--------------------------------+-----------+------------------------------------------------+
หมายเหตุ: ตัวอย่างการสืบค้นด้านบนจะเลือกวิชาทั้งหมดที่มีบทบาท/ClusterRoles ที่ได้รับมอบหมายให้เข้าถึง update configmaps
กฎความเสี่ยง RBAC ถูกกำหนดไว้ในไฟล์กฎ โครงสร้างของแต่ละกฎส่วนใหญ่อธิบายตนเอง ชุดในตัวสามารถขยาย / แทนที่ด้วยการเพิ่มกฎที่กำหนดเองพิเศษลงในไฟล์กฎ Cutom
มาโครคือ "คอนเทนเนอร์" สำหรับชุดของคุณลักษณะทั่วไป/ที่ใช้ร่วมกันและอ้างอิงโดยกฎความเสี่ยงอย่างน้อยหนึ่งกฎ หากคุณเลือกที่จะใช้มาโครในกฎความเสี่ยงที่กำหนดคุณจะต้องอ้างอิงตามชื่อเช่น macro: <macro-name> > โปรดทราบว่าแอตทริบิวต์ที่กำหนดไว้ใน macro ที่อ้างอิงจะมีความสำคัญกว่าแอตทริบิวต์เดียวกันที่กำหนดไว้ในระดับกฎ
แมโครสามารถมีแอตทริบิวต์ใด ๆ ต่อไปนี้:
query - Query Redisgraph มีความสำคัญเหนือกว่า template ต้องมีการกำหนด writerwriter - นักเขียนเป็นนิพจน์ทับทิมที่ใช้ในการจัดรูปแบบชุดผลลัพธ์ query นักเขียนมีความสำคัญเหนือกว่า templatetemplate - ชื่อเทมเพลตแบบสอบถาม/นักเขียนในตัว หากไม่ได้ระบุ query และ writer เครื่องสร้างแบบสอบถามที่เลือกจะถูกใช้พร้อมกับนักเขียนที่ตรงกัน กฎสามารถมีคุณลักษณะใด ๆ ต่อไปนี้:
id [จำเป็น] กฎ ID เป็นตัวระบุกฎที่ไม่ซ้ำกัน
group_title [จำเป็น] ชื่อเรื่องที่ใช้กับรายการทั้งหมดที่ตกอยู่ภายใต้การตรวจสอบความเสี่ยงนี้
severity [จำเป็น] ความรุนแรงเป็นหนึ่งใน: อันตราย,: คำเตือน,: ข้อมูล
info [จำเป็น] ข้อมูลข้อความเกี่ยวกับการตรวจสอบและคำแนะนำเกี่ยวกับวิธีลดความเสี่ยง
query [conditonal] Redisgraph Query
template ต้องมีการกำหนด writer writer [conditonal] นักเขียนเป็นนิพจน์ทับทิมที่ใช้ในการจัดรูปแบบชุดผลลัพธ์แบบสอบถาม
template ต้องมี query ที่จะกำหนด template [conditonal] ชื่อแบบสอบถาม/นักเขียนในตัว หากไม่ได้ระบุ query และ writer เครื่องสร้างแบบสอบถามที่เลือกจะถูกใช้พร้อมกับนักเขียนที่ตรงกัน
เทมเพลตในตัวบางตัวต้องการแอตทริบิวต์ match_rules ที่จะระบุไว้ในระดับกฎของแต่ละบุคคลเพื่อสร้างแบบสอบถามที่ถูกต้อง เทมเพลตที่ต้องการในปัจจุบัน:
match_rules แบบสอบถามกราฟที่สร้างขึ้นจะส่งคืนคอลัมน์ต่อไปนี้: match_rules [conditonal] จำเป็นเมื่อ template ขึ้นอยู่กับกฎการจับคู่เพื่อสร้างแบบสอบถาม
match_rules :
- resources : ['cronjobs']
verbs : ['update'] custom_params [ไม่บังคับ] รายการของคู่คีย์-ค่าที่กำหนดเองที่จะได้รับการประเมินและแทนที่ใน query กฎและการเป็นตัวแทน writer
custom_params :
- attrA : valueA
- attrB : valueB{{attrA}} และ {{attrB}} จะถูกแทนที่ด้วย valueA และ valueB ตามลำดับ threshold [ไม่บังคับ] ค่าตัวเลข เมื่อแน่นอนสิ่งนี้จะพร้อมใช้งานเป็นตัวยึดเทมเพลต {{threshold}} ในนิพจน์ writer
macro [ไม่บังคับ] อ้างอิงถึงพารามิเตอร์ทั่วไปที่กำหนดไว้ในแมโครชื่อ
disabled [ไม่บังคับ] เมื่อตั้งค่าเป็น true มันจะปิดการใช้งานกฎที่กำหนดและแยกออกจากการประเมินผล โดยค่าเริ่มต้นกฎทั้งหมดจะเปิดใช้งาน
- id : verbose-rule-example
group_title : Example rule
severity : :danger
info : Risk description and instructions on how to mitigate it goes here
query : |
MATCH
(s:Subject)-[:ACCESS]->(ns:Namespace)
WHERE
NOT s.name IN {{whitelist_subject_names}}
RETURN
s.kind as subject_kind,
s.name as subject_name,
COLLECT(ns.name) as namespace_names
ORDER BY
subject_kind,
subject_name,
namespace_names DESC
threshold : 2
writer : |
if result.namespace_names.count > {{threshold}}
"#{result.subject_kind} #{result.subject_name} can access namespaces: #{result.namespace_names.join(', ')}"
end
disabled : true ตัวอย่างข้างต้นกำหนด query กราฟอย่างชัดเจนซึ่งใช้ในการประเมินความเสี่ยง RBAC และนิพจน์ writer ที่ใช้ในการจัดรูปแบบชุดผลลัพธ์แบบสอบถาม แบบสอบถามเพียงแค่เลือก Subjects ทั้งหมด (ไม่รวม whitelisted) และ Namespaces ที่พวกเขาสามารถเข้าถึงได้ โปรดทราบว่าชุดผลลัพธ์จะรวมเฉพาะ Subjects ที่เข้าถึงเนมส threshold ซมากกว่า 2 ตัวเท่านั้น นิพจน์ของ writer คนสุดท้ายจะถูกจับเป็นเอาต์พุตรายการผลลัพธ์ที่จัดรูปแบบ
writer สามารถเข้าถึงรายการชุดผลลัพธ์ผ่านวัตถุ result ด้วยวิธีการจับคู่องค์ประกอบที่ส่งคืนโดยการสืบค้นเช่น result.subject_kind , result.subject_name ฯลฯ
บันทึก:
{{threshold}} ตัวยึดตำแหน่งในนิพจน์ writer จะถูกแทนที่ด้วยค่าคำหลัก threshold ของกฎ{{whitelist_subject_names}} หมายถึงฟิลด์ที่กำหนดเองซึ่งจะถูกแก้ไขด้วยค่า Whitelist ที่กำหนดไว้สำหรับ id กฎที่กำหนด หากชื่อฟิลด์ตัวยึดตำแหน่งไม่ได้ถูกกำหนดไว้ใน whitelist มันจะถูกแทนที่ด้วยอาร์เรย์ที่ว่างเปล่า [''] โดยค่าเริ่มต้น อ่านเพิ่มเติมเกี่ยวกับ Whitelisting ด้านล่าง เทมเพลตในตัวทำให้คำจำกัดความของกฎความเสี่ยงง่ายขึ้นอย่างมีนัยสำคัญอย่างไรก็ตามพวกเขาได้รับการออกแบบมาเพื่อแยกข้อมูลประเภทเฉพาะและอาจไม่เหมาะสมสำหรับกฎที่กำหนดเองของคุณ หากคุณพบว่าตัวเองนำ query หรือการแสดงออก writer กลับมาใช้ซ้ำหลายกฎคุณควรพิจารณาแยกออกมาสู่ macro และอ้างอิงในกฎที่กำหนดเองของคุณเพื่อทำให้แห้ง
- id : risky-any-verb-secrets
group_title : Risky Roles/ClustersRoles allowing all actions on secrets
severity : :danger
info : Roles/ClusterRoles allowing all actions on secrets. This might be dangerous. Review listed Roles!
template : risky-role
match_rules :
- resources : ['secrets']
verbs : ['*'] ตัวอย่างด้านบนแสดงกฎข้อใดข้อหนึ่งในตัว มันอ้างอิงเทมเพลต risky-role ซึ่งเมื่อการประมวลผลจะขยายกฎโดยการฉีด query และการแสดงออก writer ก่อนที่จะทริกเกอร์การประเมินกฎ match_rules จะถูกใช้เพื่อสร้างแบบสอบถามการจับคู่ที่เหมาะสม
ตัวเลือก Whitelist มีชุดของชื่อแอตทริบิวต์ที่กำหนดเองและค่าที่เกี่ยวข้อง (whitelisted)
ชื่อแอตทริบิวต์และค่าของพวกเขานั้นเป็นไปโดยพลการ พวกเขาถูกกำหนดไว้ในไฟล์ whitelist และแบ่งออกเป็นสามส่วนแยกกัน:
global - ขอบเขตระดับบนสุด คุณลักษณะที่กำหนดเองที่กำหนดไว้ที่นี่จะใช้กับกฎความเสี่ยงทั้งหมดโดยไม่คำนึงถึงชื่อคลัสเตอร์common - แอตทริบิวต์ที่กำหนดเองจะถูกกำหนดให้เป็น id กฎความเสี่ยงเฉพาะโดยไม่คำนึงถึงชื่อคลัสเตอร์cluster (ที่มีรายการซ้อนกันของชื่อคลัสเตอร์) - แอตทริบิวต์ที่กำหนดเองจะใช้กับ id กฎความเสี่ยงเฉพาะสำหรับชื่อคลัสเตอร์ที่กำหนด กฎความเสี่ยงแต่ละข้อตามการประเมินผลจะพยายามแก้ไขตัวยึดพารามิเตอร์ทั้งหมดที่ใช้ใน query เช่น {{your_whitelist_attribute_name}} หากชื่อพารามิเตอร์ของตัวยึด (เช่นชื่อระหว่างวงเล็บหยิกสองครั้ง) ตรงกับชื่อแอตทริบิวต์ที่อนุญาตใด ๆ สำหรับ id กฎความเสี่ยงนั้นจะถูกแทนที่ด้วยค่าที่คำนวณได้ หากไม่พบค่าค่าสำหรับตัวยึดตำแหน่งที่กำหนดมันจะถูกแทนที่ด้วย ['']
ตัวอย่าง whitelist ด้านล่างสร้าง placeholder-key => value สำหรับกฎความเสี่ยงกับการจับคู่ id id การจับคู่
{{whitelist_role_names}} => ['acp:prometheus:operator']
{{whitelist_subject_names}} => ['privileged-psp-user', 'another-user']
คีย์ตัวยึดตัวยึดด้านบนเมื่อใช้ในการสืบค้นกราฟที่กำหนดเองจะถูกแทนที่ด้วยค่าที่เกี่ยวข้องเมื่อการประเมินกฎความเสี่ยง
ตัวอย่าง:
---
rules :
global : # global scope - applies to all risk rule and cluster names
whitelist_role_names : # custom attribute name
- acp:prometheus:operator # custom attribute values
common : # common scope - applies to specific risk rule id regardless of cluster name
some-risk-rule-id : # this corresponds to risk rule id defined in config/rules.yaml
whitelist_subject_names : # custom attribute name
- privileged-psp-user # custom attribute values
cluster : # cluster scope - applies to speciifc risk rule id and cluster name
default : # example cluster name
some-risk-rule-id : # risk rule id
whitelist_subject_names : # custom attribute nane
- another-user # custom attribute values Krane สามารถนำไปใช้กับกลุ่ม Kubernetes ในพื้นที่หรือระยะไกลได้อย่างง่ายดาย
เนมสเปซ Kubernetes บัญชีบริการพร้อมกับ RBAC ที่เหมาะสมจะต้องอยู่ในคลัสเตอร์ ดูข้อกำหนดเบื้องต้นสำหรับการอ้างอิง
ค่าเริ่มต้น Krane EntryPoint ดำเนินการ bin/in-cluster-run ซึ่งรอให้อินสแตนซ์ของ Redisgraph พร้อมใช้งานก่อนที่จะเริ่ม รายงาน RBAC Loop และ Dashboard Web Server
คุณอาจควบคุมแง่มุมบางอย่างของการดำเนินการในคลัสเตอร์ด้วยตัวแปรสภาพแวดล้อมต่อไปนี้:
KRANE_REPORT_INTERVAL - กำหนดช่วงเวลาเป็นวินาทีสำหรับรายงานการวิเคราะห์แบบคงที่ RBAC ค่าเริ่มต้น: 300 (ในวินาทีคือ 5 นาที)KRANE_REPORT_OUTPUT - กำหนดรูปแบบผลลัพธ์ความเสี่ยง RBAC ค่าที่เป็นไปได้ :json , :yaml , :none ค่าเริ่มต้น :jsonก่อนที่เราจะเริ่มคุณจะต้องใช้เครื่องมือต่อไปนี้:
ติดตั้งแผนภูมิ Helm:
$ helm repo add appvia https://appvia.github.io/krane
$ helm repo update
$ helm install krane appvia/krane --namespace krane --create-namespaceดูไฟล์ values.yaml สำหรับรายละเอียดของตัวเลือกและพารามิเตอร์อื่น ๆ
kubectl create
--context < docker-desktop >
--namespace krane
-f k8s/redisgraph-service.yaml
-f k8s/redisgraph-deployment.yaml
-f k8s/krane-service.yaml
-f k8s/krane-deployment.yamlโปรดทราบว่าบริการ Dashboard Krane ไม่ได้ถูกเปิดเผยโดยค่าเริ่มต้น!
kubectl port-forward svc/krane 8000
--context= < docker-desktop >
--namespace=krane
# Open Krane dashboard at http://localhost:8000คุณสามารถค้นหาตัวอย่างการปรับใช้ในไดเรกทอรี K8S
ปรับเปลี่ยนรายการตามที่จำเป็นสำหรับการปรับใช้ของคุณตรวจสอบให้แน่ใจว่าคุณอ้างอิงภาพ Krane Docker เวอร์ชันที่ถูกต้องในไฟล์การปรับใช้ ดู Krane Docker Registry สำหรับแท็กที่มีอยู่หรือใช้ latest
หากคลัสเตอร์ K8S ของคุณมาพร้อมกับการรองรับคอนโทรลเลอร์ Compose-on-Kubernetes ในตัว ( docker-desktop รองรับโดยค่าเริ่มต้น) คุณสามารถปรับใช้ Krane และการพึ่งพาของมันด้วยคำสั่ง Docker Stack เดียว:
docker stack deploy
--orchestrator kubernetes
--namespace krane
--compose-file docker-compose.yml
--compose-file docker-compose.k8s.yml kraneหมายเหตุ: ตรวจสอบให้แน่ใจว่าบริบท Kube ปัจจุบันของคุณถูกตั้งค่าอย่างถูกต้องก่อนเรียกใช้คำสั่งด้านบน!
ตอนนี้แอปพลิเคชันสแต็กควรถูกนำไปใช้กับคลัสเตอร์ Kubernetes และบริการทั้งหมดพร้อมและเปิดเผย โปรดทราบว่า Krane จะเริ่มต้นรายงานลูปและเซิร์ฟเวอร์แดชบอร์ดโดยอัตโนมัติ
docker stack services --orchestrator kubernetes --namespace krane kraneคำสั่งด้านบนจะสร้างผลลัพธ์ต่อไปนี้:
ID NAME MODE REPLICAS IMAGE PORTS
0de30651-dd5 krane_redisgraph replicated 1/1 redislabs/redisgraph:1.99.7 *:6379->6379/tcp
aa377a5f-62b krane_krane replicated 1/1 quay.io/appvia/krane:latest *:8000->8000/tcp
ตรวจสอบท่าทางความปลอดภัยของ Kubernetes Cluster RBAC ของคุณโดยไปที่ http: // localhost: 8000
โปรดทราบว่าสำหรับการปรับใช้คลัสเตอร์ระยะไกลคุณอาจต้องใช้บริการพอร์ตไปข้างหน้า Krane ก่อน
kubectl --context=my-remote-cluster --namespace=krane port-forward svc/krane 8000เพื่อลบสแต็ก
docker stack rm krane
--orchestrator kubernetes
--namespace kraneKrane จะแจ้งให้คุณทราบเกี่ยวกับความผิดปกติที่ตรวจพบของความรุนแรงขนาดกลางและสูงผ่านการรวมเข้าด้วยกัน
ในการเปิดใช้งานการแจ้งเตือนระบุ Slack webhook_url & channel ในไฟล์ config/config.yaml หรือตั้งค่าทั้งตัวแปรสภาพแวดล้อม SLACK_WEBHOOK_URL และตัวแปร SLACK_CHANNEL ตัวแปรสภาพแวดล้อมจะมีความสำคัญกว่าค่าไฟล์กำหนดค่า
ส่วนนี้อธิบายขั้นตอนเพื่อเปิดใช้งานการพัฒนาในท้องถิ่น
ติดตั้ง Krane Code Dependencies ด้วย
./bin/setup Krane ขึ้นอยู่กับ Redisgraph docker-compose เป็นวิธีที่เร็วที่สุดในการพึ่งพาการพึ่งพาของ Krane ที่ทำงานในพื้นที่
docker-compose up -d redisgraphเพื่อตรวจสอบบริการ Redisgraph ขึ้น:
docker-compose psเพื่อหยุดบริการ:
docker-compose downณ จุดนี้คุณควรจะสามารถแก้ไข krane codebase และผลการทดสอบโดยการเรียกใช้คำสั่งในเชลล์ท้องถิ่น
$ ./bin/krane --help # to get help
$ ./bin/krane report -k docker-desktop # to generate your first report for
# local docker-desktop k8s cluster
...เพื่อเปิดใช้งาน Dashboard UI Mode การพัฒนาท้องถิ่น
$ cd dashboard
$ npm install
$ npm startสิ่งนี้จะเริ่มต้นเซิร์ฟเวอร์แดชบอร์ดโดยอัตโนมัติเปิดเบราว์เซอร์เริ่มต้นและดูการเปลี่ยนแปลงไฟล์ต้นฉบับ
Krane มาก่อนกำหนดเพื่อปรับปรุงประสบการณ์นักพัฒนาซอฟต์แวร์ด้วย Skaffold การวนซ้ำในโครงการและตรวจสอบความถูกต้องของแอปพลิเคชันโดยเรียกใช้สแต็กทั้งหมดในคลัสเตอร์ Kubernetes ในพื้นที่หรือระยะไกลนั้นง่ายขึ้น รหัสฮอตโหลดช่วยให้การเปลี่ยนแปลงในพื้นที่สามารถเผยแพร่ไปยังคอนเทนเนอร์ที่ทำงานโดยอัตโนมัติเพื่อการพัฒนาอายุการใช้งานที่เร็วขึ้น
skaffold dev --kube-context docker-desktop --namespace krane --port-forwardเรียกใช้การทดสอบในพื้นที่ด้วย
bundle exec rspecเรายินดีต้อนรับการมีส่วนร่วมใด ๆ จากชุมชน! ดูคู่มือการบริจาคของเราสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเริ่มต้น หากคุณใช้ Krane ให้ค้นหาว่ามีประโยชน์หรือโดยทั่วไปสนใจในการรักษาความปลอดภัย Kubernetes โปรดแจ้งให้เราทราบโดย นำแสดงโดย และ ดู repo นี้ ขอบคุณ!
เข้าร่วมการอภิปรายในช่องชุมชนของเรา
Krane เป็นโครงการชุมชนและเรายินดีต้อนรับการมีส่วนร่วมของคุณ หากต้องการรายงานข้อผิดพลาดแนะนำการปรับปรุงหรือขอคุณสมบัติใหม่โปรดเปิดปัญหา GitHub อ้างถึงคู่มือการสนับสนุนของเราสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการที่คุณสามารถช่วยได้
ดูแผนงานของเราสำหรับรายละเอียดเกี่ยวกับแผนของเราสำหรับโครงการ
ผู้แต่ง: Marcin Ciszak [email protected]
ลิขสิทธิ์ (c) 2019-2020 Appvia Ltd
โครงการนี้มีการแจกจ่ายภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0