Add platform infrastructure configuration

This commit is contained in:
donghyeon-ka
2026-08-28 17:35:41 +09:00
parent fa76531e5b
commit 16c337bcc9
302 changed files with 83259 additions and 1 deletions
@@ -0,0 +1,20 @@
# AIStor 네트워크 정책
이 디렉터리는 AIStor 제어 영역(`aistor`)과 데이터 영역(`object-storage`)의
NetworkPolicy를 한 곳에서 관리한다.
- 두 namespace의 모든 Pod는 기본적으로 ingress와 egress가 차단된다.
- DNS와 k3s Kubernetes API 접근만 명시적으로 허용한다.
- API server에서 admission webhook `8443/TCP`로 들어오는 트래픽을 허용한다.
- ObjectStore Pod와 Operator 사이에는 관리 포트만 허용한다.
- S3 `9000/TCP`와 HTTP Console `9090/TCP``object-storage` namespace 내부
클라이언트만 사용할 수 있다.
- Operator와 sidecar 관리에는 `4221/TCP`, `4444/TCP`만 허용한다.
- 외부 인터넷, Traefik, NodePort, LoadBalancer, Host Nginx 경로는 열지 않는다.
`learning-project`가 S3를 사용하게 될 때에는 이 파일을 넓히지 않고, 소비
namespace와 ServiceAccount 또는 Pod label을 고정한 별도 정책을 추가한다.
```bash
kubectl kustomize infrastructure/networking/aistor
```
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- network-policies.yaml
@@ -0,0 +1,313 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: aistor-default-deny
namespace: aistor
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage-control-plane
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: aistor-allow-dns
namespace: aistor
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage-control-plane
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: aistor-allow-kubernetes-api
namespace: aistor
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage-control-plane
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.43.0.1/32
ports:
- protocol: TCP
port: 443
- to:
- ipBlock:
cidr: 192.168.0.107/32
ports:
- protocol: TCP
port: 6443
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: aistor-allow-api-server-admission-webhook
namespace: aistor
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage-control-plane
spec:
podSelector:
matchLabels:
aistor.min.io/name: object-store-webhook
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 192.168.0.107/32
ports:
- protocol: TCP
port: 8443
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: aistor-allow-object-store-management
namespace: aistor
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage-control-plane
spec:
podSelector:
matchExpressions:
- key: aistor.min.io/name
operator: In
values:
- adminjob-operator
- object-store-operator
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: object-storage
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
ports:
- protocol: TCP
port: 4221
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: object-storage
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
ports:
- protocol: TCP
port: 9000
- protocol: TCP
port: 4444
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-labeled-clients
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage
spec:
podSelector:
matchLabels:
platform.hyeonworks.com/aistor-client: "true"
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: object-storage
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
ports:
- protocol: TCP
port: 80
- protocol: TCP
port: 9000
- protocol: TCP
port: 9090
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-default-deny
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-dns
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: UDP
port: 53
- protocol: TCP
port: 53
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-kubernetes-api
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 10.43.0.1/32
ports:
- protocol: TCP
port: 443
- to:
- ipBlock:
cidr: 192.168.0.107/32
ports:
- protocol: TCP
port: 6443
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-internal-clients
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage
spec:
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
- podSelector:
matchLabels:
platform.hyeonworks.com/aistor-client: "true"
ports:
- protocol: TCP
port: 9000
- protocol: TCP
port: 9090
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: object-storage
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
ports:
- protocol: TCP
port: 9000
- protocol: TCP
port: 9090
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-aistor-operator
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage
spec:
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: aistor
podSelector:
matchExpressions:
- key: aistor.min.io/name
operator: In
values:
- adminjob-operator
- object-store-operator
ports:
- protocol: TCP
port: 9000
- protocol: TCP
port: 4444
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: aistor
podSelector:
matchLabels:
aistor.min.io/name: object-store-operator
ports:
- protocol: TCP
port: 4221