Add platform infrastructure configuration
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# 관리 도구 네임스페이스
|
||||
|
||||
`platform-admin`은 pgAdmin처럼 운영자가 사용하는 비공개 관리 도구만
|
||||
수용합니다. 애플리케이션, 데이터베이스, 모니터링 워크로드와 분리하며
|
||||
Pod Security `restricted`를 강제합니다.
|
||||
|
||||
이 디렉터리에는 Secret을 두지 않습니다.
|
||||
@@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- namespace.yaml
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: platform-admin
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: private-admin-tools
|
||||
pod-security.kubernetes.io/enforce: restricted
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,17 @@
|
||||
# 플랫폼 네임스페이스
|
||||
|
||||
이 base는 첫 Gitea 배포에 필요한 namespace만 선언한다.
|
||||
|
||||
- `cnpg-system`: CloudNativePG Operator
|
||||
- `platform-data`: 공통 플랫폼 PostgreSQL Cluster
|
||||
- `gitea`: Gitea 애플리케이션
|
||||
|
||||
초기 구축 중 업스트림 Operator와 Helm Chart가 차단되지 않도록 Pod Security
|
||||
Admission은 `baseline`을 강제한다. 더 엄격한 `restricted` 프로파일 위반은 감사
|
||||
이벤트와 kubectl 경고를 통해 계속 표시한다. namespace에서 `restricted` 강제로
|
||||
전환하기 전에는 렌더링된 매니페스트 검사와 런타임 Smoke Test를 먼저 통과해야
|
||||
한다.
|
||||
|
||||
`latest` 정책 버전은 이 단일 노드 클러스터에 설치된 Kubernetes 버전을 따른다.
|
||||
향후 클러스터 업그레이드와 정책 변경을 분리해서 진행해야 한다면 먼저 Kubernetes
|
||||
minor 버전으로 고정한다.
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: cnpg-system
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: database-controller
|
||||
pod-security.kubernetes.io/enforce: baseline
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: gitea
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: source-control
|
||||
pod-security.kubernetes.io/enforce: baseline
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- cnpg-system.yaml
|
||||
- platform-data.yaml
|
||||
- gitea.yaml
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: platform-data
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: platform-databases
|
||||
pod-security.kubernetes.io/enforce: baseline
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,17 @@
|
||||
# Observability namespaces
|
||||
|
||||
This kustomization owns exactly the `observability` and `observability-agent`
|
||||
Namespace objects. Both opt into observability discovery through
|
||||
`observability.hyeonworks.com/enabled: "true"`.
|
||||
|
||||
`observability` enforces, audits, and warns at `restricted:latest`.
|
||||
`observability-agent` enforces `privileged:latest` so the narrowly scoped agent
|
||||
workloads can use their approved read-only host mounts, while audit and warn
|
||||
remain `restricted:latest`.
|
||||
|
||||
`discovery-namespaces.txt` is an inventory for the later apply workflow. The
|
||||
five listed namespaces already exist and are deliberately not rendered here.
|
||||
That workflow may own only the
|
||||
`observability.hyeonworks.com/enabled` discovery label on those namespaces. It
|
||||
must preserve their existing Pod Security and purpose labels, and rollback must
|
||||
restore or remove only that exact discovery-label key.
|
||||
@@ -0,0 +1,5 @@
|
||||
kube-system
|
||||
gitea
|
||||
keycloak
|
||||
platform-data
|
||||
object-storage
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- observability.yaml
|
||||
- observability-agent.yaml
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: observability-agent
|
||||
labels:
|
||||
observability.hyeonworks.com/enabled: "true"
|
||||
pod-security.kubernetes.io/enforce: privileged
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: observability
|
||||
labels:
|
||||
observability.hyeonworks.com/enabled: "true"
|
||||
pod-security.kubernetes.io/enforce: restricted
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,5 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- ../../base
|
||||
@@ -0,0 +1,22 @@
|
||||
# Phase 2 네임스페이스
|
||||
|
||||
상태: `keycloak`만 실제 적용, `aistor`·`object-storage` 미적용
|
||||
현재 AIStor NetworkPolicy gate가 남아 있으므로 디렉터리 전체를 apply하지 않고
|
||||
Keycloak-only 스크립트가 `keycloak.yaml` 하나만 정확히 적용했다.
|
||||
|
||||
이 빌드 루트는 Phase 1 namespace 빌드 루트를 변경하지 않고 인증과 오브젝트
|
||||
스토리지 단계에 추가되는 namespace를 선언한다.
|
||||
|
||||
- `keycloak`: Keycloak Operator와 단일 Keycloak 인스턴스
|
||||
- `aistor`: AIStor Operator와 `minio-license` Secret 계약
|
||||
- `object-storage`: standalone AIStor ObjectStore와 해당 PVC
|
||||
|
||||
Phase 2의 컨트롤러나 서비스를 적용하기 전에 이 디렉터리를 별도로 렌더링한다.
|
||||
|
||||
```sh
|
||||
kubectl kustomize infrastructure/namespaces/phase2
|
||||
```
|
||||
|
||||
이 namespace들은 Pod Security `baseline` 프로파일을 강제하고 `restricted`
|
||||
위반을 감사하고 경고한다. `restricted` 강제로 전환하기 전에는 고정된 업스트림
|
||||
Operator의 렌더링과 런타임 시험을 먼저 통과해야 한다.
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: aistor
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: object-storage-control-plane
|
||||
pod-security.kubernetes.io/enforce: baseline
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: keycloak
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: identity
|
||||
pod-security.kubernetes.io/enforce: baseline
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
resources:
|
||||
- keycloak.yaml
|
||||
- aistor.yaml
|
||||
- object-storage.yaml
|
||||
@@ -0,0 +1,13 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: object-storage
|
||||
labels:
|
||||
app.kubernetes.io/part-of: platform
|
||||
platform.hyeonworks.com/purpose: object-storage-data-plane
|
||||
pod-security.kubernetes.io/enforce: baseline
|
||||
pod-security.kubernetes.io/enforce-version: latest
|
||||
pod-security.kubernetes.io/audit: restricted
|
||||
pod-security.kubernetes.io/audit-version: latest
|
||||
pod-security.kubernetes.io/warn: restricted
|
||||
pod-security.kubernetes.io/warn-version: latest
|
||||
Reference in New Issue
Block a user