restructure: console→client-console, add admin-console skeleton, move docs to doc/
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package cloud
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/client-go/dynamic"
|
||||
)
|
||||
|
||||
var netpolGVR = schema.GroupVersionResource{Group: "networking.k8s.io", Version: "v1", Resource: "networkpolicies"}
|
||||
|
||||
// ApplyNetworkPolicy создаёт NetworkPolicy в namespace ns для межтенантной изоляции.
|
||||
//
|
||||
// Политика «deny-cross-tenant» запрещает входящий трафик из других пользовательских
|
||||
// namespace-ов, разрешая только:
|
||||
// - Трафик внутри самого namespace (pod-to-pod внутри тенанта)
|
||||
// - Трафик из Fission system namespace (router → function pod)
|
||||
// - Трафик из kube-system (kubelet health checks, CoreDNS)
|
||||
//
|
||||
// Это обеспечивает сетевую изоляцию между тенантами без отключения внутренних
|
||||
// вызовов Fission. Env var FISSION_SYSTEM_NAMESPACE задаёт имя Fission namespace
|
||||
// (default: "fission").
|
||||
func ApplyNetworkPolicy(ctx context.Context, dyn dynamic.Interface, ns string) {
|
||||
fissionSysNS := os.Getenv("FISSION_SYSTEM_NAMESPACE")
|
||||
if fissionSysNS == "" {
|
||||
fissionSysNS = "fission"
|
||||
}
|
||||
|
||||
netpolObj := &unstructured.Unstructured{Object: map[string]any{
|
||||
"apiVersion": "networking.k8s.io/v1",
|
||||
"kind": "NetworkPolicy",
|
||||
"metadata": map[string]any{"name": "deny-cross-tenant", "namespace": ns},
|
||||
"spec": map[string]any{
|
||||
"podSelector": map[string]any{}, // применяется ко всем подам namespace
|
||||
"policyTypes": []any{"Ingress"},
|
||||
"ingress": []any{
|
||||
// Разрешаем трафик внутри namespace (pod-to-pod)
|
||||
map[string]any{"from": []any{map[string]any{"podSelector": map[string]any{}}}},
|
||||
// Разрешаем трафик из Fission core namespace (router → function pod)
|
||||
map[string]any{"from": []any{map[string]any{"namespaceSelector": map[string]any{
|
||||
"matchLabels": map[string]any{"kubernetes.io/metadata.name": fissionSysNS},
|
||||
}}}},
|
||||
// Разрешаем трафик из kube-system (kubelet health checks, DNS)
|
||||
map[string]any{"from": []any{map[string]any{"namespaceSelector": map[string]any{
|
||||
"matchLabels": map[string]any{"kubernetes.io/metadata.name": "kube-system"},
|
||||
}}}},
|
||||
},
|
||||
},
|
||||
}}
|
||||
|
||||
_, err := dyn.Resource(netpolGVR).Namespace(ns).Create(ctx, netpolObj, metav1.CreateOptions{})
|
||||
if err != nil && !apierrors.IsAlreadyExists(err) {
|
||||
log.Printf("cloud.ApplyNetworkPolicy: %s: %v", ns, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user