11.8. 외부 데이터베이스에 연결
keycloak-db-secret YAML 파일을 생성하고 Keycloak CR externalDatabase 속성을 enabled로 설정하여 Operator를 사용하여 외부 PostgreSQL 데이터베이스에 연결할 수 있습니다. 값은 Base64로 인코딩됩니다.
keycloak-db-secret에 대한 YAML 파일의 예
다음 속성은 데이터베이스의 호스트 이름 또는 IP 주소와 포트를 설정합니다.
-
POSTGRES_EXTERNAL_ADDRESS- IP 주소 또는 외부 데이터베이스의 호스트 이름입니다. -
POSTGRES_EXTERNAL_PORT- (선택 사항) 데이터베이스 포트입니다.
다른 속성은 호스트 또는 외부 데이터베이스에 대해 동일한 방식으로 작동합니다. 다음과 같이 설정합니다.
-
POSTGRES_DATABASE- 사용할 데이터베이스 이름입니다. -
POSTGRES_USERNAME- 데이터베이스 사용자 이름 -
POSTGRES_PASSWORD- 데이터베이스 암호 -
POSTGRES_SUPERUSER- 백업을 슈퍼 사용자로 실행해야 하는지 여부를 나타냅니다. 일반적으로true. -
SSL_MODE- 외부 PostgreSQL 데이터베이스 연결에서 TLS를 사용할지 여부를 나타냅니다. 가능한 값확인
SSL_MODE 가 활성화되면 Operator는 PostgreSQL 데이터베이스에서 사용한 root.crt 를 포함하는 keycloak-db-ssl-cert-secret 이라는 시크릿을 검색합니다. 보안 생성은 선택 사항이며 보안은 데이터베이스의 인증서를 확인하려는 경우에만 사용됩니다(예: SSLMODE: verify-ca). 예를 들면 다음과 같습니다.
Operator에서 사용할 TLS Secret 의 YAML 파일의 예입니다.
Operator는 keycloak-postgresql 라는 서비스를 생성합니다. 이 서비스는 Operator에서 POSTGRES_EXTERNAL_ADDRESS 콘텐츠를 기반으로 외부 데이터베이스를 노출하도록 구성됩니다. Red Hat Single Sign-On은 이 서비스를 사용하여 데이터베이스에 연결합니다. 즉, 이 서비스를 통해 데이터베이스에 직접 연결하지 않습니다.
Operator는 keycloak-postgresql 라는 서비스를 생성합니다. 이 서비스는 Operator에서 POSTGRES_EXTERNAL_ADDRESS 콘텐츠를 기반으로 외부 데이터베이스를 노출하도록 구성됩니다. Red Hat Single Sign-On은 이 서비스를 사용하여 데이터베이스에 연결합니다. 즉, 이 서비스를 통해 데이터베이스에 직접 연결하지 않습니다.
Keycloak 사용자 정의 리소스에는 외부 데이터베이스 지원을 활성화하기 위해 업데이트가 필요합니다.
외부 데이터베이스를 지원하는 Keycloak 사용자 정의 리소스의 YAML 파일의 예
사전 요구 사항
-
keycloak-db-secret에 대한 YAML 파일이 있습니다. -
Keycloak 사용자 지정 리소스를 수정하여
externalDatabase를true로 설정했습니다. - cluster-admin 권한 또는 관리자가 부여한 동등한 수준의 권한이 있어야 합니다.
절차
PostgreSQL 데이터베이스의 시크릿을 찾습니다.
oc get secret <secret_for_db> -o yaml. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow POSTGRES_EXTERNAL_ADDRESS는 Base64 형식입니다.secret의 값을 디코딩합니다.
echo "<encoded_secret>" | base64 -decode. 예를 들면 다음과 같습니다.echo "MTcyLjE3LjAuMw==" | base64 -decode 192.0.2.3
$ echo "MTcyLjE3LjAuMw==" | base64 -decode 192.0.2.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 디코딩된 값이 데이터베이스의 IP 주소와 일치하는지 확인합니다.
oc get pods -o wide NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 13m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 24m 192.0.2.3
$ oc get pods -o wide NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 13m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 24m 192.0.2.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow keycloak-postgresql가 실행 중인 서비스 목록에 표시되는지 확인합니다.oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE keycloak ClusterIP 203.0.113.0 <none> 8443/TCP 27m keycloak-discovery ClusterIP None <none> 8080/TCP 27m keycloak-postgresql ClusterIP 203.0.113.1 <none> 5432/TCP 27m
$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE keycloak ClusterIP 203.0.113.0 <none> 8443/TCP 27m keycloak-discovery ClusterIP None <none> 8080/TCP 27m keycloak-postgresql ClusterIP 203.0.113.1 <none> 5432/TCP 27mCopy to Clipboard Copied! Toggle word wrap Toggle overflow keycloak-postgresql서비스는 백엔드의 IP 주소 집합에 요청을 보냅니다. 이러한 IP 주소를 끝점이라고 합니다.keycloak-postgresql서비스에서 사용하는 끝점을 보고 데이터베이스에 IP 주소를 사용하는지 확인합니다.oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27m
$ oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27mCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Single Sign-On이 외부 데이터베이스로 실행되고 있는지 확인합니다. 이 예에서는 모든 항목이 실행 중임을 보여줍니다.
oc get pods NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 26m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 36m 192.0.2.3
$ oc get pods NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 26m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 36m 192.0.2.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow