Peerless + New Argo
This commit is contained in:
@@ -200,9 +200,9 @@ func (k *KubernetesService) ProvisionExecutionNamespace(ctx context.Context, ns
|
||||
}
|
||||
role := "argo-role"
|
||||
if err := k.CreateRole(ctx, ns, role,
|
||||
[][]string{{"coordination.k8s.io"}, {""}, {""}, {"multicluster.admiralty.io"}},
|
||||
[][]string{{"leases"}, {"secrets"}, {"pods"}, {"podchaperons"}},
|
||||
[][]string{{"get", "create", "update"}, {"get"}, {"patch"}, {"get", "list", "watch", "create", "update", "patch", "delete"}},
|
||||
[][]string{{"coordination.k8s.io"}, {""}, {""}, {"multicluster.admiralty.io"}, {"argoproj.io"}},
|
||||
[][]string{{"leases"}, {"secrets"}, {"pods"}, {"podchaperons"}, {"workflowtaskresults"}},
|
||||
[][]string{{"get", "create", "update"}, {"get"}, {"patch"}, {"get", "list", "watch", "create", "update", "patch", "delete"}, {"create", "patch"}},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -618,6 +618,7 @@ func (k *KubernetesService) CreatePVC(ctx context.Context, name, namespace, stor
|
||||
PersistentVolumeSource: v1.PersistentVolumeSource{
|
||||
HostPath: &v1.HostPathVolumeSource{
|
||||
Path: "/var/lib/oc-storage/" + name,
|
||||
Type: func() *v1.HostPathType { t := v1.HostPathDirectoryOrCreate; return &t }(),
|
||||
},
|
||||
},
|
||||
ClaimRef: &v1.ObjectReference{
|
||||
|
||||
@@ -31,6 +31,7 @@ var meths = []string{"remove execution", "create execution", "planner execution"
|
||||
"propalgation event", "search event", "confirm event",
|
||||
"considers event", "admiralty config event", "minio config event", "pvc config event",
|
||||
"workflow started event", "workflow step done event", "workflow done event",
|
||||
"peer behavior event",
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -61,6 +62,12 @@ const (
|
||||
WORKFLOW_STARTED_EVENT
|
||||
WORKFLOW_STEP_DONE_EVENT
|
||||
WORKFLOW_DONE_EVENT
|
||||
|
||||
// PEER_BEHAVIOR_EVENT is emitted by any trusted service (oc-scheduler,
|
||||
// oc-datacenter, …) when a peer exhibits suspicious or fraudulent behavior.
|
||||
// oc-discovery consumes it to update the peer's trust score and auto-blacklist
|
||||
// below threshold.
|
||||
PEER_BEHAVIOR_EVENT
|
||||
)
|
||||
|
||||
func (n NATSMethod) String() string {
|
||||
|
||||
49
tools/peer_behavior.go
Normal file
49
tools/peer_behavior.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package tools
|
||||
|
||||
import "time"
|
||||
|
||||
// BehaviorSeverity qualifies the gravity of a peer misbehavior.
|
||||
type BehaviorSeverity int
|
||||
|
||||
const (
|
||||
// BehaviorWarn: minor inconsistency — slight trust penalty.
|
||||
BehaviorWarn BehaviorSeverity = iota
|
||||
// BehaviorFraud: deliberate data manipulation (e.g. fake peerless Ref,
|
||||
// invalid booking) — significant trust penalty.
|
||||
BehaviorFraud
|
||||
// BehaviorCritical: severe abuse (secret exfiltration, data corruption,
|
||||
// system-level attack) — heavy penalty, near-immediate blacklist.
|
||||
BehaviorCritical
|
||||
)
|
||||
|
||||
// scorePenalties maps each severity to a trust-score deduction (out of 100).
|
||||
var scorePenalties = map[BehaviorSeverity]float64{
|
||||
BehaviorWarn: 5,
|
||||
BehaviorFraud: 20,
|
||||
BehaviorCritical: 40,
|
||||
}
|
||||
|
||||
// Penalty returns the trust-score deduction for this severity.
|
||||
func (s BehaviorSeverity) Penalty() float64 {
|
||||
if p, ok := scorePenalties[s]; ok {
|
||||
return p
|
||||
}
|
||||
return 5
|
||||
}
|
||||
|
||||
// PeerBehaviorReport is the payload carried by PEER_BEHAVIOR_EVENT.
|
||||
// Any trusted service can emit it; oc-discovery is the sole consumer.
|
||||
type PeerBehaviorReport struct {
|
||||
// ReporterApp identifies the emitting service (e.g. "oc-scheduler", "oc-datacenter").
|
||||
ReporterApp string `json:"reporter_app"`
|
||||
// TargetPeerID is the MongoDB DID (_id) of the offending peer.
|
||||
TargetPeerID string `json:"target_peer_id"`
|
||||
// Severity drives how much the trust score drops.
|
||||
Severity BehaviorSeverity `json:"severity"`
|
||||
// Reason is a human-readable description shown in the blacklist warning.
|
||||
Reason string `json:"reason"`
|
||||
// Evidence is an optional reference (booking ID, resource Ref, …).
|
||||
Evidence string `json:"evidence,omitempty"`
|
||||
// At is the timestamp of the observed misbehavior.
|
||||
At time.Time `json:"at"`
|
||||
}
|
||||
Reference in New Issue
Block a user