114 lines
4.0 KiB
YAML
114 lines
4.0 KiB
YAML
apiVersion: k8s.keycloak.org/v2beta1
|
|
kind: Keycloak
|
|
metadata:
|
|
name: keycloak
|
|
labels:
|
|
app.kubernetes.io/name: keycloak
|
|
app.kubernetes.io/instance: keycloak
|
|
app.kubernetes.io/version: "26.6.1"
|
|
app.kubernetes.io/component: identity-provider
|
|
app.kubernetes.io/part-of: auth-platform
|
|
app.kubernetes.io/managed-by: keycloak-operator
|
|
spec:
|
|
instances: 2
|
|
db:
|
|
vendor: postgres
|
|
host: identity-postgres
|
|
port: 5432
|
|
database: keycloak
|
|
usernameSecret:
|
|
name: keycloak-db-operator
|
|
key: username
|
|
passwordSecret:
|
|
name: keycloak-db-operator
|
|
key: password
|
|
poolInitialSize: 5
|
|
poolMinSize: 5
|
|
poolMaxSize: 20
|
|
bootstrapAdmin:
|
|
user:
|
|
secret: keycloak-bootstrap-admin-operator # 어떤 시크릿에서 읽을지 지정하는 거
|
|
hostname:
|
|
strict: true # 명시된 hostname을 기준으로 URL을 만든다.
|
|
backchannelDynamic: false # 백URL도 프론트 hostname과 동일하게 고정한다.
|
|
http:
|
|
httpEnabled: true
|
|
httpPort: 8080
|
|
serviceHttpPort: 80
|
|
serviceName: keycloak
|
|
labels:
|
|
app.kubernetes.io/name: keycloak
|
|
app.kubernetes.io/instance: keycloak
|
|
app.kubernetes.io/component: identity-provider
|
|
app.kubernetes.io/part-of: auth-platform
|
|
app.kubernetes.io/managed-by: keycloak-operator
|
|
proxy:
|
|
headers: xforwarded # X-Forwarded-For X-Forwarded-Proto X-Forwarded-Host X-Forwarded-Port 해당 헤더들을 사용하겠다는 의미
|
|
ingress:
|
|
enabled: false
|
|
networkPolicy:
|
|
enabled: false
|
|
additionalOptions:
|
|
- name: cache
|
|
value: ispn # 애플리케이션의 캐시 엔진으로 ispn으로 사용
|
|
- name: cache-stack
|
|
value: jdbc-ping # 클러스터링된 서버끼리 서로를 찾는(Discovery) 방식을 JDBC-PING으로 정한 것
|
|
- name: health-enabled
|
|
value: "true" # 상태 확인(Health Check) 엔드포인트를 활성화
|
|
- name: metrics-enabled
|
|
value: "true" # 메트릭(성능 지표) 수집 기능을 켬
|
|
- name: log-console-output
|
|
value: json # 로그 형식을 JSON 구조로 변경
|
|
env:
|
|
- name: JAVA_OPTS_APPEND
|
|
value: "-XX:MaxRAMPercentage=70 -XX:InitialRAMPercentage=50 -XX:+ExitOnOutOfMemoryError"
|
|
resources:
|
|
requests:
|
|
cpu: 500m
|
|
memory: 1Gi
|
|
limits:
|
|
cpu: "2"
|
|
memory: 2Gi
|
|
scheduling:
|
|
topologySpreadConstraints:
|
|
- maxSkew: 1
|
|
topologyKey: kubernetes.io/hostname
|
|
whenUnsatisfiable: ScheduleAnyway
|
|
labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/instance: keycloak
|
|
app.kubernetes.io/managed-by: keycloak-operator
|
|
affinity: # 특정 노드에 다른 pod에 관계에 따라 배치 위치를 결정하는 규칙을 정의한다
|
|
podAntiAffinity: # 특정 조건을 만족하는 포드와는 같은 장소에 있지 않는다.
|
|
preferredDuringSchedulingIgnoredDuringExecution: # 가급적 지켜줘
|
|
- weight: 100 # 가중치가 100임 매우 중요하다고 알림
|
|
podAffinityTerm: # 어떤 파드를 피해다닐지
|
|
topologyKey: kubernetes.io/hostname # 피할 기준은 호스트 네임으로 설정
|
|
labelSelector:
|
|
matchLabels:
|
|
app.kubernetes.io/instance: keycloak # keycloak과 피하겠다
|
|
app.kubernetes.io/managed-by: keycloak-operator # keycloak-operator에 의해 관리되는
|
|
unsupported:
|
|
podTemplate:
|
|
spec:
|
|
securityContext:
|
|
runAsNonRoot: true
|
|
runAsUser: 1000
|
|
runAsGroup: 1000
|
|
fsGroup: 1000
|
|
fsGroupChangePolicy: OnRootMismatch
|
|
seccompProfile:
|
|
type: RuntimeDefault
|
|
containers:
|
|
- name: keycloak
|
|
securityContext:
|
|
allowPrivilegeEscalation: false
|
|
capabilities:
|
|
drop:
|
|
- ALL
|
|
runAsNonRoot: true
|
|
runAsUser: 1000
|
|
runAsGroup: 1000
|
|
seccompProfile:
|
|
type: RuntimeDefault
|