[문제 해결] Docker compose 환경에서 keycloak 연결 이슈

[문제 해결] Docker compose 환경에서 keycloak 연결 이슈
Photo by Rubaitul Azad / Unsplash

문제 상황

도커 컴포즈로 keycloak 컨테이너와 그 컨테이너에 연결할 내 앱 서버를 작성했는데, 이상하게 처음 startup할 때 keycloak 연결 에러가 났다. 사실 연결 오류로 실패할 경우 자동으로 재시작하면 문제없이 동작하기에 그냥 넘어가도 됐지만… 계속 신경이 쓰여서 해당 에러를 제거하고자 했다. 서버 시작할 때마다 에러 메시지 뜨면 괜히 신경쓰이니 …

keycloak.exceptions.KeycloakAuthenticationError: 401: b'{"error":"invalid_grant","error_description":"Invalid user credentials"}'

분명히 user credential은 맞게 설정했는데도 Invalid user credentials 이라니 이상하다.

주요 특이사항

  1. compose에서 컨테이너를 1개로 설정했을 때는 안 났다.
  2. 2개를 설정할 때부터 에러가 났다.
  3. 에러도 2개 중의 1개 컨테이너에서만 난다.

문제 원인

확인해 보니, keycloak 컨테이너에서 동일한 계정으로 너무 동시에 여러 연결 요청이 들어올 경우 credential이 맞더라도 401 오류를 내는 설정이 기본적으로 설정되어 있었다. 그래서 두 컨테이너 중 먼저 연결한 경우는 문제 없었지만, 바로 다음에 들어온 컨테이너의 연결 요청은 어뷰징으로 판단하고 거부했던 것이었다.

문제 해결

해당 에러가 안 나도록 가장 쉽게 해결하는 방법은 컨테이너들의 연결 요청 시간을 약간 텀을 두는 것이다. 아주 가까운 시간만 아니면, 예를 들어 1초 이상만 차이나도 keycloak에서 어뷰징으로 판단하지 않는다. 그래서 도커 컴포즈에서 앱 서버에 대해 아래와 같은 command를 추가했다.

    command:
      [
        "/bin/bash",
        "-c",
        "sleep $$(( ( RANDOM % 10 ) + 1 )) && ./app_server start",
      ]

이렇게 하면 컨테이너들이 시작할 때 랜덤 n초 후에 시작해서 연결 텀이 생기므로 연결 오류가 날 가능성이 매우 작아진다. 사실 제로로 만드는 게 제일 좋지만 이정도도 충분하고, 사실 에러가 난다 해도 재시작하면 아무 문제가 없으니 해당 오류가 나타날 가능성을 최소화하는 정도로 마무리했다.

Read more

[잡설] DNS에 대해 ,, 이런저런 ,,

DNS는 Domain Name System. 도메인 주소 (parkchisu.com) 을 넣으면 거기에 맞는 IP(32.132.12.123)를 리턴하는 시스템이다. 당연히 이런 기초정보를 공부하기 위해 쓰는 건 아니고.. 이번에 작업하면서 약간 헷갈렸던 부분이 있어 관련 내용을 공유한다. 회사의 내부망에서도 자체 DNS 서버를 운영할 일이 생긴다. 예를 들어 사내망에서만 접속할 수

By Park Chisu
k8s pod 자원 배분에 대해 ..

k8s pod 자원 배분에 대해 ..

k8s는 안다고 생각했는데 알고보니 몰랐던 것들이 계속 나온다 .. 이번엔 가장 기본적인 파드 자원 분배에 관한 이런 저런 얘기를 써놓을 예정 .. 계속 추가 예정 ,, 일단 기본적인 개념은 Request, Limit 일 것이다. * Request : 파드가 노드 안에서 "나는 이만큼 노드의 자원을 쓸 것이다" 라고 선언해두는 값. CPU의 경우 100m 이런식으로 정의할

By Park Chisu
[리눅스] 외부인용 임시 계정 발급하기

[리눅스] 외부인용 임시 계정 발급하기

업무를 하다보면 리눅스 서버에 외부인의 연결을 허용해야 할 때가 있다. 특정 프로그램 설치라던지.. 그 때는 그 담당 직원 전용 계정을 만들어서 전달해야 한다. 여기서는 Ubuntu 24.04를 기준으로 작성한다. 계정 발급 타사 직원용 계정(예: external_vendor)을 생성합니다. # 계정 생성 (홈 디렉토리 포함) sudo useradd -m -s /bin/bash

By Park Chisu
[수제] Ha 솔루션을 활용한 이중화 구축 후기 + 잡설

[수제] Ha 솔루션을 활용한 이중화 구축 후기 + 잡설

작성 동기 회사의 클라우드 기반 SAAS 제품을 온프레미스로도 제공하고자 하는 수요가 있어서, 어쩔수없이 해당 작업을 진행하게 되었다. 어쩔 수 없이라고는 했지만 Cloud 기반에서 온프레미스 기반으로 전환하면 여러가지로 이점이 많다. 보안적인 측면에서도 강화되는 부분이 있고(밖으로 안 나가니까), 기업/기관의 민감한 정보를 직접 그들의 내부망에서 나가지 않아도 되는 장점도 있다. 또한

By Park Chisu