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,16 @@
# AIStor Console OIDC 프로필
기존 ObjectStore baseline은 그대로 두고 다음 항목만 추가합니다.
- storage-admin.learn.hyeonworks.com Console Ingress
- Keycloak 표준 OIDC 환경 변수와 policy claim
- Traefik의 Console 접근과 Keycloak HTTPS egress
S3 API Service에는 Ingress를 만들지 않습니다. aistor-keycloak-oidc
Secret의 client-id, client-secret 값은 적용 스크립트가 만들며 Git에
저장하지 않습니다. 기존 root 계정은 비상용으로 유지합니다.
`MINIO_IDENTITY_OPENID_VENDOR=keycloak`은 사용하지 않습니다. 이 옵션은
AIStor가 Keycloak Admin API로 사용자를 추가 검증할 때 admin URL, realm과
service-account 권한을 요구합니다. 이 프로필은 Keycloak이 발급한 `policy`
claim을 표준 OIDC로 소비하므로 불필요한 Admin API 권한을 부여하지 않습니다.
@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio-aistor-console
namespace: object-storage
labels:
app.kubernetes.io/name: minio-aistor
app.kubernetes.io/component: admin-console
app.kubernetes.io/part-of: platform
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
ingressClassName: traefik
rules:
- host: storage-admin.learn.hyeonworks.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minio-aistor-console
port:
number: 9090
@@ -0,0 +1,15 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base/deployment
- console-ingress.yaml
- network-policies.yaml
patches:
- path: objectstore-oidc-patch.yaml
target:
group: aistor.min.io
version: v1
kind: ObjectStore
name: minio-aistor
@@ -0,0 +1,101 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-traefik-console
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: admin-console
spec:
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
app.kubernetes.io/name: traefik
ports:
- protocol: TCP
port: 9090
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-host-nginx-keycloak
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: oidc-client
spec:
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 192.168.0.107/32
ports:
- protocol: TCP
port: 443
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-blackbox-console-health
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: admin-console
spec:
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: observability
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus-blackbox-exporter
app.kubernetes.io/instance: blackbox-exporter
ports:
- protocol: TCP
port: 9090
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: object-storage-allow-prometheus-metrics
namespace: object-storage
labels:
app.kubernetes.io/part-of: platform
app.kubernetes.io/component: object-storage-metrics
spec:
podSelector:
matchLabels:
aistor.min.io/objectStore: minio-aistor
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: observability
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
app.kubernetes.io/instance: observability-core-kube-pr-prometheus
ports:
- protocol: TCP
port: 9000
@@ -0,0 +1,32 @@
apiVersion: aistor.min.io/v1
kind: ObjectStore
metadata:
name: minio-aistor
spec:
env:
- name: MINIO_PROMETHEUS_AUTH_TYPE
value: public
- name: MINIO_BROWSER_REDIRECT_URL
value: https://storage-admin.learn.hyeonworks.com
- name: MINIO_IDENTITY_OPENID_CONFIG_URL
value: https://id.learn.hyeonworks.com/realms/hyeonworks/.well-known/openid-configuration
- name: MINIO_IDENTITY_OPENID_CLIENT_ID
valueFrom:
secretKeyRef:
name: aistor-keycloak-oidc
key: client-id
- name: MINIO_IDENTITY_OPENID_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: aistor-keycloak-oidc
key: client-secret
- name: MINIO_IDENTITY_OPENID_SCOPES
value: openid,profile,email
- name: MINIO_IDENTITY_OPENID_DISPLAY_NAME
value: Hyeonworks ID
- name: MINIO_IDENTITY_OPENID_CLAIM_NAME
value: policy
- name: MINIO_IDENTITY_OPENID_REDIRECT_URI_DYNAMIC
value: "on"
- name: MINIO_BROWSER_SESSION_DURATION
value: 8h