NGINX Plus Ingress Controller와 Okta 통합 가이드
이번 포스트에서는 NGINX Plus Ingress Controller와 Okta 를 통합하는 방법에 대해 설명합니다.
NGINX Plus Ingress Controller란 Kubernetes 클러스터에서 HTTP 및 HTTPS 요청을 관리하고 라우팅하는 데 사용되는 컴포넌트입니다. 이 컨트롤러는 NGINX Plus의 기능을 활용하여 다음과 같은 주요 기능을 제공합니다.
- 로드 밸런싱 – 클러스터 내 여러 서비스로 트래픽을 분산하여 고가용성을 보장합니다.
- SSL Termination – HTTPS 요청을 처리하고 SSL/TLS 인증서를 관리하여 보안을 강화합니다.
- 리버스 프록시 – 클라이언트 요청을 적절한 서비스로 전달하고 응답을 클라이언트에 반환합니다.
- 모니터링 및 통계 – NGINX Plus의 실시간 대시보드 기능을 이용해 클러스터의 성능을 추적할 수 있습니다.
- 필터링 및 보안 – 요청에 대한 필터링 설정을 통해 보안성을 높일 수 있습니다.
목차
1. 버전 정보
2. Okta 란?
3. Okta 애플리케이션 설정
4. NGINX Plus Ingress Controller 설정
4-1. NGINX Plus Ingress Controller OIDC 설정
5. NGINX Plus Ingress Controller와 Okta 통합
6. NGINX Plus Ingress Controller와 Okta 통합 검증
7. 결론
1. 버전 정보
- kubectl v1.32.0
- kubeadm v1.32.0
- kubelet v1.32.0
- NGINX Plus Ingress Controller 4.0.0
이번 포스트에서는 NGINX Plus Ingress Controller를 배포하는 방법에 대해서는 다루지 않습니다. NGINX Plus Ingress Controller를 배포하는 방법은 아래 포스트를 참조하세요.
2. Okta 란?
Okta는 클라우드 기반의 아이덴티티 및 접근 관리(IAM) 솔루션입니다. 주로 기업들이 사용자 인증, 권한 부여 및 애플리케이션 관리를 효율적으로 처리할 수 있도록 도와줍니다. Okta의 주요 기능은 다음과 같습니다.
- Single Sign On(SSO) – 사용자가 여러 애플리케이션에 대해 한 번의 로그인으로 접근할 수 있도록 지원합니다.
- Multi Factor Authentication(MFA) – 추가적인 보안 계층을 제공하여 사용자의 신원을 확인합니다.
- Identity Management (IdM) – 사용자 계정 및 권한을 중앙에서 관리할 수 있습니다.
- Application Integration – 다양한 SaaS 애플리케이션과의 원활한 통합을 지원합니다.
- API Access Control – API에 대한 접근을 안전하게 관리할 수 있는 기능을 제공합니다.
3. Okta 애플리케이션 설정
1. Okta Developer Console에 로그인 합니다.
2. 새 애플리케이션을 등록합니다.

Create a new app integration에서 Sign-in method와 Application type을 지정한 뒤, Next 버튼을 클릭합니다.

App integration name에 Okta에서 표시할 해당 애플리케이션의 name을 설정합니다.

NGINX Plus Ingress Contorller에서 제공하는 OIDC endpoint를 사용하여 Sign-in redirect URIs와 Sign-out redirect URIs를 지정한 뒤, 하단에 Save 버튼을 클릭하여 저장합니다.

NGINX Plus Ingress Controller의 기본 값은 아래와 같습니다.
- Sign-in:
/_codexch - Sign-out:
/_logout
Custom 및 자세한 내용은 아래 포스트를 참조하세요.
4. NGINX Plus Ingress Controller 설정
간단한 웹 서비스를 생성합니다.
Deployment, Service 리소스:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy
namespace: nginx-ingress
spec:
selector:
matchLabels:
app: deploy
template:
metadata:
labels:
app: deploy
spec:
containers:
- name: nginxstore
image: nginxstore/webapp-example-1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: nginx-ingress
name: svc
spec:
ports:
- name: http-svc-port
port: 80
targetPort: 80
selector:
app: deploy
생성한 파드에 접근하기 위해 VirtualServer 리소스를 생성합니다:
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: hodevops
namespace: nginx-ingress
spec:
host: ho.nginxstore.kr
ingressClassName: nginx
upstreams:
- name: root
service: svc
port: 80
routes:
- path: /
action:
pass: root
위와 같이 Deployment, Service, VirtualServer 리소스를 배포한 뒤 서비스를 확인합니다.
# kubectl get deploy,svc,vs -n nginx-ingress

위와 같은 형태로 배포가 되었을 때, http://ho.nginxstore.kr 에 접속하면 아래와 같은 웹이 나타납니다.

4-1. NGINX Plus Ingress Controller OIDC 설정
Okta와 통합하기 위해 NGINX Plus Ingress Controller Deployment 리소스 수정 및 ConfigMap, Policy, Secret 리소스를 생성합니다.
NGINX Plus Ingress Controller에서 기본적으로 OIDC 기능이 비활성화 되어 있으므로 NGINX Plus Ingress Controller의 Deployment 리소스에 enable-oidc 인수를 활성화합니다.
spec.template.spec.containers
...
args:
- -nginx-plus
- -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
- -mgmt-configmap=$(POD_NAMESPACE)/nginx-config-mgmt
- -report-ingress-status
- -external-service=nginx-ingress
- -enable-oidc
5. NGINX Plus Ingress Controller와 Okta 통합
NGINX Plus Ingress Controller와 Okta의 통신을 위해 ConfigMap을 작성합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: nginx-ingress
data:
resolver-addresses: "8.8.8.8"
Okta에 NGINX Plus Ingress Controller가 접근하기 위해 Okta에서 생성한 애플리케이션의 정보에서 Client Secret을 확인합니다.

Client Secret을 Base64로 인코딩한 뒤, Secret 리소스를 생성합니다.
apiVersion: v1
kind: Secret
metadata:
name: oidc-secret
namespace: nginx-ingress
type: nginx.org/oidc
data:
client-secret: Q2tNS3JU*************2ZnlqZ1g2cmFRREVsTWRJbWhIbjQxZDdwNmVPNnZFaQ==
NGINX Plus Ingress Controller에서 Okta의 사용자 인증을 처리하기 위해 Policy 리소스를 생성합니다. 아래에 사용될 {yourOktaDomain}은 Okta의 정보에서 확인할 수 있습니다.

apiVersion: k8s.nginx.org/v1
kind: Policy
metadata:
name: oidc-policy
namespace: nginx-ingress
spec:
oidc:
clientID: 0oanwilz846Jkzbi9697
clientSecret: oidc-secret
authEndpoint: https://{yourOktaDomain}/oauth2/v1/authorize
tokenEndpoint: https://{yourOktaDomain}/oauth2/v1/token
jwksURI: https://{yourOktaDomain}/oauth2/v1/keys
endSessionEndpoint: https://{yourOktaDomain}/oauth2/v1/logout
- client ID – 생성한 Okta 애플리케이션에서 확인할 수 있는 클라이언트의 공개 식별자입니다.
- clientSecret – 앞서 생성한 Okta 애플리케이션의 client secret 리소스 입니다.
- authEndpoint – 조직 인증 서버의 인증 엔드포인트를 입력합니다.
- tokenEndpoint – 조직 인증 서버의 토큰 엔드포인트를 입력합니다.
- jwksURI – Okta의 공개 키를 제공하는 엔드포인트로, NGINX Plus Ingress Controller는 이곳에서 키를 가져와 수신한 토큰의 유효성을 검증합니다.
- endSessionEndpoint – 로그아웃의 엔드포인트입니다.
작성한 모든 리소스를 배포하고, VirtualServer 리소스에 생성한 Policy 리소스를 추가합니다.
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: hodevops
namespace: nginx-ingress
spec:
host: ho.nginxstore.kr
ingressClassName: nginx
upstreams:
- name: root
service: svc
port: 80
routes:
- path: /
policies:
- name: oidc-policy
action:
pass: root
6. NGINX Plus Ingress Controller와 Okta 통합 검증
모든 리소스가 정상적으로 배포되었다면, http://ho.nginxstore.kr 에 접근 시, Okta 로그인 화면이 나타나면 성공적으로 통합된 것입니다. 로그인을 시도하여 웹 애플리케이션에 접근합니다.


로그인을 완료하면 서비스에 접근이 되는 것을 확인할 수 있습니다.


http://ho.nginxstore.kr/logout을 입력하여 세션 종료 후 로그아웃이 되는 지 확인합니다.


7. 결론
NGINX Plus Ingress Controller와 Okta를 통합함으로써 우리는 강력하고 유연한 인증 및 접근 제어 솔루션을 구현할 수 있습니다. 이를 통해 다음과 같은 주요 이점을 확인할 수 있었습니다:
- 강화된 보안
Okta의 인증 및 권한 부여 기능을 활용해 사용자의 신원을 보다 효과적으로 확인하고, 민감한 데이터 및 서비스에 대한 무단 접근을 방지할 수 있었습니다. - 유연한 아키텍처
NGINX Plus Ingress Controller의 고급 라우팅 및 정책 설정 기능 덕분에 인증 흐름을 서비스 요구에 맞게 세밀하게 조정할 수 있었습니다. - 확장성과 안정성
Okta와 NGINX Plus의 결합은 대규모 트래픽을 처리하면서도 안정적인 사용자 경험을 보장할 수 있는 확장 가능한 환경을 제공했습니다.
NGINX 상업용 버전을 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.
댓글을 달려면 로그인해야 합니다.