ArgoCD UI Permission Error 해결

2025. 8. 24. 21:23·Infra

문제발생

Argo CD API 서버가 팟과 deployment 리소스들을 조회할 권한이 없어서, UI에서 “세부 정보 가져오기” 요청을 보내도 403/권한 부족 에러가 났다.

 

1. ArgoCD UI에서 리소스를 클릭할 때 에러가 발생하는 것은 ArgoCD 서버가 해당 리소스에 대한 세부 정보를 가져올 권한이 부족하거나, RBAC 설정에 문제가 있을 수 있다.

 -> ArgoCD 서버의 권한을 확장 시도

$ kubectl patch clusterrole argocd-server --type json -p='[
  {
    "op": "add",
    "path": "/rules/-",
    "value": {
      "apiGroups": [""],
      "resources": ["pods", "services", "endpoints", "persistentvolumeclaims", "events", "configmaps", "secrets"],
      "verbs": ["get", "list", "watch"]
    }
  },
  {
    "op": "add",
    "path": "/rules/-",
    "value": {
      "apiGroups": ["apps"],
      "resources": ["deployments", "daemonsets", "replicasets", "statefulsets"],
      "verbs": ["get", "list", "watch"]
    }
  },
  {
    "op": "add",
    "path": "/rules/-",
    "value": {
      "apiGroups": ["networking.k8s.io"],
      "resources": ["ingresses"],
      "verbs": ["get", "list", "watch"]
    }
  }
]'

$ clusterrole.rbac.authorization.k8s.io/argocd-server patched

 

2. ArgoCD Application Controller 권한 확인 및 업데이트 

kubectl get clusterrole argocd-application-controller -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"application-controller","app.kubernetes.io/name":"argocd-application-controller","app.kubernetes.io/part-of":"argocd"},"name":"argocd-application-controller"},"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["*"]},{"nonResourceURLs":["*"],"verbs":["*"]}]}
  creationTimestamp: "2025-06-25T06:05:20Z"
  labels:
    app.kubernetes.io/component: application-controller
    app.kubernetes.io/name: argocd-application-controller
    app.kubernetes.io/part-of: argocd
  name: argocd-application-controller
  resourceVersion: "193669"
  uid: a5586776-c1a4-4575-a67d-ac0c6a968880
rules:
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'
- nonResourceURLs:
  - '*'
  verbs:
  - '*'

-> 이제 Application Controller 는 모든 권한을 가지고 있음

 

3. ArgoCD 서버를 재시작하여 권한 변경사항을 적용

$ kubectl rollout restart deployment argocd-server -n argocd
$ deployment.apps/argocd-server restarted

 

 

4. ArgoCD 서버가 다시 시작되길 기다림

$ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server

NAME                             READY   STATUS    RESTARTS   AGE
argocd-server-6b49447fcb-hpz74   0/1     Pending   0          6s
argocd-server-78d95cbc7-8krnf    1/1     Running   0          2d
argocd-server-78d95cbc7-vdcdl    1/1     Running   0          2d

 

5. 서버 재시작에 시간이 걸린다면, 다른 방법으로 문제를 해결

 5-1. ArgoCD의 RBAC 설정 파일을 직접 확인하고 수정

kubectl get configmap argocd-rbac-cm -n argocd -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-rbac-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-rbac-cm","namespace":"argocd"}}
  creationTimestamp: "2025-06-25T06:05:22Z"
  labels:
    app.kubernetes.io/name: argocd-rbac-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-rbac-cm
  namespace: argocd
  resourceVersion: "193692"
  uid: 68f8a695-6558-4854-bddb-89b35c7e3d87

-> RBAC ConfigMap이 비어있습니다. ArgoCD의 기본 admin 정책을 추가

 

kubectl patch configmap argocd-rbac-cm -n argocd --type merge -p='{
  "data":{
    "policy.default":"role:readonly",
    "policy.csv":"
      p, role:admin, applications, *, */*, allow
      p, role:admin, clusters, *, *, allow
      p, role:admin, repositories, *, *, allow
      g, argocd:admin, role:admin
    "
  }
}'

 

6. ArgoCD 서버 상태를 다시 확인

$ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server

NAME                             READY   STATUS    RESTARTS   AGE
argocd-server-6b49447fcb-hpz74   0/1     Pending   0          6m4s
argocd-server-78d95cbc7-8krnf    1/1     Running   0          2d
argocd-server-78d95cbc7-vdcdl    1/1     Running   0          2d

새로운 Pod가 여전히 Pending 상태입니다. 리소스 문제일 수 있으니, 현재 실행 중인 ArgoCD 서버로 진행한다.
임시 해결책: ArgoCD Application Controller를 재시작하여 Controller가 리소스 상태를 다시 수집하도록 한다.


kubectl rollout restart deployment argocd-application-controller -n argocd
Error from server (NotFound): deployments.apps "argocd-application-controller" not found

 

$ kubectl get statefulsets -n argocd

NAME                            READY   AGE
argocd-application-controller   1/1     2d
argocd-redis-ha-server          1/3     2d

7. application Controller 재시작

$ kubectl rollout restart statefulset argocd-application-controller -n argocd

statefulset.apps/argocd-application-controller restarted
Application Controller를 재시작했습니다. 잠시 기다린 후 다시 확인해보겠습니다.

추가로 확인할 사항들:

1. ArgoCD UI 브라우저 캐시 지우기
2. ArgoCD UI에서 하드 리프레시 (Ctrl+F5 또는 Cmd+Shift+R)

또 다른 방법으로, ArgoCD의 insecure 모드 설정을 확인해보겠습니다:

8. 확인

$ kubectl get configmap argocd-cmd-params-cm -n argocd -o yaml

apiVersion: v1
data:
  redis.server: argocd-redis-ha-haproxy:6379
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"redis.server":"argocd-redis-ha-haproxy:6379"},"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cmd-params-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cmd-params-cm","namespace":"argocd"}}
  creationTimestamp: "2025-06-25T06:05:22Z"
  labels:
    app.kubernetes.io/name: argocd-cmd-params-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-cmd-params-cm
  namespace: argocd
  resourceVersion: "193688"
  uid: 0218c586-83df-480f-90ea-86737fb8149b

저작자표시 비영리 동일조건 (새창열림)

'Infra' 카테고리의 다른 글

Cronjob을 활용한 기업정보 크롤링 파이프라인 구축하기(1) - 기능 구현  (0) 2025.09.07
EKS 클러스터 및 노드 그룹 생성, Kubectl 설치 및 연결  (0) 2025.06.24
쿠버네티스 리소스 관리 pod 과 deployment  (2) 2025.06.22
모니터링 환경 설정 - 배포 포트가 변경될 때 8080...8081,, switching  (0) 2025.05.26
모니터링 환경을 구축 Promtail, Loki, Prometheus, Grafana, Logback  (0) 2025.05.26
'Infra' 카테고리의 다른 글
  • Cronjob을 활용한 기업정보 크롤링 파이프라인 구축하기(1) - 기능 구현
  • EKS 클러스터 및 노드 그룹 생성, Kubectl 설치 및 연결
  • 쿠버네티스 리소스 관리 pod 과 deployment
  • 모니터링 환경 설정 - 배포 포트가 변경될 때 8080...8081,, switching
SungHoJung
SungHoJung
  • SungHoJung
    HOLOUD
    SungHoJung
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • AlgoMate (13)
      • TroubleShooting (0)
      • 여러가지 모음집 (5)
      • Infra (18)
  • 링크

    • github
  • 인기 글

  • 태그

    토스페이먼츠 연동
    docker-compose
    TossPayments
    Kubernetes
    IAM
    스왑 메모리 설정
    로컬 서버와 통신
    host.docker.internal
    ECS
    Celery
    k8s
    redis
    ci-cd
    bypass recaptcha
    결제 다이어그램
    크롤링
    EC2
    celery+redis
    컨테이너 간 통신
    AWS
  • hELLO· Designed By정상우.v4.10.3
SungHoJung
ArgoCD UI Permission Error 해결
상단으로

티스토리툴바