3.1. OPENMARU COP 운영절차
OPENMARU COP Console 개요
CLI(kubectl/helm)로 수행하는 대부분의 작업은 OPENMARU COP Console(웹 콘솔)에서도 동일하게 수행할 수 있습니다. 본 장의 각 절차에서는 CLI 명령과 함께 해당 작업에 대응하는 Console 화면을 함께 안내합니다.

Console은 https://console.{sub_domain}.{domain}.{TLD} 주소로 접속하며, SSO 로그인(Keycloak 통합 인증) 또는 토큰 로그인(ServiceAccount 토큰) 두 가지 방식을 지원합니다.


로그인 후에는 사용자 권한(admins/users/viewers)에 따라 표시되는 메뉴와 수행 가능한 작업이 달라집니다. 여러 클러스터가 등록된 환경에서는 상단 헤더의 클러스터 선택 드롭다운으로 클러스터를 전환할 수 있고, 네임스페이스 드롭다운으로 작업 대상 네임스페이스를 전환할 수 있습니다. 로그아웃은 우측 상단 프로필 메뉴에서 수행합니다.
사용자 관리
OPENMARU COP는 LLDAP(경량 사용자 디렉터리)과 Keycloak(SSO/OIDC)을 통해 사용자 계정을 통합 관리합니다.
LLDAP 접속 정보
| 항목 | 값 |
|---|---|
| 네임스페이스 | openmaru-sso |
| LDAP 포트 | 3890 |
| Web UI 포트 | 17170 |
| Web UI URL | https://ldap.{sub_domain}.{domain}.{TLD} |
| Base DN | dc={sub_domain},dc={domain},dc={TLD} |
ℹ️ 권장: 사용자/그 룹 관리는 아래 LLDAP 웹 UI를 기본으로 사용하십시오. CLI(
lldap-cli)는 스크립트 자동화가 필요한 경우에만 보조적으로 사용합니다.
방법 1) LLDAP 웹 UI를 통한 사용자 생성
- LLDAP Web UI(
https://ldap.{sub_domain}.{domain}.{TLD})에 관리자 계정으로 로그인합니다. - Users > Create a user 메뉴에서 사용자명, 이메일, 비밀번호를 입력합니다.


- Groups 메뉴에서 사용자를 아래 기본 그룹 중 하나에 소속시킵니다. 그룹 상세 화면 하단의 드롭다운에서 사용자를 선택하고 Add to group 버튼을 누르면 됩니다.
| 그룹 | 매핑되는 클러스터 권한 |
|---|---|
admins | cluster-admin (전체 관리 권한) |
users | cop-cluster-users (편집 사용자) |
viewers | cop-cluster-viewers (조회 사용자) |

방법 2) lldap-cli를 통한 사용자 생성
# 사용자 생성
lldap-cli user add --username jdoe --email jdoe@example.com
# 비밀번호 설정
lldap-cli user set-password --username jdoe
# 그룹에 사용자 추가
lldap-cli group add-member --group users --username jdoe
# 사용자 목록 조회
lldap-cli user list
# 사용자 상세 조회
lldap-cli user show --username jdoe
그룹 관리
# 그룹 생성
lldap-cli group add --name developers
# 그룹에 사용자 추가/제거
lldap-cli group add-user --group developers --username jdoe
lldap-cli group remove-user --group developers --username jdoe
# 그룹 목록/상세 조회
lldap-cli group list
lldap-cli group show --name developers
Keycloak 동기화
LLDAP에 계정을 생성한 후에는 Keycloak과 동기화해야 실제 로그인이 가능합니다. Keycloak Admin Console(https://sso.{sub_domain}.{domain}.{TLD})에서 대상 Realm(openmaru)을 선택한 뒤 User federation > ldap로 진입하여 우측 상단 Action 드롭다운에서 Sync all users를 실행하거나, 사용자가 최초 로그인을 시도하면 자동으로 동기화됩니다.


⚠️ 주의: 신 규 사용자를 생성한 직후 즉시 로그인이 안 될 경우, Keycloak Full Sync를 수동으로 실행하십시오.
사용자 권한 부여
OPENMARU COP는 Kubernetes RBAC(Role-Based Access Control)과 OIDC 그룹 클레임을 연동하여 권한을 부여합니다.
그룹 - 역할 매핑
| LLDAP 그룹 | OIDC 그룹 클레임 | ClusterRole |
|---|---|---|
admins | oidc:admins | cluster-admin |
users | oidc:users | cop-cluster-users (커스텀) |
viewers | oidc:viewers | cop-cluster-viewers (커스텀) |
커스텀 ClusterRoleBinding 예시
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: oidc-admins-binding
subjects:
- kind: Group
name: "oidc:admins"
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
네임스페이스 단위 권한 부여(Role/RoleBinding)
특정 사용자/그룹에게 특정 네임스페이스에 대한 제한된 권한만 부여하려면 Role과 RoleBinding을 사용합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-developer
namespace: my-app
rules:
- apiGroups: ["", "apps"]
resources: ["pods", "deployments", "services", "configmaps"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: app-developer-binding
namespace: my-app
subjects:
- kind: Group
name: "oidc:developers"
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: app-developer
apiGroup: rbac.authorization.k8s.io
권한 확인
⚠️ 주의: OPENMARU COP는 OIDC 사용자명에
oidc:접두사(--oidc-username-prefix=oidc:)를 붙이도록 설정되어 있습니다.--as옵션에 접두사 없이 사용자명만 입력하면 존재하지 않는 사용자로 조회되어 결과가 부정확합니다.
# 특정 사용자의 특정 네임스페이스 내 전체 권한 목록 확인
kubectl auth can-i --list --as=oidc:jdoe@example.com -n my-app
# 특정 동작 수행 가능 여부 확인
kubectl auth can-i create deployments --as=oidc:jdoe@example.com -n my-app
# OIDC 그룹에 연결된 ClusterRoleBinding 확인
kubectl get clusterrolebindings | grep oidc
Console에서 확인
좌측 사용자 관리 메뉴에서 서비스 계정, 역할(Role/ClusterRole), 역할 바인딩(RoleBinding/ClusterRoleBinding)을 GUI로 조회할 수 있습니다. 역할 상세 화면에서는 Resources/Verbs/API Groups 규칙을, 역할 바인딩 상세 화면에서는 연결된 Subject(사용자/그룹) 목록을 확인할 수 있습니다.


프로젝트(네임스페이스) 생성
OPENMARU COP에서 프로젝트는 Kubernetes Namespace로 구현됩니다.
방법 1) OPENMARU COP Console을 통한 생성
- 좌측 메뉴에서 클러스터 > 네임스페이스로 이동합니다.
- Create 버튼을 클릭합니다.
- Name, Labels, Annotations를 입력하고 생성합니다.


ℹ️ 생성된 리소스 간의 소유/연결 관계는 Console 맵 메뉴에서 시각적 그래프로 확인할 수 있습니다.
방법 2) CLI를 통한 생성
kubectl create namespace my-app
리소스 쿼터 설정
신규 프로젝트 생성 시 리소스 사용량 제한을 함께 설정하는 것을 권장합니다.
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-app-quota
namespace: my-app
spec:
hard:
requests.cpu: "8"
requests.memory: 16Gi
limits.cpu: "16"
limits.memory: 32Gi
pods: "50"
services: "20"
secrets: "50"
configmaps: "50"
persistentvolumeclaims: "10"